Compare commits

...

33 Commits

Author SHA1 Message Date
Gregory Hainaut
21012a8ec3 1.4.x: x86emitter: fix compilation issue with recent GCC
close #1544
2016-09-02 22:54:17 +02:00
Avi Halachmi (:avih)
8f74b640f0 about dialog: add Devina 2016-01-05 13:20:32 +02:00
Avi Halachmi (:avih)
f3ba414443 Games DB: update compatibility: (17 better, 1 worse):
Summary:

Worse:
- Degrading compat from 5 to 4 for SLUS-20573: Sims, The

Better:
- Improving compat from 3 to 5 for SLUS-21632: NHL 2K8
- Improving compat from 2 to 5 for SLUS-21425: NHL 2K7
- Improving compat from 4 to 5 for SLUS-20919: ESPN - NFL 2K5
- Improving compat from 2 to 5 for SLUS-21232: College Hoops 2K6
- Improving compat from 2 to 5 for SLUS-20225: Gadget Racers
- Improving compat from 2 to 5 for SLUS-21914: NHL 2K10
- Improving compat from 3 to 5 for SLUS-20235: Superman - Shadow of Apokolips
- Improving compat from 2 to 5 for SLUS-20842: Sims, The - Bustin' Out
- Improving compat from 4 to 5 for SLUS-21563: Horsez
- Improving compat from 4 to 5 for SLUS-20637: Chessmaster (Online)
- Improving compat from 3 to 5 for SLES-50874: F1 2002
- Improving compat from 2 to 5 for SLES-52298: IndyCar Series 2005
- Improving compat from 0 to 5 for SLUS-21680: Harvey Birdman - Attorney at Law
- Improving compat from 0 to 5 for SCES-51684: World Rally Championship 3
- Improving compat from 0 to 5 for SLUS-21235: MLB 2k6
- Improving compat from 0 to 5 for SLES-50252: Penny Racers
- Improving compat from 0 to 5 for SLES-54151: Let's Make a Soccer Team!
2016-01-04 21:18:25 +02:00
Avi Halachmi (:avih)
e4c424896e widescreen patches (cheats_ws.zip): 56 new, 26 updated, overall 1994
Taken from Devina's archive at the forum (updated 2016-01-03), and removed the
three WIP patches: 1771BFE4, C77AF2CA and C77AF2CA.
2016-01-04 18:52:11 +01:00
Kingcom
c84ca53b4d Fix mouse position calculation 2016-01-03 00:22:29 +00:00
Kingcom
9f7fd13875 Optimize register list drawing 2016-01-03 00:22:13 +00:00
Jonathan Li
4ee00501b2 gsdx:windows: Don't change renderer when changing adapter
The previous behaviour loaded the saved renderer config whenever the
adapter combobox was changed. The renderer will now only change if the
new adapter doesn't support the currently selected renderer (i.e
Direct3D11 might not be supported, so it'll revert to Direct3D 9).

Fixes #1080.
2016-01-02 22:29:40 +00:00
Jonathan Li
a7b580da0c gsdx:windows: Widen Hacks dialog slightly
The Wild Arms Offset text was slightly cut off due to the label being
too small. Make the dialog slightly wider so the full text will fit.

Someone should probably make the dialog look nicer at some point.
2016-01-02 22:29:25 +00:00
Gregory Hainaut
1b85d4403c gsdx: only enable "please fix me" message on debug build 2016-01-02 18:54:20 +01:00
ramapcsx2
12e97b66b0 pdfs updated 2015-12-31 17:57:09 +01:00
ramapcsx2
f5f4fc9014 portable.ini preparing for rollout 2015-12-31 17:55:58 +01:00
Kingcom
8e095ba8f8 Make register list scrollable 2015-12-31 17:20:14 +01:00
Kingcom
a6ef814653 Fix debugger crash after using shutdown. Fixes #1074 2015-12-31 17:20:10 +01:00
Kingcom
5a591dd650 Remember size of debugger window 2015-12-31 17:20:03 +01:00
Kingcom
884b2f4c4c Scale the font size in debugger controls with DPI 2015-12-31 17:19:59 +01:00
Kingcom
5b157d03e7 Use alternating background colors in the register list 2015-12-31 17:19:54 +01:00
Kingcom
bdf5be3111 Revert to old register list 2015-12-31 17:19:47 +01:00
Gregory Hainaut
ae5f302189 i10n: refresh cs_CS binary file 2015-12-31 10:03:40 +01:00
František Zatloukal
e99db4f6d6 Czech translation 2015-12-31 10:00:29 +01:00
Gregory Hainaut
cddc805dde gsdx: fix onimusha crash in custom resolution
I don't understand why but it seems it needs more than 8MB
2015-12-30 19:19:58 +01:00
Gregory Hainaut
7f32ba2e88 gsdx linux: fix ShadeBoost option case 2015-12-30 19:19:54 +01:00
ramapcsx2
1501d7fe8a whops 2015-12-30 18:52:01 +01:00
ramapcsx2
4f2a8161a7 gsdx dialog: renderer order and naming changed. due to many factors, we can't yet remove any of the software options. naming / order changes are possible though, if a majority votes for it. 2015-12-30 18:08:17 +01:00
ramapcsx2
81be817c39 about box changes 2015-12-30 15:49:28 +01:00
ramapcsx2
8ba761d334 1.4.0 version string is now saved to (Win) registry and portable.ini. We use this to detect older configuration files and start the First Time Wizard if necessary. This also prevents all older .inis (PCSX2, plugins) from being used in 1.4.0.
This commit should probably not be merged into master, but stay on this branch. A nicer way to handle upgrades is planned.
2015-12-29 17:52:23 +01:00
Kingcom
22880339b6 gsdx: fix windows compilation 2015-12-28 22:05:55 +01:00
Gregory Hainaut
08724daf98 gsdx: increase buffer to have crash in case of overflow
Avoid a crash on Onimusha3 (PAL 60HZ)

In theory it will be better to find the root cause of overflow. I.e. somewhere in this
code below. Dirty rectangle is too big.

***********************************************************************
if(rowsize > 0 && offset % rowsize == 0)
{
    int y = GSLocalMemory::m_psm[psm].pgs.y * offset / rowsize;

    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;
        continue;
    }
}
***********************************************************************

So as a temporary solution (that will likely stay for a couple of
years), buffers were increased.
2015-12-28 22:05:50 +01:00
Gregory Hainaut
3d3b275410 gsdx: fix crash when preload data frame is enabled
Height of the dirty rectangle must be the GS size of the RT. Of course
RT doesn't have any height so we compute the max safest value.

Fix issue #987

Candidate for 1.4 release
2015-12-28 18:06:30 +01:00
ramapcsx2
f61c27ae20 small pdfs update and an nsis fix 2015-12-28 18:06:21 +01:00
willkuer
6259e61792 gsdx: defaulting extra rendering threads to 2 2015-12-28 18:06:12 +01:00
Akash
c56994b6a9 gsdx-gui: Label and Tooltip changes to RT option 2015-12-28 18:06:03 +01:00
Kingcom
ae763523d3 Fix IOP bltzal and bgezal opcodes 2015-12-28 18:05:51 +01:00
Gregory Hainaut
aca2f1434b bump some version numbers to 1.4
I may have miss a couple of them.
2015-12-27 18:05:26 +01:00
40 changed files with 810 additions and 612 deletions

View File

@@ -107,18 +107,6 @@ Region = NTSC-J
//eeClampMode = 3 // Text in races works
vuClampMode = 2 // Text in GT mode works
---------------------------------------------
Serial = PBPX-95205
Name = Playstation 2 - Demo Disc 2000
Region = PAL-Unk
---------------------------------------------
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 = PBPX-95201
Name = Dead or Alive 2
Region = NTSC-J
@@ -128,6 +116,10 @@ Compat = 5
patch=0,EE,00290408,word,24060000
[/patches]
---------------------------------------------
Serial = PBPX-95205
Name = Playstation 2 - Demo Disc 2000
Region = PAL-Unk
---------------------------------------------
Serial = PBPX-95503
Name = Gran Turismo 3 - A-Spec [PS2 Bundle]
Region = NTSC-U
@@ -1133,6 +1125,14 @@ Serial = SCED-51537
Name = Official PlayStation 2 Magazine Demo 37
Region = PAL-M5
---------------------------------------------
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 = SCED-52436
Name = Playstation2 UK Demo 7-2004
Region = PAL-Unk
@@ -1618,6 +1618,13 @@ Serial = SCES-51176
Name = Disney's Treasure Planet
Region = PAL-M4
---------------------------------------------
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 = SCES-51179
Name = This is Football 2003
Region = PAL-E
@@ -1725,6 +1732,7 @@ Region = PAL-M5
Serial = SCES-51684
Name = World Rally Championship 3
Region = PAL-M8
Compat = 5
XgKickHack = 1
[patches = 80802EA9]
comment= Patch By Prafull
@@ -4589,13 +4597,6 @@ EETimingHack = 1 // Fixes hang before going ingame
eeRoundMode = 0 // Fixes characters flying into sky
eeClampMode = 3 // Required to load areas correctly
---------------------------------------------
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-97147
Name = Cool Boarders 2001 [Demo]
Region = NTSC-U
@@ -7115,6 +7116,7 @@ Region = PAL-M5
Serial = SLES-50252
Name = Penny Racers
Region = PAL-M3
Compat = 5
[patches = FBE2613D]
//Patched by Prafull
//Fixes vsync issues
@@ -8390,7 +8392,7 @@ Region = PAL-M5
Serial = SLES-50874
Name = F1 2002
Region = PAL-M4
Compat = 3
Compat = 5
[patches = A0ED2D23]
//Patched by Prafull
//Fixes controller issue but skips videos
@@ -11301,7 +11303,7 @@ Compat = 5
Serial = SLES-52298
Name = IndyCar Series 2005
Region = PAL-M5
Compat = 2
Compat = 5
---------------------------------------------
Serial = SLES-52308
Name = Karaoke Stage
@@ -15397,6 +15399,7 @@ Region = PAL-M6
Serial = SLES-54151
Name = Let's Make a Soccer Team!
Region = PAL-M5
Compat = 5
---------------------------------------------
Serial = SLES-54152
Name = Ant Bully, The
@@ -34626,7 +34629,7 @@ Compat = 4
Serial = SLUS-20225
Name = Gadget Racers
Region = NTSC-U
Compat = 2
Compat = 5
[patches = 03854A28]
//Patched by Prafull
//Fixes vsync issues
@@ -34684,7 +34687,7 @@ Region = NTSC-U
Serial = SLUS-20235
Name = Superman - Shadow of Apokolips
Region = NTSC-U
Compat = 3
Compat = 5
---------------------------------------------
Serial = SLUS-20236
Name = Taz Wanted
@@ -36193,7 +36196,7 @@ Compat = 5
Serial = SLUS-20573
Name = Sims, The
Region = NTSC-U
Compat = 5
Compat = 4
---------------------------------------------
Serial = SLUS-20574
Name = NCAA March Madness 2003
@@ -36467,7 +36470,7 @@ Compat = 5
Serial = SLUS-20637
Name = Chessmaster (Online)
Region = NTSC-U
Compat = 4
Compat = 5
---------------------------------------------
Serial = SLUS-20638
Name = Backyard Wrestling - Don't Try This At Home
@@ -37377,7 +37380,7 @@ Compat = 5
Serial = SLUS-20842
Name = Sims, The - Bustin' Out
Region = NTSC-U
Compat = 2
Compat = 5
---------------------------------------------
Serial = SLUS-20843
Name = Dead to Rights II
@@ -37765,7 +37768,7 @@ Compat = 5
Serial = SLUS-20919
Name = ESPN - NFL 2K5
Region = NTSC-U
Compat = 4
Compat = 5
[patches = 42F9D5AF]
//Patched by Prafull
//Fixes random hangs
@@ -39311,7 +39314,7 @@ Compat = 5
Serial = SLUS-21232
Name = College Hoops 2K6
Region = NTSC-U
Compat = 2
Compat = 5
[patches = A60E027C]
//Patched by Prafull
//This fixes random hangs and makes the game playable
@@ -39335,6 +39338,7 @@ Compat = 2
Serial = SLUS-21235
Name = MLB 2k6
Region = NTSC-U
Compat = 5
[patches = 88BB9A5C]
//Patched by Prafull
//Avoid hang at start
@@ -40284,7 +40288,7 @@ Region = NTSC-U
Serial = SLUS-21425
Name = NHL 2K7
Region = NTSC-U
Compat = 2
Compat = 5
[patches = 478EFBDB]
//Patched by Prafull
//Avoid hang at start
@@ -40785,7 +40789,7 @@ Region = NTSC-U
Serial = SLUS-21563
Name = Horsez
Region = NTSC-U
Compat = 4
Compat = 5
---------------------------------------------
Serial = SLUS-21564
Name = Atelier Iris 3: Grand Phantasm
@@ -41115,7 +41119,7 @@ eeRoundMode = 0
Serial = SLUS-21632
Name = NHL 2K8
Region = NTSC-U
Compat = 3
Compat = 5
[patches = 77B49EF8]
//Patched by Prafull-thanks to harsh
//Avoid hang at start
@@ -41338,6 +41342,7 @@ Compat = 5
Serial = SLUS-21680
Name = Harvey Birdman - Attorney at Law
Region = NTSC-U
Compat = 5
---------------------------------------------
Serial = SLUS-21681
Name = Boogie
@@ -42330,7 +42335,7 @@ Compat = 5
Serial = SLUS-21914
Name = NHL 2K10
Region = NTSC-U
Compat = 2
Compat = 5
[patches = 82CA153C]
//Patched by Prafull
//Fix hanging problem

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1,2 @@
RunWizard=0
RunWizard=1
Version=140

View File

@@ -16,6 +16,9 @@
#include "PrecompiledHeader.h"
#include "cpudetect_internal.h"
#include "internal.h"
#ifdef __linux__
#include "fxsrintrin.h"
#endif
using namespace x86Emitter;

View File

@@ -31,7 +31,7 @@ EOF
# Default value
GIT_SHA1=0;
BRANCH="master"
BRANCH="1.4.x"
while [ -n "$1" ]; do
case $1 in
-help|-h ) help;shift 1;;

View File

@@ -21,7 +21,7 @@ set -e
######################################################################
# Script configuration
######################################################################
VERSION=1.3.0
VERSION=1.4.0
COPYRIGHT="PCSX2 Dev Team"
BUG_MAIL="https://github.com/PCSX2/pcsx2/issues"

View File

@@ -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: 2015-12-22 16:57+0100\n"
"PO-Revision-Date: 2012-09-09 20:43+0100\n"
"PO-Revision-Date: 2015-12-31 01:13+0100\n"
"Last-Translator: Zbyněk Schwarz <zbynek.schwarz@gmail.com>\n"
"Language-Team: Zbyněk Schwarz\n"
"Language: cs\n"
@@ -15,7 +15,7 @@ msgstr ""
"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"
@@ -116,6 +116,8 @@ 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 ""
@@ -123,22 +125,29 @@ msgid ""
"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 ""
@@ -226,6 +235,9 @@ msgid ""
"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
@@ -336,7 +348,7 @@ msgstr ""
#: pcsx2/gui/MemoryCardFolder.h:527
#, c-format
msgid "(FolderMcd) Memory Card is full, could not add: %s"
msgstr ""
msgstr "(FolderMcd) Paměťová karta je plná, nemohu přidat: %s"
#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138
msgid ""
@@ -469,20 +481,18 @@ msgstr ""
"* 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). 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"
@@ -490,9 +500,9 @@ msgid ""
"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:686
#, c-format
@@ -593,30 +603,27 @@ msgstr ""
"%s, pak stiskněte Zrušit pro uzavření panelu Nastavení."
#: 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 ""
"Sníží množství cyklů EE asi o 50%. Průměrné zrychlení, ale *způsobí* "
"zadrhování zvuku ve spoustě FMV."
"-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
#, fuzzy
msgid ""
"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games "
"with high compatibility."
msgstr ""
"Sníží množství cyklů EE asi o 33%. Mírné zrychlení ve většině her s vysokou "
"kompatibilitou."
"-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
#, fuzzy
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:44
@@ -624,6 +631,8 @@ msgid ""
"1 - Increases the EE's cyclerate by about 33%. Increases hardware "
"requirements, may increase in-game FPS."
msgstr ""
"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:49
msgid ""
@@ -631,6 +640,9 @@ msgid ""
"requirements, may noticeably increase in-game FPS.\n"
"This setting can cause games to FAIL TO BOOT."
msgstr ""
"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:65
msgid "0 - Disables VU Cycle Stealing. Most compatible setting!"
@@ -671,7 +683,6 @@ msgstr ""
"panel zakažte nejdříve."
#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135
#, fuzzy
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 "
@@ -680,9 +691,11 @@ msgid ""
"bring about an increase in in-game FPS while also making games more "
"demanding and possibly causing glitches."
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. "
"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:152
msgid ""

View File

@@ -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: 2015-12-22 16:57+0100\n"
"PO-Revision-Date: 2012-09-09 20:41+0100\n"
"PO-Revision-Date: 2015-12-31 01:17+0100\n"
"Last-Translator: Zbyněk Schwarz <zbynek.schwarz@gmail.com>\n"
"Language-Team: Zbyněk Schwarz\n"
"Language: cs\n"
@@ -15,7 +15,7 @@ msgstr ""
"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"
@@ -390,13 +390,12 @@ msgid "Loading PS2 system plugins..."
msgstr "Nahrávám systémové zásuvné moduly PS2..."
#: pcsx2/gui/AppInit.cpp:50
#, fuzzy
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:139
msgid "PCSX2 Recompiler Error(s)"
@@ -439,10 +438,9 @@ msgid "executes an ELF image"
msgstr "spustí obraz ELF"
#: pcsx2/gui/AppInit.cpp:238
#, fuzzy
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:239
msgid "boots from the CDVD plugin (overrides IsoFile parameter)"
@@ -614,11 +612,8 @@ 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:196
#, fuzzy
msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable."
msgstr ""
"Varování! Systémové zásuvné moduly nebyly načteny. PCSX2 může být "
"nepoužitelný."
msgstr "Varování! Správný BIOS nebyl vybrán. PCSX2 nemusí být provozuschopné."
#: pcsx2/gui/AppMain.cpp:370
#, c-format
@@ -704,7 +699,6 @@ msgid "It's what I use (the programmer guy)."
msgstr "To, co používám já (programátor)."
#: pcsx2/gui/ConsoleLogger.cpp:441
#, fuzzy
msgid "Normal font"
msgstr "Normální"
@@ -815,14 +809,13 @@ msgid "Disables all log source filters."
msgstr "Zakáže všechny filtry zdroje záznamů."
#: pcsx2/gui/ConsoleLogger.cpp:485
#, fuzzy
msgid "Restore Default"
msgstr "Obnovit Výchozí"
#: pcsx2/gui/ConsoleLogger.cpp:485
#, fuzzy
msgid "Restore default source filters."
msgstr "Povolí všechny filtry zdroje záznamů."
msgstr "Obnovit výchozí filtry zdrojů."
#: pcsx2/gui/ConsoleLogger.cpp:487
msgid "&Log"
@@ -833,8 +826,9 @@ msgid "&Sources"
msgstr "&Zdroje"
#: pcsx2/gui/Debugger/DisassemblyDialog.cpp:223
#, fuzzy
msgid "panel"
msgstr ""
msgstr "panel"
#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:35
#, c-format
@@ -866,18 +860,16 @@ msgid "Contributors"
msgstr "Přispěvatelé"
#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86
#, fuzzy
msgid "PlayStation 2 Emulator"
msgstr "Emulátor Playstation 2"
msgstr "Emulátor PlayStation 2"
#: 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:93
#, fuzzy
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:98
msgid "I've seen enough"
@@ -923,12 +915,12 @@ msgstr "Ignorovat"
#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267
#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276
msgid "Retry"
msgstr ""
msgstr "Znovu"
#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270
#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273
msgid "Abort"
msgstr ""
msgstr "Zrušit"
#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280
msgid "Reset"
@@ -936,44 +928,45 @@ msgstr "Resetovat"
#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36
msgid "Convert a memory card to a different format"
msgstr ""
msgstr "Převést paměťovou kartu do jiného formátu"
#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47
msgid "Convert"
msgstr ""
msgstr "Převést"
#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53
msgid "Convert: "
msgstr ""
msgstr "Převést:"
#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56
msgid "To: "
msgstr ""
msgstr "Do:"
#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87
msgid "8MB File"
msgstr ""
msgstr "8MB Soubor"
#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89
msgid "16MB File"
msgstr ""
msgstr "16MB Soubor"
#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91
msgid "32MB File"
msgstr ""
msgstr "32MB Soubor"
#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93
msgid "64MB File"
msgstr ""
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
#, fuzzy
msgid "Folder"
msgstr "Adresáře"
msgstr "Složka"
#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122
#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151
@@ -985,17 +978,16 @@ msgstr "Chyba (%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 "Vytvořit paměťovou kartu"
msgstr "Převést paměťovou kartu"
#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153
msgid "This target type is not supported!"
msgstr ""
msgstr "Cílový typ není podporován!"
#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159
msgid "Memory Card conversion failed for unknown reasons."
msgstr ""
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"
@@ -1026,9 +1018,8 @@ msgid "Create memory card"
msgstr "Vytvořit paměťovou kartu"
#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163
#, fuzzy
msgid "Error: The directory for the memory card could not be created."
msgstr "Chyba: Paměťová karta nemohla být vytvořena."
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."
@@ -1101,11 +1092,13 @@ msgstr ""
#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226
msgid "Folder [experimental]"
msgstr ""
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 ""
@@ -1114,6 +1107,10 @@ msgid ""
"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
@@ -1181,7 +1178,7 @@ msgstr "Automaticky vyjmout paměťové karty při nahrávání uložených stav
#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44
msgid "Automatically manage saves based on running game"
msgstr ""
msgstr "Automaticky spravuje uložené pozice podle právě spuštěné hry"
#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101
msgid "MemoryCard Manager"
@@ -1300,7 +1297,7 @@ msgstr "Výstup GS je Zakázán!"
#: pcsx2/gui/GlobalCommands.cpp:308
msgid "Exit PCSX2?"
msgstr ""
msgstr "Ukončit PCSX2?"
#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425
msgid "Save state"
@@ -1440,9 +1437,8 @@ msgid "Enable Cheats"
msgstr "Povolit Cheaty"
#: pcsx2/gui/MainFrame.cpp:438
#, fuzzy
msgid "Enable Widescreen Patches"
msgstr "Povolit Záplaty"
msgstr "Povolit Záplaty pro širokoúhlé displeje"
#: pcsx2/gui/MainFrame.cpp:441
msgid "Enable Host Filesystem"
@@ -1713,9 +1709,9 @@ msgid "Blockdumps (%s)"
msgstr "Výpisy bloků (%s)"
#: pcsx2/gui/MainMenuClicks.cpp:275
#, fuzzy, c-format
#, c-format
msgid "Compressed (%s)"
msgstr "Výpisy bloků (%s)"
msgstr "Komprimováno (%s)"
#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299
msgid "All Files (*.*)"
@@ -1723,7 +1719,7 @@ msgstr "Všechny soubory (*.*)"
#: pcsx2/gui/MainMenuClicks.cpp:281
msgid "Select disc image, compressed disc image, or block-dump..."
msgstr ""
msgstr "Vyberte obraz disku, komprimovaný obraz disku a nebo block-dump..."
#: pcsx2/gui/MainMenuClicks.cpp:298
msgid "Select ELF file..."
@@ -2108,23 +2104,23 @@ msgid "Simulate VIF1 FIFO read ahead. Fixes slow loading games."
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
#, fuzzy
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]"
@@ -2174,9 +2170,8 @@ msgid "Create ..."
msgstr "Vytvořit ..."
#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397
#, fuzzy
msgid "Convert ..."
msgstr "Vložit ..."
msgstr "Převést ..."
#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409
msgid "Card: "
@@ -2326,9 +2321,8 @@ msgid "Delete card"
msgstr "Smazat kartu"
#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032
#, fuzzy
msgid "Convert card"
msgstr "Vložit kartu"
msgstr "Převést kartu"
#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036
#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040
@@ -2356,8 +2350,9 @@ msgid "Formatted"
msgstr "Formátována"
#: pcsx2/gui/Panels/MemoryCardListView.cpp:104
#, fuzzy
msgid "Type"
msgstr ""
msgstr "Typ"
#: pcsx2/gui/Panels/MemoryCardListView.cpp:105
msgid "Last Modified"
@@ -2376,14 +2371,12 @@ msgid "Yes"
msgstr "Ano"
#: pcsx2/gui/Panels/MemoryCardListView.cpp:152
#, fuzzy
msgid "PS2"
msgstr "SZS"
msgstr "PS2"
#: pcsx2/gui/Panels/MemoryCardListView.cpp:152
#, fuzzy
msgid "PSX"
msgstr "SZS"
msgstr "PSX"
#: pcsx2/gui/Panels/MemoryCardListView.cpp:165
msgid "[-- Unused cards --]"
@@ -2780,21 +2773,20 @@ 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:591
#, fuzzy, c-format
#, 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"

View File

@@ -26,14 +26,9 @@
; ------------------------------------------
; (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
File ..\bin\PCSX2_keys.ini.default
!insertmacro UNINSTALL.LOG_CLOSE_INSTALL

View File

@@ -414,13 +414,16 @@ struct Pcsx2Config
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

View File

@@ -379,6 +379,8 @@ Pcsx2Config::DebugOptions::DebugOptions()
ShowDebuggerOnStart = false;
FontWidth = 8;
FontHeight = 12;
WindowWidth = 0;
WindowHeight = 0;
}
void Pcsx2Config::DebugOptions::LoadSave( IniInterface& ini )
@@ -388,6 +390,8 @@ void Pcsx2Config::DebugOptions::LoadSave( IniInterface& ini )
IniBitBool( ShowDebuggerOnStart );
IniBitfield(FontWidth);
IniBitfield(FontHeight);
IniBitfield(WindowWidth);
IniBitfield(WindowHeight);
}

View File

@@ -39,9 +39,9 @@ void psxBGEZ() // Branch if Rs >= 0
void psxBGEZAL() // Branch if Rs >= 0 and link
{
_SetLink(31);
if (_i32(_rRs_) >= 0)
{
_SetLink(31);
doBranch(_BranchTarget_);
}
}
@@ -62,9 +62,9 @@ void psxBLTZ() // Branch if Rs < 0
void psxBLTZAL() // Branch if Rs < 0 and link
{
_SetLink(31);
if (_i32(_rRs_) < 0)
{
_SetLink(31);
doBranch(_BranchTarget_);
}
}

View File

@@ -16,9 +16,9 @@
#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;

View File

@@ -134,6 +134,7 @@ void SysCoreThread::Reset()
GetVmMemory().DecommitAll();
SysClearExecutionCache();
sApp.PostAppMethod( &Pcsx2App::leaveDebugMode );
g_FrameCount = 0;
}

View File

@@ -56,7 +56,8 @@ namespace PathDefs
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;
}

View File

@@ -289,13 +289,15 @@ void Pcsx2App::EstablishAppUserMode()
// 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 @@ void Pcsx2App::EstablishAppUserMode()
// 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);
}

View File

@@ -23,6 +23,7 @@
#include "BreakpointWindow.h"
#include "AppConfig.h"
#include "System.h"
#include "DisassemblyDialog.h"
#include <wx/mstream.h>
#include <wx/clipbrd.h>
@@ -147,8 +148,8 @@ CtrlDisassemblyView::CtrlDisassemblyView(wxWindow* parent, DebugInterface* _cpu)
{
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;

View File

@@ -20,6 +20,7 @@
#include "BreakpointWindow.h"
#include "DebugEvents.h"
#include "DisassemblyDialog.h"
#include <wchar.h>
#include <wx/clipbrd.h>
@@ -55,8 +56,8 @@ enum MemoryViewMenuIdentifiers
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;

View File

@@ -16,456 +16,549 @@
#include "PrecompiledHeader.h"
#include "CtrlRegisterList.h"
#include "DebugTools/Debug.h"
#include "DebugEvents.h"
#include "AppConfig.h"
#include "DisassemblyDialog.h"
BEGIN_EVENT_TABLE(CtrlRegisterList, wxWindow)
EVT_PAINT(CtrlRegisterList::paintEvent)
EVT_GRID_LABEL_LEFT_CLICK(CtrlRegisterList::gridEvent)
EVT_GRID_LABEL_RIGHT_CLICK(CtrlRegisterList::gridEvent)
EVT_GRID_CELL_LEFT_CLICK(CtrlRegisterList::gridEvent)
EVT_GRID_CELL_RIGHT_CLICK(CtrlRegisterList::gridEvent)
EVT_KEY_DOWN(CtrlRegisterList::keydownEvent)
EVT_BOOKCTRL_PAGE_CHANGED(-1, CtrlRegisterList::categoryChangedEvent)
EVT_SIZE(CtrlRegisterList::sizeEvent)
EVT_LEFT_DOWN(CtrlRegisterList::mouseEvent)
EVT_RIGHT_DOWN(CtrlRegisterList::mouseEvent)
EVT_RIGHT_UP(CtrlRegisterList::mouseEvent)
EVT_MOTION(CtrlRegisterList::mouseEvent)
EVT_KEY_DOWN(CtrlRegisterList::keydownEvent)
END_EVENT_TABLE()
enum DisassemblyMenuIdentifiers
{
ID_REGISTERLIST_DISPLAY32 = 1,
ID_REGISTERLIST_DISPLAY64,
ID_REGISTERLIST_DISPLAY128,
ID_REGISTERLIST_CHANGELOWER,
ID_REGISTERLIST_CHANGEUPPER,
ID_REGISTERLIST_CHANGEVALUE
ID_REGISTERLIST_DISPLAY32 = 1,
ID_REGISTERLIST_DISPLAY64,
ID_REGISTERLIST_DISPLAY128,
ID_REGISTERLIST_CHANGELOWER,
ID_REGISTERLIST_CHANGEUPPER,
ID_REGISTERLIST_CHANGEVALUE
};
CtrlRegisterList::CtrlRegisterList(wxWindow* parent, DebugInterface* _cpu) :
wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS | wxBORDER_NONE),
cpu(_cpu),
lastPc(0),
lastCycles(0),
maxBits(128),
needsSizeUpdating(true),
needsValueUpdating(true)
CtrlRegisterList::CtrlRegisterList(wxWindow* parent, DebugInterface* _cpu)
: wxScrolledWindow(parent,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxWANTS_CHARS|wxBORDER_NONE|wxVSCROLL), cpu(_cpu)
{
int rowHeight = g_Conf->EmuOptions.Debugger.FontHeight;
int charWidth = g_Conf->EmuOptions.Debugger.FontWidth;
rowHeight = getDebugFontHeight()+2;
charWidth = getDebugFontWidth();
category = 0;
maxBits = 128;
lastPc = 0xFFFFFFFF;
for (int i = 0; i < cpu->getRegisterCategoryCount(); i++)
{
int count = cpu->getRegisterCount(i);
#ifdef _WIN32
wxFont font = wxFont(wxSize(charWidth, rowHeight), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL,
false, L"Lucida Console");
wxFont labelFont = font.Bold();
#else
wxFont font = wxFont(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, L"Lucida Console");
font.SetPixelSize(wxSize(charWidth, rowHeight));
wxFont labelFont = font;
labelFont.SetWeight(wxFONTWEIGHT_BOLD);
#endif
registerCategories = new wxNotebook(this, wxID_ANY);
// 'c' and 'C', much time wasted.
#if wxMAJOR_VERSION >= 3
registerCategories->Connect(wxEVT_BOOKCTRL_PAGE_CHANGED, wxBookCtrlEventHandler(CtrlRegisterList::categoryChangedEvent), nullptr, this);
#else
registerCategories->Connect(wxEVT_COMMAND_BOOKCTRL_PAGE_CHANGED, wxBookctrlEventHandler(CtrlRegisterList::categoryChangedEvent), nullptr, this);
#endif
for (int cat = 0; cat < cpu->getRegisterCategoryCount(); cat++)
{
int numRegs = cpu->getRegisterCount(cat);
ChangedReg* regs = new ChangedReg[count];
memset(regs,0,sizeof(ChangedReg)*count);
changedCategories.push_back(regs);
changedCategories.push_back(std::vector<ChangedReg>(numRegs));
int maxLen = 0;
for (int k = 0; k < cpu->getRegisterCount(i); k++)
{
maxLen = std::max<int>(maxLen,strlen(cpu->getRegisterName(i,k)));
}
wxGrid* regGrid = new wxGrid(registerCategories, -1);
int x = 17+(maxLen+2)*charWidth;
startPositions.push_back(x);
currentRows.push_back(0);
}
registerGrids.push_back(regGrid);
registerCategories->AddPage(regGrid, wxString(cpu->getRegisterCategoryName(cat), wxConvUTF8));
SetDoubleBuffered(true);
SetInitialSize(ClientToWindowSize(GetMinClientSize()));
DebugInterface::RegisterType type = cpu->getRegisterType(cat);
int registerBits = cpu->getRegisterSize(cat);
int numCols;
switch (type)
{
case DebugInterface::NORMAL: // display them in 32 bit parts
numCols = registerBits / 32;
regGrid->CreateGrid(numRegs, numCols);
for (int row = 0; row < numRegs; row++)
regGrid->SetRowLabelValue(row, wxString(cpu->getRegisterName(cat, row), wxConvUTF8));
for (int col = 0; col < numCols; col++)
regGrid->SetColLabelValue(col, wxsFormat(L"%d-%d", 32 * (numCols - col) - 1, 32 * (numCols - col - 1)));
break;
case DebugInterface::SPECIAL:
regGrid->CreateGrid(numRegs, 1);
for (int row = 0; row < numRegs; row++)
regGrid->SetRowLabelValue(row, wxString(cpu->getRegisterName(cat, row), wxConvUTF8));
break;
}
regGrid->EnableEditing(false);
regGrid->SetDefaultCellFont(font);
regGrid->SetLabelFont(labelFont);
regGrid->DisableDragGridSize();
regGrid->DisableDragRowSize();
regGrid->DisableDragColSize();
regGrid->Connect(wxEVT_PAINT, wxPaintEventHandler(CtrlRegisterList::paintEvent), nullptr, this);
regGrid->Connect(wxEVT_GRID_LABEL_LEFT_CLICK, wxGridEventHandler(CtrlRegisterList::gridEvent), nullptr, this);
regGrid->Connect(wxEVT_GRID_LABEL_RIGHT_CLICK, wxGridEventHandler(CtrlRegisterList::gridEvent), nullptr, this);
regGrid->Connect(wxEVT_GRID_CELL_RIGHT_CLICK, wxGridEventHandler(CtrlRegisterList::gridEvent), nullptr, this);
regGrid->Connect(wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler(CtrlRegisterList::gridEvent), nullptr, this);
regGrid->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(CtrlRegisterList::keydownEvent), nullptr, this);
}
for (int cat = 0; cat < cpu->getRegisterCategoryCount(); cat++)
updateValues(cat);
updateSize(getCurrentCategory()); // getCurrentCategory() = 0
SetDoubleBuffered(true);
wxSize actualSize = getOptimalSize();
SetVirtualSize(actualSize);
SetScrollbars(1, rowHeight, actualSize.x, actualSize.y / rowHeight, 0, 0);
}
// Called when this window needs to update the strings in the cells.
// This has to be called every repaint of the window since the registers
// can change unpredictably and there seems to be currently is no mechanism
// for the rest of pcsx2 alerting the debugger when values change.
void CtrlRegisterList::updateValues(int cat)
wxSize CtrlRegisterList::getOptimalSize() const
{
wxGrid* regGrid = registerGrids[cat];
int numRows = regGrid->GetNumberRows();
int numCols = regGrid->GetNumberCols();
int columnChars = 0;
int maxWidth = 0;
int maxRows = 0;
std::vector<ChangedReg>& changedRegs = changedCategories[cat];
DebugInterface::RegisterType type = cpu->getRegisterType(cat);
for (int row = 0; row < numRows; row++)
{
wxColor bgColor = regGrid->GetGridCursorRow() == row ? wxColor(0xFFFFDFE0) :
wxColor(0xFFFFEFFF);
u128 value = cpu->getRegister(cat, row);
ChangedReg& changed = changedRegs[row];
for (int i = 0; i < cpu->getRegisterCategoryCount(); i++)
{
int bits = std::min<u32>(maxBits, cpu->getRegisterSize(i));
int start = startPositions[i];
for (int col = 0; col < numCols; col++)
{
const wxColor colorChanged = wxColor(0xFF0000FF);
const wxColor colorUnchanged = wxColor(0xFF004000);
wxColor textColor;
wxString cellValue;
int w = start + (bits / 4) * charWidth;
if (bits > 32)
w += (bits / 32) * 2 - 2;
switch (type)
{
case DebugInterface::NORMAL:
cellValue = wxsFormat(L"%08X", value._u32[numCols - col - 1]);
textColor = changed.changed[numCols - col - 1] ? colorChanged : colorUnchanged;
break;
case DebugInterface::SPECIAL:
cellValue = cpu->getRegisterString(cat, row);
textColor = (changed.changed[0] || changed.changed[1] || changed.changed[2] || changed.changed[3]) ?
colorChanged : colorUnchanged;
break;
default: pxAssert(0 && "Unreachable switch case");
}
if (regGrid->GetCellTextColour(row, col) != textColor)
regGrid->SetCellTextColour(row, col, textColor);
if (regGrid->GetCellValue(row, col) != cellValue)
regGrid->SetCellValue(row, col, cellValue);
if (regGrid->GetCellBackgroundColour(row, col) != bgColor)
regGrid->SetCellBackgroundColour(row, col, bgColor);
}
}
}
maxWidth = std::max<int>(maxWidth, w);
columnChars += strlen(cpu->getRegisterCategoryName(i)) + 1;
maxRows = std::max<int>(maxRows, cpu->getRegisterCount(i));
}
void CtrlRegisterList::updateSize(int cat)
{
wxGrid* regGrid = registerGrids[cat];
maxWidth = std::max<int>(columnChars*charWidth, maxWidth + 4);
int regBits = cpu->getRegisterSize(cat);
int numCols = regGrid->GetNumberCols();
#if wxMAJOR_VERSION >= 3
int shownCols = 0;
while (shownCols < numCols && regGrid->IsColShown(shownCols)) shownCols++;
if (shownCols > maxBits / 32)
shownCols = (maxBits / 32);
else if (shownCols < regBits / 32)
shownCols = std::min(maxBits / 32, regBits / 32);
for (int col = 0; col < numCols; col++)
if (col < shownCols)
regGrid->ShowCol(numCols - col - 1); // Big-endian representation so flip order
else
regGrid->HideCol(numCols - col - 1); // Big-endian representation so flip order
#endif
regGrid->AutoSize();
wxSize pageSize = regGrid->GetSize();
// Hack: Sometimes the vertical scroll bar covers some of the text so add some room
pageSize.x += 20;
// Hack: AFAIK wxNotebook does not provide a way to get the necessary size
// for the tabs so we use a rough approximation and hope that the tabs
// will have enough room to all be shown. 50 pixels per tab should hopefully work.
int minX = registerCategories->GetPageCount() * 50;
pageSize.x = std::max(pageSize.x, minX);
// Hack: Sometimes showing all the rows on the screen take up too much
// vertical room and squeezes other components (breakpoint window, etc.)
// into nothing so we limit the vertical size with this heuristic.
// If necessary, this will automatically create a vertical scroll bar so
// all rows can be accessed.
int screenSize = wxSystemSettings::GetMetric(wxSYS_SCREEN_Y);
pageSize.y = std::min(std::max(screenSize - 400, screenSize / 2), pageSize.y);
regGrid->SetSize(pageSize);
wxSize size = registerCategories->CalcSizeFromPage(pageSize);
if (registerCategories->GetSize() != size)
registerCategories->SetSize(size);
SetMinSize(size); // registerCategories is the whole window so same min-size
// Need to update the whole debugger window since other components
// may be resized due to this component being resized
postEvent(debEVT_UPDATELAYOUT, 0);
return wxSize(maxWidth, (maxRows + 1)*rowHeight);
}
void CtrlRegisterList::postEvent(wxEventType type, wxString text)
{
wxCommandEvent event(type, GetId());
event.SetEventObject(this);
event.SetString(text);
wxPostEvent(this, event);
wxCommandEvent event( type, GetId() );
event.SetEventObject(this);
event.SetString(text);
wxPostEvent(this,event);
}
void CtrlRegisterList::postEvent(wxEventType type, int value)
{
wxCommandEvent event(type, GetId());
event.SetEventObject(this);
event.SetInt(value);
wxPostEvent(this, event);
wxCommandEvent event( type, GetId() );
event.SetEventObject(this);
event.SetInt(value);
wxPostEvent(this,event);
}
// Sets the "changed" flag for values that have changed from the last cycle.
// These values are colored differently when they are displayed.
void CtrlRegisterList::refreshChangedRegs()
{
if (cpu->getPC() == lastPc && cpu->getCycles() == lastCycles)
return;
if (cpu->getPC() == lastPc)
return;
for (int cat = 0; cat < cpu->getRegisterCategoryCount(); cat++)
{
std::vector<ChangedReg>& regs = changedCategories[cat];
int size = cpu->getRegisterSize(cat);
for (size_t cat = 0; cat < changedCategories.size(); cat++)
{
ChangedReg* regs = changedCategories[cat];
int size = cpu->getRegisterSize(category);
for (int i = 0; i < cpu->getRegisterCount(cat); i++)
{
ChangedReg& reg = regs[i];
memset(&reg.changed, 0, sizeof(reg.changed));
for (int i = 0; i < cpu->getRegisterCount(cat); i++)
{
ChangedReg& reg = regs[i];
memset(&reg.changed,0,sizeof(reg.changed));
u128 newValue = cpu->getRegister(cat, i);
u128 newValue = cpu->getRegister(cat,i);
if (reg.oldValue != newValue)
{
bool changed = false;
if (reg.oldValue != newValue)
{
bool changed = false;
if (size >= 128 && (reg.oldValue._u32[3] != newValue._u32[3] || reg.oldValue._u32[2] != newValue._u32[2]))
{
changed = true;
reg.changed[3] = true;
reg.changed[2] = true;
}
if (size >= 128 && (reg.oldValue._u32[3] != newValue._u32[3] || reg.oldValue._u32[2] != newValue._u32[2]))
{
changed = true;
reg.changed[3] = true;
reg.changed[2] = true;
}
if (size >= 64 && (reg.oldValue._u32[1] != newValue._u32[1] || changed))
{
changed = true;
reg.changed[1] = true;
}
if (size >= 64 && (reg.oldValue._u32[1] != newValue._u32[1] || changed))
{
changed = true;
reg.changed[1] = true;
}
if (reg.oldValue._u32[0] != newValue._u32[0] || changed)
{
reg.changed[0] = true;
}
reg.oldValue = newValue;
}
}
}
if (reg.oldValue._u32[0] != newValue._u32[0] || changed)
{
reg.changed[0] = true;
}
lastPc = cpu->getPC();
lastCycles = cpu->getCycles();
reg.oldValue = newValue;
}
}
}
lastPc = cpu->getPC();
}
void CtrlRegisterList::paintEvent(wxPaintEvent & evt)
void CtrlRegisterList::redraw()
{
updateHandler();
evt.Skip();
Update();
}
void CtrlRegisterList::updateHandler()
void CtrlRegisterList::sizeEvent(wxSizeEvent& evt)
{
if (cpu->isCpuPaused() || needsValueUpdating)
{
refreshChangedRegs();
updateValues(getCurrentCategory());
needsValueUpdating = false;
}
if (needsSizeUpdating)
{
updateSize(getCurrentCategory());
needsSizeUpdating = false;
}
// The wxGrid allows selecting boxes with a bold outline
// but we don't want this, and there is no setting to turn off this feature
wxGrid* regGrid = registerGrids[getCurrentCategory()];
regGrid->ClearSelection();
Refresh();
evt.Skip();
}
void CtrlRegisterList::changeValue(RegisterChangeMode mode, int cat, int reg)
void drawU32Text(wxDC& dc, u32 value, int x, int y)
{
wxString oldStr;
u128 oldValue = cpu->getRegister(cat, reg);
char str[32];
sprintf(str,"%08X",value);
dc.DrawText(wxString(str,wxConvUTF8),x,y);
}
switch (mode)
{
case LOWER64:
oldStr = wxsFormat(L"0x%016llX", oldValue._u64[0]);
break;
case UPPER64:
oldStr = wxsFormat(L"0x%016llX", oldValue._u64[1]);
break;
case CHANGE32:
oldStr = wxsFormat(L"0x%08X", oldValue._u64[0]);
break;
}
void CtrlRegisterList::OnDraw(wxDC& dc)
{
#ifdef WIN32
wxFont font = wxFont(wxSize(charWidth,rowHeight-2),wxFONTFAMILY_DEFAULT,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL,false,L"Lucida Console");
#else
wxFont font = wxFont(8,wxFONTFAMILY_DEFAULT,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL,false,L"Lucida Console");
font.SetPixelSize(wxSize(charWidth,rowHeight-2));
#endif
dc.SetFont(font);
refreshChangedRegs();
u64 newValue;
if (executeExpressionWindow(this, cpu, newValue, oldStr))
{
switch (mode)
{
case LOWER64:
oldValue._u64[0] = newValue;
break;
case UPPER64:
oldValue._u64[1] = newValue;
break;
case CHANGE32:
oldValue._u32[0] = newValue;
break;
}
cpu->setRegister(cat, reg, oldValue);
oldValue = cpu->getRegister(cat, reg);
}
needsValueUpdating = true;
needsSizeUpdating = true;
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 width = GetClientSize().x;
if (startRow == 0)
{
int piece = width /cpu->getRegisterCategoryCount();
for (int i = 0; i < cpu->getRegisterCategoryCount(); i++)
{
const char* name = cpu->getRegisterCategoryName(i);
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 == cpu->getRegisterCategoryCount()-1)
piece += width-piece*cpu->getRegisterCategoryCount()-1;
dc.DrawRectangle(x,0,piece+1,rowHeight);
// center text
x += (piece-strlen(name)*charWidth)/2;
dc.DrawText(wxString(name,wxConvUTF8),x,2);
}
}
// skip the tab row
startRow = std::max<int>(0,startRow-1);
endRow = std::min<int>(cpu->getRegisterCount(category)-1,endRow-1);
int nameStart = 17;
int valueStart = startPositions[category];
ChangedReg* changedRegs = changedCategories[category];
int registerBits = cpu->getRegisterSize(category);
DebugInterface::RegisterType type = cpu->getRegisterType(category);
for (int i = startRow; i <= endRow; i++)
{
int x = valueStart;
int y = rowHeight*(i+1);
wxColor backgroundColor;
if (currentRows[category] == i)
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);
dc.DrawText(wxString(name,wxConvUTF8),nameStart,y+2);
u128 value = cpu->getRegister(category,i);
ChangedReg& changed = changedRegs[i];
switch (type)
{
case DebugInterface::NORMAL: // display them in 32 bit parts
switch (registerBits)
{
case 128:
{
int startIndex = std::min<int>(3,maxBits/32-1);
int actualX = width-4-(startIndex+1)*(8*charWidth+2);
x = std::max<int>(actualX,x);
if (startIndex != 3)
{
bool c = false;
for (int i = 3; i > startIndex; i--)
c = c || changed.changed[i];
if (c)
{
dc.SetTextForeground(colorChanged);
dc.DrawText(L"+",x-charWidth,y+2);
}
}
for (int i = startIndex; i >= 0; i--)
{
if (changed.changed[i])
dc.SetTextForeground(colorChanged);
else
dc.SetTextForeground(colorUnchanged);
drawU32Text(dc,value._u32[i],x,y+2);
x += charWidth*8+2;
}
break;
}
case 64:
{
if (maxBits < 64 && changed.changed[1])
{
dc.SetTextForeground(colorChanged);
dc.DrawText(L"+",x-charWidth,y+2);
}
for (int i = 1; i >= 0; i--)
{
if (changed.changed[i])
dc.SetTextForeground(colorChanged);
else
dc.SetTextForeground(colorUnchanged);
drawU32Text(dc,value._u32[i],x,y+2);
x += charWidth*8+2;
}
break;
}
case 32:
{
if (changed.changed[0])
dc.SetTextForeground(colorChanged);
else
dc.SetTextForeground(colorUnchanged);
drawU32Text(dc,value._u32[0],x,y+2);
break;
}
}
break;
case DebugInterface::SPECIAL: // let debug interface format them and just display them
{
if (changed.changed[0] || changed.changed[1] || changed.changed[2] || changed.changed[3])
dc.SetTextForeground(colorChanged);
else
dc.SetTextForeground(colorUnchanged);
dc.DrawText(cpu->getRegisterString(category,i),x,y+2);
break;
}
}
}
}
void CtrlRegisterList::changeValue(RegisterChangeMode mode)
{
wchar_t str[64];
u128 oldValue = cpu->getRegister(category,currentRows[category]);
switch (mode)
{
case LOWER64:
swprintf(str,64,L"0x%016llX",oldValue._u64[0]);
break;
case UPPER64:
swprintf(str,64,L"0x%016llX",oldValue._u64[1]);
break;
case CHANGE32:
swprintf(str,64,L"0x%08X",oldValue._u32[0]);
break;
}
u64 newValue;
if (executeExpressionWindow(this,cpu,newValue,str))
{
switch (mode)
{
case LOWER64:
oldValue._u64[0] = newValue;
break;
case UPPER64:
oldValue._u64[1] = newValue;
break;
case CHANGE32:
oldValue._u32[0] = newValue;
break;
}
cpu->setRegister(category,currentRows[category],oldValue);
}
}
void CtrlRegisterList::onPopupClick(wxCommandEvent& evt)
{
int cat = getCurrentCategory();
wxGrid* regGrid = registerGrids[cat];
int reg = regGrid->GetGridCursorRow();
switch (evt.GetId())
{
case ID_REGISTERLIST_DISPLAY32:
maxBits = 32;
postEvent(debEVT_UPDATELAYOUT, 0);
Refresh();
break;
case ID_REGISTERLIST_DISPLAY64:
maxBits = 64;
postEvent(debEVT_UPDATELAYOUT, 0);
Refresh();
break;
case ID_REGISTERLIST_DISPLAY128:
maxBits = 128;
postEvent(debEVT_UPDATELAYOUT, 0);
Refresh();
break;
case ID_REGISTERLIST_CHANGELOWER:
changeValue(LOWER64, cat, reg);
Refresh();
break;
case ID_REGISTERLIST_CHANGEUPPER:
changeValue(UPPER64, cat, reg);
Refresh();
break;
case ID_REGISTERLIST_CHANGEVALUE:
if (cpu->getRegisterSize(cat) == 32)
changeValue(CHANGE32, cat, reg);
else
changeValue(LOWER64, cat, reg);
Refresh();
break;
default:
wxMessageBox(L"Unimplemented.", L"Unimplemented.", wxICON_INFORMATION);
break;
}
needsValueUpdating = true;
needsSizeUpdating = true;
switch (evt.GetId())
{
case ID_REGISTERLIST_DISPLAY32:
maxBits = 32;
SetInitialSize(ClientToWindowSize(GetMinClientSize()));
postEvent(debEVT_UPDATELAYOUT,0);
Refresh();
break;
case ID_REGISTERLIST_DISPLAY64:
maxBits = 64;
SetInitialSize(ClientToWindowSize(GetMinClientSize()));
postEvent(debEVT_UPDATELAYOUT,0);
Refresh();
break;
case ID_REGISTERLIST_DISPLAY128:
maxBits = 128;
SetInitialSize(ClientToWindowSize(GetMinClientSize()));
postEvent(debEVT_UPDATELAYOUT,0);
Refresh();
break;
case ID_REGISTERLIST_CHANGELOWER:
changeValue(LOWER64);
Refresh();
break;
case ID_REGISTERLIST_CHANGEUPPER:
changeValue(UPPER64);
Refresh();
break;
case ID_REGISTERLIST_CHANGEVALUE:
if (cpu->getRegisterSize(category) == 32)
changeValue(CHANGE32);
else
changeValue(LOWER64);
Refresh();
break;
default:
wxMessageBox( L"Unimplemented.", L"Unimplemented.", wxICON_INFORMATION);
break;
}
}
int CtrlRegisterList::getCurrentCategory() const
void CtrlRegisterList::setCurrentRow(int row)
{
return registerCategories->GetSelection();
char str[256];
u128 value ;
wxString text;
const char* name = cpu->getRegisterName(category,row);
switch (cpu->getRegisterType(category))
{
case DebugInterface::NORMAL:
value = cpu->getRegister(category,row);
switch (cpu->getRegisterSize(category))
{
case 128:
sprintf(str,"%s = 0x%08X%08X%08X%08X",name,value._u32[3],value._u32[2],value._u32[1],value._u32[0]);
break;
case 64:
sprintf(str,"%s = 0x%08X%08X",name,value._u32[1],value._u32[0]);
break;
case 32:
sprintf(str,"%s = 0x%08X",name,value._u32[0]);
break;
}
text = wxString(str,wxConvUTF8);
break;
case DebugInterface::SPECIAL:
text = wxString(name,wxConvUTF8) + L" = " + cpu->getRegisterString(category,row);
break;
}
currentRows[category] = row;
postEvent(debEVT_SETSTATUSBARTEXT,text);
Refresh();
}
void CtrlRegisterList::gridEvent(wxGridEvent& evt)
void CtrlRegisterList::mouseEvent(wxMouseEvent& evt)
{
// Mouse events
if (evt.GetEventType() == wxEVT_GRID_CELL_RIGHT_CLICK ||
evt.GetEventType() == wxEVT_GRID_LABEL_RIGHT_CLICK)
{
wxMenu menu;
int bits = cpu->getRegisterSize(getCurrentCategory());
int xOffset, yOffset;
((wxScrolledWindow*) this)->GetViewStart(&xOffset, &yOffset);
menu.AppendRadioItem(ID_REGISTERLIST_DISPLAY32, L"Display 32 bit");
menu.AppendRadioItem(ID_REGISTERLIST_DISPLAY64, L"Display 64 bit");
menu.AppendRadioItem(ID_REGISTERLIST_DISPLAY128, L"Display 128 bit");
menu.AppendSeparator();
wxClientDC dc(this);
wxPoint pos = evt.GetPosition();
int x = dc.DeviceToLogicalX(pos.x) + xOffset;
int y = dc.DeviceToLogicalY(pos.y) + yOffset * rowHeight;
if (bits >= 64)
{
menu.Append(ID_REGISTERLIST_CHANGELOWER, L"Change lower 64 bit");
menu.Append(ID_REGISTERLIST_CHANGEUPPER, L"Change upper 64 bit");
}
else {
menu.Append(ID_REGISTERLIST_CHANGEVALUE, L"Change value");
}
if (evt.GetEventType() == wxEVT_RIGHT_UP)
{
if (y >= rowHeight)
{
int row = (y-rowHeight)/rowHeight;
if (row != currentRows[category] && row < cpu->getRegisterCount(category))
setCurrentRow(row);
}
switch (maxBits)
{
case 128:
menu.Check(ID_REGISTERLIST_DISPLAY128, true);
break;
case 64:
menu.Check(ID_REGISTERLIST_DISPLAY64, true);
break;
case 32:
menu.Check(ID_REGISTERLIST_DISPLAY32, true);
break;
}
wxMenu menu;
int bits = cpu->getRegisterSize(category);
menu.Connect(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(CtrlRegisterList::onPopupClick), nullptr, this);
PopupMenu(&menu, evt.GetPosition());
needsValueUpdating = true;
}
else
{
evt.Skip();
}
}
menu.AppendRadioItem(ID_REGISTERLIST_DISPLAY32, L"Display 32 bit");
menu.AppendRadioItem(ID_REGISTERLIST_DISPLAY64, L"Display 64 bit");
menu.AppendRadioItem(ID_REGISTERLIST_DISPLAY128, L"Display 128 bit");
menu.AppendSeparator();
void CtrlRegisterList::categoryChangedEvent(wxBookCtrlEvent& evt)
{
needsSizeUpdating = true;
needsValueUpdating = true;
evt.Skip();
if (bits >= 64)
{
menu.Append(ID_REGISTERLIST_CHANGELOWER, L"Change lower 64 bit");
menu.Append(ID_REGISTERLIST_CHANGEUPPER, L"Change upper 64 bit");
} else {
menu.Append(ID_REGISTERLIST_CHANGEVALUE, L"Change value");
}
switch (maxBits)
{
case 128:
menu.Check(ID_REGISTERLIST_DISPLAY128,true);
break;
case 64:
menu.Check(ID_REGISTERLIST_DISPLAY64,true);
break;
case 32:
menu.Check(ID_REGISTERLIST_DISPLAY32,true);
break;
}
menu.Connect(wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction)&CtrlRegisterList::onPopupClick, NULL, this);
PopupMenu(&menu,evt.GetPosition());
return;
}
if (evt.ButtonIsDown(wxMOUSE_BTN_LEFT) || evt.ButtonIsDown(wxMOUSE_BTN_RIGHT))
{
if (y < rowHeight)
{
int piece = GetSize().x/cpu->getRegisterCategoryCount();
int cat = std::min<int>(x/piece,cpu->getRegisterCategoryCount()-1);
if (cat != category)
{
category = cat;
Refresh();
}
} else {
int row = (y-rowHeight)/rowHeight;
if (row != currentRows[category] && row < cpu->getRegisterCount(category))
setCurrentRow(row);
}
SetFocus();
SetFocusFromKbd();
}
}
void CtrlRegisterList::keydownEvent(wxKeyEvent& evt)
{
needsValueUpdating = true;
evt.Skip();
switch (evt.GetKeyCode())
{
case WXK_UP:
setCurrentRow(std::max<int>(currentRows[category]-1,0));
break;
case WXK_DOWN:
setCurrentRow(std::min<int>(currentRows[category]+1,cpu->getRegisterCount(category)-1));
break;
case WXK_TAB:
category = (category+1) % cpu->getRegisterCategoryCount();
Refresh();
break;
}
}

View File

@@ -15,50 +15,60 @@
#pragma once
#include <wx/wx.h>
#include <wx/notebook.h>
#include <wx/grid.h>
#include "DebugTools/DebugInterface.h"
#include "DebugTools/DisassemblyManager.h"
class CtrlRegisterList : public wxWindow
class CtrlRegisterList: public wxScrolledWindow
{
public:
CtrlRegisterList(wxWindow* parent, DebugInterface* _cpu);
CtrlRegisterList(wxWindow* parent, DebugInterface* _cpu);
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
{
wxSize optimalSize = getOptimalSize();
if (GetWindowStyle() & wxVSCROLL)
optimalSize.x += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
// Event handlers
void paintEvent(wxPaintEvent & evt);
void onPopupClick(wxCommandEvent& evt);
void gridEvent(wxGridEvent& evt);
void categoryChangedEvent(wxBookCtrlEvent& evt);
void keydownEvent(wxKeyEvent& evt);
DECLARE_EVENT_TABLE()
return wxSize(optimalSize.x,0);
}
virtual wxSize DoGetBestClientSize() const
{
return GetMinClientSize();
}
private:
enum RegisterChangeMode { LOWER64, UPPER64, CHANGE32 };
enum RegisterChangeMode { LOWER64, UPPER64, CHANGE32 };
void refreshChangedRegs();
void OnDraw(wxDC& dc);
void refreshChangedRegs();
void setCurrentRow(int row);
void changeValue(RegisterChangeMode mode);
wxSize getOptimalSize() const;
void changeValue(RegisterChangeMode mode, int cat, int reg);
void updateHandler();
void updateValues(int cat);
void updateSize(int cat);
int getCurrentCategory() const;
void postEvent(wxEventType type, wxString text);
void postEvent(wxEventType type, int value);
void postEvent(wxEventType type, wxString text);
void postEvent(wxEventType type, int value);
struct ChangedReg
{
u128 oldValue;
bool changed[4];
ChangedReg() { memset(this, 0, sizeof(*this)); }
};
struct ChangedReg
{
u128 oldValue;
bool changed[4];
};
std::vector<ChangedReg*> changedCategories;
std::vector<int> startPositions;
std::vector<int> currentRows;
std::vector<std::vector<ChangedReg>> changedCategories;
DebugInterface* cpu; // Used to get register values and other info from the emu
u32 lastPc, lastCycles;
int maxBits; // maximum number of bits beings displayed
bool needsSizeUpdating, needsValueUpdating; // flags set in events to signal that values/sizes should be updated on the next display
wxNotebook* registerCategories; // Occupies this entire window. Is the tabbed window for selecting register categories.
std::vector<wxGrid*> registerGrids; // Grids displaying register values for each of the tabs.
};
DebugInterface* cpu;
int rowHeight,charWidth;
u32 lastPc;
int category;
int maxBits;
};

View File

@@ -39,6 +39,7 @@ BEGIN_EVENT_TABLE(DisassemblyDialog, wxFrame)
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 @@ void CpuTabPage::update()
{
breakpointList->reloadBreakpoints();
if (threadList != NULL)
if (threadList != NULL && cpu->isAlive())
{
threadList->reloadThreads();
@@ -217,6 +218,8 @@ DisassemblyDialog::DisassemblyDialog(wxWindow* parent):
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 @@ DisassemblyDialog::DisassemblyDialog(wxWindow* parent):
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 @@ DisassemblyDialog::DisassemblyDialog(wxWindow* parent):
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 @@ void DisassemblyDialog::onDebuggerEvent(wxCommandEvent& evt)
if (type == debEVT_SETSTATUSBARTEXT)
{
DebugInterface* cpu = reinterpret_cast<DebugInterface*>(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 @@ void DisassemblyDialog::setDebugMode(bool debugMode, bool switchPC)
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 @@ void DisassemblyDialog::setDebugMode(bool debugMode, bool switchPC)
stepOverButton->Enable(false);
stepOutButton->Enable(false);
}
} else {
breakRunButton->SetLabel(L"Run");
stepIntoButton->Enable(false);
stepOverButton->Enable(false);
stepOutButton->Enable(false);
currentCpu = NULL;
}
update();

View File

@@ -23,6 +23,7 @@
#include "CtrlMemView.h"
#include "DebugEvents.h"
#include "DebuggerLists.h"
#include "../MSWstuff.h"
class DebuggerHelpDialog: public wxDialog
{
@@ -30,6 +31,16 @@ public:
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 @@ protected:
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,6 +112,7 @@ private:
CpuTabPage* eeTab;
CpuTabPage* iopTab;
CpuTabPage* currentCpu;
wxNotebook* middleBook;
wxBoxSizer* topSizer;
wxButton* breakRunButton;

View File

@@ -50,7 +50,7 @@ Dialogs::AboutBoxDialog::AboutBoxDialog(wxWindow* parent)
L"Nachbrenner, shadow, Zerofrog, tmkk, Jake.Stine"
L"\n\n"
L"%s:\n"
L"CKemu, Falcon4ever, Bositman",
L"Falcon4ever, Bositman",
_("Previous versions"), _("Webmasters"));
wxString contribsString = wxsFormat(
@@ -58,8 +58,8 @@ Dialogs::AboutBoxDialog::AboutBoxDialog(wxWindow* parent)
L"ChickenLiver(Lilypad), Gabest (Gsdx, Cdvdolio, Xpad)"
L"\n\n"
L"%s: \n"
L"black_wd, Belmont, BGome, _Demo_, Dreamtime, Hiryu and Sjeep, nneeve, Shadow Lady,"
L"F|RES, Jake.Stine, MrBrown, razorblade, Seta-san, Skarmeth, feal87, Athos",
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"));
wxFlexGridSizer& boxesContainer = *new wxFlexGridSizer(2, 0, StdPadding);

View File

@@ -1163,13 +1163,12 @@ void rpsxBLTZAL()
_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 @@ void rpsxBLTZAL()
psxSaveBranchState();
MOV32ItoM((uptr)&psxRegs.GPR.r[31], psxpc+4);
psxRecompileNextInstruction(1);
psxSetBranchImm(psxpc);
@@ -1205,11 +1203,12 @@ void rpsxBGEZAL()
_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 @@ void rpsxBGEZAL()
CMP32ItoM((uptr)&psxRegs.GPR.r[_Rs_], 0);
u32* pjmp = JGE32(0);
MOV32ItoM((uptr)&psxRegs.GPR.r[31], psxpc+4);
psxSaveBranchState();
psxRecompileNextInstruction(1);

View File

@@ -108,7 +108,7 @@ EXPORT_C_(int32) GPUopen(void* hWnd)
#endif
int renderer = theApp.GetConfig("Renderer", 1);
int threads = theApp.GetConfig("extrathreads", 0);
int threads = theApp.GetConfig("extrathreads", DEFAULT_EXTRA_RENDERING_THREADS);
switch(renderer)
{

View File

@@ -74,7 +74,7 @@ void GPUSettingsDlg::OnInit()
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();
}

View File

@@ -190,7 +190,7 @@ static int _GSopen(void** dsp, const char* title, GSRendererType renderer, int t
if(threads == -1)
{
threads = theApp.GetConfig("extrathreads", 0);
threads = theApp.GetConfig("extrathreads", DEFAULT_EXTRA_RENDERING_THREADS);
}
GSWnd* wnd[2] = { NULL, NULL };

View File

@@ -1280,3 +1280,7 @@ enum {FREEZE_LOAD=0, FREEZE_SAVE=1, FREEZE_SIZE=2};
struct GSFreezeData {int size; uint8* data;};
enum stateType {ST_WRITE, ST_TRANSFER, ST_VSYNC};
// default gs config settings
#define DEFAULT_EXTRA_RENDERING_THREADS 2

View File

@@ -286,7 +286,7 @@ void populate_gl_table(GtkWidget* gl_table)
void populate_sw_table(GtkWidget* sw_table)
{
GtkWidget* threads_label = left_label("Extra rendering threads:");
GtkWidget* threads_spin = CreateSpinButton(0, 32, "extrathreads", 0);
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);
@@ -307,7 +307,7 @@ void populate_shader_table(GtkWidget* shader_table)
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* shadeboost_check = CreateCheckBox("Shade boost", "ShadeBoost");
GtkWidget* fxaa_check = CreateCheckBox("Fxaa shader", "fxaa");
GtkWidget* shaderfx_check = CreateCheckBox("External shader", "shaderfx");

View File

@@ -283,7 +283,9 @@ void GSRendererDX::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sourc
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);
}
@@ -295,7 +297,9 @@ void GSRendererDX::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sourc
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);
}

View File

@@ -110,7 +110,7 @@ const char* dialog_message(int ID, bool* updateText) {
return "Internal GS feature. Reduces edge aliasing of lines and triangles when the game requests it.";
case IDC_SWTHREADS:
case IDC_SWTHREADS_EDIT:
return "Increases number of threads used for rendering. Optimal setting depends on CPU.";
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:

View File

@@ -172,7 +172,7 @@ void GSSettingsDlg::OnInit()
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);
@@ -308,7 +308,13 @@ void GSSettingsDlg::UpdateRenderers()
vector<GSSetting> renderers;
GSRendererType renderer_setting = static_cast<GSRendererType>(theApp.GetConfig("Renderer", static_cast<int>(GSRendererType::Default)));
GSRendererType renderer_setting;
if (ComboBoxGetSelData(IDC_RENDERER, i))
renderer_setting = static_cast<GSRendererType>(i);
else
renderer_setting = static_cast<GSRendererType>(theApp.GetConfig("Renderer", static_cast<int>(GSRendererType::Default)));
GSRendererType renderer_sel = GSRendererType::Default;
for(size_t i = 0; i < theApp.m_gs_renderers.size(); i++)

View File

@@ -37,8 +37,11 @@ GSTextureCache::GSTextureCache(GSRenderer* r)
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);
m_temp = (uint8*)_aligned_malloc(1024 * 1024 * sizeof(uint32), 32);
// 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()
@@ -338,7 +341,14 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(const GIFRegTEX0& TEX0, int
if (s_IS_OPENGL) {
if (m_preload_frame) {
GL_INS("Preloading the RT DATA");
dst->m_dirty.push_back(GSDirtyRect(GSVector4i(0, 0, TEX0.TBW * 64, h), TEX0.PSM));
// 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<int>(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

View File

@@ -42,7 +42,7 @@ namespace PboPool {
uint32 m_size;
bool m_texture_storage;
GLsync m_fence[PBO_POOL_SIZE];
const uint32 m_pbo_size = 4*1024*1024;
const uint32 m_pbo_size = 8*1024*1024;
// Option for buffer storage
// XXX: actually does I really need coherent and barrier???

View File

@@ -129,22 +129,24 @@ GSdxApp::GSdxApp()
m_section = "Settings";
#ifdef _WINDOWS
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::DX9_HW), "Direct3D9", ""));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::DX1011_HW), "Direct3D11", ""));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::OGL_HW), "OpenGL", "Hardware"));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::DX1011_HW), "Direct3D11", "Hardware"));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::DX9_HW), "Direct3D9", "Hardware"));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::DX9_SW), "Software Renderer", "Direct3D9"));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::DX1011_SW), "Software Renderer", "Direct3D11"));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::OGL_SW), "OpenGL", "Software"));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::DX1011_SW), "Direct3D11", "Software"));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::DX9_SW), "Direct3D9", "Software"));
#ifdef _DEBUG
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::DX9_Null), "Direct3D9", "Null"));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::DX1011_Null), "Direct3D11", "Null"));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::Null_SW), "Null", "Software"));
#endif
#else // Linux
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::OGL_HW), "OpenGL", "Hardware"));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::OGL_SW), "OpenGL", "Software"));
#endif
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::OGL_HW), "OpenGL", ""));
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::OGL_SW), "Software Renderer", "OpenGL"));
// The null renderer goes third, it has use for benchmarking purposes in a release build
m_gs_renderers.push_back(GSSetting(static_cast<uint32>(GSRendererType::Null_Null), "None", "Core Benchmark"));

View File

@@ -89,34 +89,34 @@ IDB_LOGOGL BITMAP "res\\logo-ogl.bmp"
// Dialog
//
IDD_HACKS DIALOGEX 0, 0, 147, 200
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,84,181,56,14
GROUPBOX "USE AT YOUR OWN RISK!",IDC_STATIC,7,7,133,171,0,WS_EX_TRANSPARENT
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,58,20,22,8
RTEXT "Skipdraw:",IDC_STATIC,48,36,32,8
EDITTEXT IDC_SKIPDRAWHACKEDIT,84,33,48,14,ES_RIGHT | ES_AUTOHSCROLL
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,84,64,34,8
CONTROL "Half-pixel Offset",IDC_OFFSETHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,51,65,8
COMBOBOX IDC_MSAACB,84,17,48,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Wild Arms Offset",IDC_WILDHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,64,64,8
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,84,51,48,8
RTEXT "TC Offset X:",IDC_STATIC,36,146,44,8
EDITTEXT IDC_TCOFFSETX2,84,144,48,14,ES_RIGHT | ES_AUTOHSCROLL
CONTROL "",IDC_TCOFFSETX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,121,145,11,14
EDITTEXT IDC_TCOFFSETY2,84,162,48,14,ES_RIGHT | ES_AUTOHSCROLL
CONTROL "",IDC_TCOFFSETY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,121,162,11,14
RTEXT "TC Offset Y:",IDC_STATIC,32,165,48,8
COMBOBOX IDC_ROUND_SPRITE,84,109,48,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
RTEXT "Round Sprite:",IDC_STATIC,35,111,45,8
RTEXT "Sprite:",IDC_STATIC,58,127,22,8
COMBOBOX IDC_SPRITEHACK,84,125,48,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
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
@@ -236,7 +236,7 @@ BEGIN
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 "Extra rendering threads:",IDC_SWTHREADS_TEXT,116,288,83,8
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
@@ -257,11 +257,11 @@ BEGIN
IDD_HACKS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 140
RIGHTMARGIN, 154
VERTGUIDE, 14
VERTGUIDE, 80
VERTGUIDE, 84
VERTGUIDE, 132
VERTGUIDE, 88
VERTGUIDE, 146
TOPMARGIN, 7
BOTTOMMARGIN, 177
HORZGUIDE, 51