Compare commits

...

21 Commits

Author SHA1 Message Date
chaoticgd
719063e996 Console: Limit buffer size in ConsoleLogFromVM::Write 2024-11-26 22:44:00 +01:00
PCSX2 Bot
5d40f36fa8 [ci skip] Qt: Update Base Translation. 2024-11-26 19:33:00 +01:00
PCSX2 Bot
31ffcfc920 PAD: Update to latest controller database. 2024-11-25 17:06:11 +01:00
Ty Lamontagne
c9642b70f6 CDVD: Only take ADR and track index/num from host IOCTL SUBQ
Fixes the OSDSYS CD player minute:second counter
2024-11-25 10:02:23 -05:00
Ty Lamontagne
849fa57bf6 CDVD: Adjust register logging 2024-11-25 10:02:23 -05:00
Ty Lamontagne
2c95ef76f1 CDVD: Minor cleanup and fix off-by-one TOC filling issue 2024-11-25 10:02:23 -05:00
Ty Lamontagne
4d9cb885b2 CDVD: Use disc track indexes for our track array. 2024-11-25 10:02:23 -05:00
Ty Lamontagne
e375f98f7a CDVD: Fix OSDSYS Audio CD regression.
There is still an existing issue with the tracks.
2024-11-25 10:02:23 -05:00
lightningterror
1b80f3aea2 Vif: Cleanup code a bit.
Const, casts, nullptr.
2024-11-25 14:02:59 +01:00
Jordan
b0496645f1 GameDB: Various fixes (#12030)
Fixes texture flickering in mission screens on PTO IV Pacific Theater of Operations and corrupted textures banding lighting in levels and bloom misalignment in MOH European Assault.
2024-11-24 19:39:05 +01:00
lightningterror
235cb13647 Vif: Replace some asserts with logs.
The conditions need hardware testing.
Use logs instead so the games don't crash and are still playable.
2024-11-23 13:13:19 +01:00
lightningterror
504dd9f513 Vif: Rename/remove new prefix from files. 2024-11-23 13:13:19 +01:00
Ty Lamontagne
e3fedf1676 QT: Use SetStatusText instead of passing a formatted string as a fmt
This caused crashes when file names had percent signs in them because we passed the file name as the format to SetFormattedStatusText. I opted to continue to use fmt for consistency.
2024-11-22 19:28:55 -05:00
lightningterror
f113a51783 DEV9: Code cleanup.
Casts, constants, unused functions, switch cases.
2024-11-23 00:21:41 +01:00
chaoticgd
f69d5835b8 PINE: Fix stack buffer overflow for long XDG_RUNTIME_DIR paths 2024-11-22 14:10:32 -05:00
PCSX2 Bot
8e8277c0c9 [ci skip] Qt: Update Base Translation. 2024-11-21 01:42:41 +01:00
secondsabre
c6c4eaf31c GameDB: Atelier Iris (SLUS-21113) fixes (#12021) 2024-11-20 15:33:34 -05:00
KamFretoZ
6324722b65 Qt: Add Volume indicator to verbose status 2024-11-20 15:56:15 +01:00
KamFretoZ
efd8c9ec69 OSD: Move VU stats above SW threads. 2024-11-20 15:56:15 +01:00
TellowKrinkle
9858aa1aa5 CMake: Try to put /usr/local/include last 2024-11-18 02:22:30 -06:00
PCSX2 Bot
256a946f96 [ci skip] Qt: Update Base Translation. 2024-11-17 14:43:32 +01:00
42 changed files with 441 additions and 348 deletions

View File

@@ -18509,6 +18509,8 @@ SLES-52256:
SLES-52257:
name: "P.T.O. IV - Pacific Theater of Operations IV"
region: "PAL-E"
gsHWFixes:
minimumBlendingLevel: 3 # Fixes graphical flickering.
SLES-52258:
name: "Romance of the Three Kingdoms VIII"
region: "PAL-E"
@@ -21503,47 +21505,42 @@ SLES-53332:
region: "PAL-M4"
compat: 5
gsHWFixes:
recommendedBlendingLevel: 2
recommendedBlendingLevel: 3 # Fixes banding and level lighting.
autoFlush: 1 # Fixes sun shinging through surfaces and graphical corruptions.
halfPixelOffset: 2 # Fixes misaligned blur.
cpuSpriteRenderBW: 2 # Fixes black spots appearing on some surfaces and massively reduces RP TC and TU count.
cpuSpriteRenderLevel: 2 # Needed for above.
nativeScaling: 2 # Fixes bloom misaligment.
SLES-53333:
name: "Medal of Honor - Les Faucons de Guerre"
region: "PAL-F"
gsHWFixes:
recommendedBlendingLevel: 2
recommendedBlendingLevel: 3 # Fixes banding and level lighting.
autoFlush: 1 # Fixes sun shinging through surfaces and graphical corruptions.
halfPixelOffset: 2 # Fixes misaligned blur.
cpuSpriteRenderBW: 2 # Fixes black spots appearing on some surfaces and massively reduces RP TC and TU count.
cpuSpriteRenderLevel: 2 # Needed for above.
nativeScaling: 2 # Fixes bloom misaligment.
SLES-53334:
name: "Medal of Honor - European Assault"
region: "PAL-G"
gsHWFixes:
recommendedBlendingLevel: 2
recommendedBlendingLevel: 3 # Fixes banding and level lighting.
autoFlush: 1 # Fixes sun shinging through surfaces and graphical corruptions.
halfPixelOffset: 2 # Fixes misaligned blur.
cpuSpriteRenderBW: 2 # Fixes black spots appearing on some surfaces and massively reduces RP TC and TU count.
cpuSpriteRenderLevel: 2 # Needed for above.
nativeScaling: 2 # Fixes bloom misaligment.
SLES-53335:
name: "Medal of Honor - European Assault"
region: "PAL-I"
gsHWFixes:
recommendedBlendingLevel: 2
recommendedBlendingLevel: 3 # Fixes banding and level lighting.
autoFlush: 1 # Fixes sun shinging through surfaces and graphical corruptions.
halfPixelOffset: 2 # Fixes misaligned blur.
cpuSpriteRenderBW: 2 # Fixes black spots appearing on some surfaces and massively reduces RP TC and TU count.
cpuSpriteRenderLevel: 2 # Needed for above.
nativeScaling: 2 # Fixes bloom misaligment.
SLES-53336:
name: "Medal of Honor - European Assault"
region: "PAL-S"
gsHWFixes:
recommendedBlendingLevel: 2
recommendedBlendingLevel: 3 # Fixes banding and level lighting.
autoFlush: 1 # Fixes sun shinging through surfaces and graphical corruptions.
halfPixelOffset: 2 # Fixes misaligned blur.
cpuSpriteRenderBW: 2 # Fixes black spots appearing on some surfaces and massively reduces RP TC and TU count.
cpuSpriteRenderLevel: 2 # Needed for above.
nativeScaling: 2 # Fixes bloom misaligment.
SLES-53338:
name: "Victorious Boxers 2 - Fighting Spirit"
region: "PAL-M3"
@@ -29948,11 +29945,10 @@ SLKA-25243:
name: "Medal of Honor - European Assault"
region: "NTSC-K"
gsHWFixes:
recommendedBlendingLevel: 2
recommendedBlendingLevel: 3 # Fixes banding and level lighting.
autoFlush: 1 # Fixes sun shinging through surfaces and graphical corruptions.
halfPixelOffset: 2 # Fixes misaligned blur.
cpuSpriteRenderBW: 2 # Fixes black spots appearing on some surfaces and massively reduces RP TC and TU count.
cpuSpriteRenderLevel: 2 # Needed for above.
nativeScaling: 2 # Fixes bloom misaligment.
SLKA-25244:
name: "WWE SmackDown! vs. Raw"
region: "NTSC-K"
@@ -31187,11 +31183,10 @@ SLPM-55037:
name: "Medal of Honor - European Assault [EASY 1980]"
region: "NTSC-J"
gsHWFixes:
recommendedBlendingLevel: 2
recommendedBlendingLevel: 3 # Fixes banding and level lighting.
autoFlush: 1 # Fixes sun shinging through surfaces and graphical corruptions.
halfPixelOffset: 2 # Fixes misaligned blur.
cpuSpriteRenderBW: 2 # Fixes black spots appearing on some surfaces and massively reduces RP TC and TU count.
cpuSpriteRenderLevel: 2 # Needed for above.
nativeScaling: 2 # Fixes bloom misaligment.
SLPM-55038:
name: "Grand Theft Auto - Liberty City Stories [Best Price]"
region: "NTSC-J"
@@ -33919,6 +33914,8 @@ SLPM-62144:
SLPM-62145:
name: "Teitoku no Ketsudan IV"
region: "NTSC-J"
gsHWFixes:
minimumBlendingLevel: 3 # Fixes graphical flickering.
SLPM-62146:
name: "Chou Kousoku Mahjong Plus"
region: "NTSC-J"
@@ -35381,6 +35378,8 @@ SLPM-62469:
SLPM-62470:
name: "Teitoku no Ketsudan IV with Power Up Kit"
region: "NTSC-J"
gsHWFixes:
minimumBlendingLevel: 3 # Fixes graphical flickering.
memcardFilters:
- "SLPM-62145"
- "SLPM-62470"
@@ -35652,6 +35651,8 @@ SLPM-62518:
name-sort: "ていとくのけつだん4 [KOEI The Best]"
name-en: "Teitoku no Ketsudan IV [Koei the Best]"
region: "NTSC-J"
gsHWFixes:
minimumBlendingLevel: 3 # Fixes graphical flickering.
SLPM-62519:
name: "三國志VIII [KOEI The Best]"
name-sort: "さんごくし8 [KOEI The Best]"
@@ -43063,11 +43064,10 @@ SLPM-66079:
name: "Medal of Honor - Europe Kyoushuu"
region: "NTSC-J"
gsHWFixes:
recommendedBlendingLevel: 2
recommendedBlendingLevel: 3 # Fixes banding and level lighting.
autoFlush: 1 # Fixes sun shinging through surfaces and graphical corruptions.
halfPixelOffset: 2 # Fixes misaligned blur.
cpuSpriteRenderBW: 2 # Fixes black spots appearing on some surfaces and massively reduces RP TC and TU count.
cpuSpriteRenderLevel: 2 # Needed for above.
nativeScaling: 2 # Fixes bloom misaligment.
SLPM-66080:
name: "GENERATION OF CHAOSIII 〜時の封印〜 [IFコレクション]"
name-sort: "じぇねれーしょんおぶかおす 3 ときのふういん [あいであふぁくとりーこれくしょん]"
@@ -45807,11 +45807,10 @@ SLPM-66514:
name-en: "Medal of Honor - European Assault [EA Best Hits]"
region: "NTSC-J"
gsHWFixes:
recommendedBlendingLevel: 2
recommendedBlendingLevel: 3 # Fixes banding and level lighting.
autoFlush: 1 # Fixes sun shinging through surfaces and graphical corruptions.
halfPixelOffset: 2 # Fixes misaligned blur.
cpuSpriteRenderBW: 2 # Fixes black spots appearing on some surfaces and massively reduces RP TC and TU count.
cpuSpriteRenderLevel: 2 # Needed for above.
nativeScaling: 2 # Fixes bloom misaligment.
SLPM-66515:
name: "EA BEST HITS スター・ウォーズ エピソード3 シスの復讐"
name-sort: "すたーうぉーず えぴそーど3 しすのふくしゅう [EA BEST HITS]"
@@ -61062,6 +61061,8 @@ SLUS-20567:
name: "P.T.O. IV - Pacific Theater of Operations"
region: "NTSC-U"
compat: 5
gsHWFixes:
minimumBlendingLevel: 3 # Fixes graphical flickering.
SLUS-20568:
name: "Hard Hitter Tennis"
region: "NTSC-U"
@@ -64136,6 +64137,10 @@ SLUS-21113:
name: "Atelier Iris - Eternal Mana"
region: "NTSC-U"
compat: 5
gameFixes:
- SoftwareRendererFMVHack # Fixes horizontal lines in FMV and prevents hash cache from disabling itself.
gsHWFixes:
roundSprite: 2 # Fixes character portraits when upscaling and reduces lines in FMVs when using HW renderer.
SLUS-21114:
name: "NHRA Championship Drag Racing"
region: "NTSC-U"
@@ -64606,11 +64611,10 @@ SLUS-21199:
region: "NTSC-U"
compat: 5
gsHWFixes:
recommendedBlendingLevel: 2
recommendedBlendingLevel: 3 # Fixes banding and level lighting.
autoFlush: 1 # Fixes sun shinging through surfaces and graphical corruptions.
halfPixelOffset: 2 # Fixes misaligned blur.
cpuSpriteRenderBW: 2 # Fixes black spots appearing on some surfaces and massively reduces RP TC and TU count.
cpuSpriteRenderLevel: 2 # Needed for above.
nativeScaling: 2 # Fixes bloom misaligment.
SLUS-21200:
name: "Armored Core - Nine Breaker"
region: "NTSC-U"

View File

@@ -109,6 +109,9 @@
03000000491900001904000000000000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Windows,
03000000710100001904000000000000,Amazon Luna Controller,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b5,leftstick:b8,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b4,rightstick:b7,rightx:a3,righty:a4,start:b6,x:b3,y:b2,platform:Windows,
0300000008100000e501000000000000,Anbernic Game Pad,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000020500000913000000000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
03000000373500000710000000000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000373500004610000000000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000830500000160000000000000,Arcade,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b3,x:b4,y:b4,platform:Windows,
03000000120c0000100e000000000000,Armor 3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
03000000490b00004406000000000000,ASCII Seamic Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
@@ -498,8 +501,8 @@
03000000d620000012a7000000000000,PowerA Fusion Nintendo Switch Fight Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000dd62000016a7000000000000,PowerA Fusion Pro Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000d620000013a7000000000000,PowerA Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000d62000002640000000000000,PowerA OPS Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000d62000003340000000000000,PowerA OPS Pro Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000d62000002640000000000000,PowerA OPS Wireless Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
03000000d62000006dca000000000000,PowerA Pro Ex,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
0300000062060000d570000000000000,PowerA PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
03000000d620000014a7000000000000,PowerA Spectra Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
@@ -881,6 +884,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000491900001904000001010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Mac OS X,
03000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Mac OS X,
0300000008100000e501000019040000,Anbernic Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a4,start:b11,x:b4,y:b3,platform:Mac OS X,
03000000373500004610000001000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Mac OS X,
03000000a30c00002700000003030000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000a30c00002800000003030000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a3,lefty:a4,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Mac OS X,
03000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
@@ -1204,6 +1208,10 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
03000000491900001904000011010000,Amazon Luna Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b9,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b7,x:b2,y:b3,platform:Linux,
05000000710100001904000000010000,Amazon Luna Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b11,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,platform:Linux,
0300000008100000e501000001010000,Anbernic Gamepad,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a4,start:b11,x:b3,y:b4,platform:Linux,
03000000020500000913000010010000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000373500000710000010010000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
030000005e0400008e02000072050000,Anbernic RG P01,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
05000000373500004610000001000000,Anbernic RG P01,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b15,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
03000000790000003018000011010000,Arcade Fightstick F300,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
03000000a30c00002700000011010000,Astro City Mini,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
03000000a30c00002800000011010000,Astro City Mini,a:b2,b:b1,back:b8,leftx:a0,lefty:a1,rightshoulder:b4,righttrigger:b5,start:b9,x:b3,y:b0,platform:Linux,
@@ -1526,6 +1534,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
05000000504c415953544154494f4e00,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
060000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
030000004c050000a00b000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux,
030000004c050000c405000000810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
030000004c050000a00b000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,
030000004c050000c405000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux,
030000004c050000c405000011810000,PS4 Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,

View File

@@ -287,3 +287,58 @@ int main() {
set(HOST_CACHE_LINE_SIZE ${detect_cache_line_size_output} CACHE STRING "Reported host cache line size")
endif()
endfunction()
function(get_recursive_include_directories output target inc_prop link_prop)
get_target_property(dirs ${target} ${inc_prop})
if(NOT dirs)
set(dirs)
endif()
get_target_property(deps ${target} ${link_prop})
if(deps)
foreach(dep IN LISTS deps)
if(TARGET ${dep})
get_recursive_include_directories(depdirs ${dep} INTERFACE_INCLUDE_DIRECTORIES INTERFACE_LINK_LIBRARIES)
foreach(depdir IN LISTS depdirs)
# Only match absolute paths
# We'll hope any non-absolute paths will not get set as system directories
if(depdir MATCHES "^/")
list(APPEND dirs ${depdir})
endif()
endforeach()
endif()
endforeach()
list(REMOVE_DUPLICATES dirs)
endif()
set(${output} "${dirs}" PARENT_SCOPE)
endfunction()
function(force_include_last_impl target include inc_prop link_prop)
get_recursive_include_directories(dirs ${target} ${inc_prop} ${link_prop})
set(remove)
foreach(dir IN LISTS dirs)
if("${dir}" MATCHES "${include}")
list(APPEND remove ${dir})
endif()
endforeach()
if(NOT "${remove}" STREQUAL "")
get_target_property(sysdirs ${target} INTERFACE_SYSTEM_INCLUDE_DIRECTORIES)
if(NOT sysdirs)
set(sysdirs)
endif()
# Move matching items to the end
list(REMOVE_ITEM dirs ${remove})
list(APPEND dirs ${remove})
# Set them as system include directories
list(APPEND sysdirs ${remove})
list(REMOVE_DUPLICATES sysdirs)
set_target_properties(${target} PROPERTIES
${inc_prop} "${dirs}"
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${sysdirs}"
)
endif()
endfunction()
function(force_include_last target include)
force_include_last_impl(${target} "${include}" INTERFACE_INCLUDE_DIRECTORIES INTERFACE_LINK_LIBRARIES)
force_include_last_impl(${target} "${include}" INCLUDE_DIRECTORIES LINK_LIBRARIES)
endfunction()

View File

@@ -998,8 +998,9 @@ void EmuThread::updatePerformanceMetrics(bool force)
QString gs_stat;
if (THREAD_VU1)
{
gs_stat = tr("Slot: %1 | %2 | EE: %3% | VU: %4% | GS: %5%")
gs_stat = tr("Slot: %1 | Volume: %2% | %3 |EE: %4% | VU: %5% | GS: %6%")
.arg(SaveStateSelectorUI::GetCurrentSlot())
.arg(SPU2::GetOutputVolume())
.arg(gs_stat_str.c_str())
.arg(PerformanceMetrics::GetCPUThreadUsage(), 0, 'f', 0)
.arg(PerformanceMetrics::GetVUThreadUsage(), 0, 'f', 0)
@@ -1007,8 +1008,9 @@ void EmuThread::updatePerformanceMetrics(bool force)
}
else
{
gs_stat = tr("Slot: %1 | %2 | EE: %3% | GS: %4%")
gs_stat = tr("Slot: %1 | Volume: %2% | 3% | EE: %4% | GS: %5%")
.arg(SaveStateSelectorUI::GetCurrentSlot())
.arg(SPU2::GetOutputVolume())
.arg(gs_stat_str.c_str())
.arg(PerformanceMetrics::GetCPUThreadUsage(), 0, 'f', 0)
.arg(PerformanceMetrics::GetGSThreadUsage(), 0, 'f', 0);

View File

@@ -2136,19 +2136,19 @@ Leaderboard Position: {1} of {2}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/BreakpointDialog.cpp" line="98"/>
<location filename="../Debugger/BreakpointDialog.cpp" line="126"/>
<location filename="../Debugger/BreakpointDialog.cpp" line="100"/>
<location filename="../Debugger/BreakpointDialog.cpp" line="128"/>
<source>Invalid Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/BreakpointDialog.cpp" line="113"/>
<location filename="../Debugger/BreakpointDialog.cpp" line="148"/>
<location filename="../Debugger/BreakpointDialog.cpp" line="115"/>
<location filename="../Debugger/BreakpointDialog.cpp" line="150"/>
<source>Invalid Condition</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/BreakpointDialog.cpp" line="133"/>
<location filename="../Debugger/BreakpointDialog.cpp" line="135"/>
<source>Invalid Size</source>
<translation type="unfinished"></translation>
</message>
@@ -2238,17 +2238,17 @@ Leaderboard Position: {1} of {2}</source>
<context>
<name>CDVD</name>
<message>
<location filename="../../pcsx2/CDVD/CDVDcommon.cpp" line="286"/>
<location filename="../../pcsx2/CDVD/CDVDcommon.cpp" line="287"/>
<source>Game disc location is on a removable drive, performance issues such as jittering and freezing may occur.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/CDVD/CDVDcommon.cpp" line="381"/>
<location filename="../../pcsx2/CDVD/CDVDcommon.cpp" line="382"/>
<source>Saving CDVD block dump to &apos;{}&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/CDVD/CDVDcommon.cpp" line="411"/>
<location filename="../../pcsx2/CDVD/CDVDcommon.cpp" line="412"/>
<source>Precaching CDVD</source>
<translation type="unfinished"></translation>
</message>
@@ -2273,7 +2273,7 @@ Leaderboard Position: {1} of {2}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/CDVD/CDVDdiscReader.cpp" line="199"/>
<location filename="../../pcsx2/CDVD/CDVDdiscReader.cpp" line="201"/>
<source>Precaching is not supported for discs.</source>
<translation type="unfinished"></translation>
</message>
@@ -3988,63 +3988,63 @@ Do you want to overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="229"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="247"/>
<source>Add</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="236"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="254"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="255"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="273"/>
<source>Scan For Functions</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="263"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="281"/>
<source>Scan Mode:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="271"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="289"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.cpp" line="115"/>
<source>Scan ELF</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="276"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="294"/>
<source>Scan Memory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="281"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="299"/>
<source>Skip</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="291"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="309"/>
<source>Custom Address Range:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="329"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="347"/>
<source>Start:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="339"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="357"/>
<source>End:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="377"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="395"/>
<source>Hash Functions</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="383"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.ui" line="401"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.cpp" line="141"/>
<source>Gray Out Symbols For Overwritten Functions</source>
<translation type="unfinished"></translation>
@@ -4115,17 +4115,32 @@ Do you want to overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.cpp" line="234"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.cpp" line="220"/>
<source>&lt;i&gt;No symbol sources in database.&lt;/i&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.cpp" line="254"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.cpp" line="240"/>
<source>&lt;i&gt;Start this game to modify the symbol sources list.&lt;/i&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.cpp" line="347"/>
<location filename="../Settings/DebugAnalysisSettingsWidget.cpp" line="312"/>
<source>Path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.cpp" line="313"/>
<source>Base Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.cpp" line="314"/>
<source>Condition</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Settings/DebugAnalysisSettingsWidget.cpp" line="361"/>
<source>Add Symbol File</source>
<translation type="unfinished"></translation>
</message>
@@ -4841,48 +4856,48 @@ Do you want to overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="618"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="619"/>
<source>Copy Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="620"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="621"/>
<source>Copy Instruction Hex</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="639"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="640"/>
<source>NOP Instruction(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="642"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="643"/>
<source>Run to Cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="650"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="651"/>
<source>Follow Branch</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="656"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="657"/>
<source>Go to in Memory View</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="659"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="660"/>
<source>Add Function</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="228"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="661"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="229"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="662"/>
<source>Rename Function</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="663"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="664"/>
<source>Remove Function</source>
<translation type="unfinished"></translation>
</message>
@@ -4903,23 +4918,23 @@ Do you want to overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="228"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="229"/>
<source>Function name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="221"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="234"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="222"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="235"/>
<source>Rename Function Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="234"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="235"/>
<source>Function name cannot be nothing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="221"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="222"/>
<source>No function / symbol is currently selected.</source>
<translation type="unfinished"></translation>
</message>
@@ -4929,72 +4944,72 @@ Do you want to overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="175"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="176"/>
<source>Cannot Go To</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="278"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="279"/>
<source>Restore Function Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="278"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="279"/>
<source>Unable to stub selected address.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="622"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="623"/>
<source>&amp;Copy Instruction Text</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="627"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="628"/>
<source>Copy Function Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="633"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="634"/>
<source>Restore Instruction(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="636"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="637"/>
<source>Asse&amp;mble new Instruction(s)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="644"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="645"/>
<source>&amp;Jump to Cursor</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="647"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="648"/>
<source>Toggle &amp;Breakpoint</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="653"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="654"/>
<source>&amp;Go to Address</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="667"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="668"/>
<source>Restore Function</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="672"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="673"/>
<source>Stub (NOP) Function</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="677"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="678"/>
<source>Show &amp;Opcode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/DisassemblyWidget.cpp" line="692"/>
<location filename="../Debugger/DisassemblyWidget.cpp" line="693"/>
<source>%1 NOT VALID ADDRESS</source>
<translation type="unfinished"></translation>
</message>
@@ -5021,85 +5036,85 @@ Do you want to overwrite?</source>
<name>EmuThread</name>
<message>
<location filename="../QtHost.cpp" line="1001"/>
<source>Slot: %1 | %2 | EE: %3% | VU: %4% | GS: %5%</source>
<source>Slot: %1 | Volume: %2% | %3 |EE: %4% | VU: %5% | GS: %6%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1010"/>
<source>Slot: %1 | %2 | EE: %3% | GS: %4%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1041"/>
<source>No Image</source>
<location filename="../QtHost.cpp" line="1011"/>
<source>Slot: %1 | Volume: %2% | 3% | EE: %4% | GS: %5%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1043"/>
<source>No Image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1045"/>
<source>%1x%2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1055"/>
<location filename="../QtHost.cpp" line="1057"/>
<source>FPS: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1062"/>
<location filename="../QtHost.cpp" line="1064"/>
<source>VPS: %1 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1068"/>
<location filename="../QtHost.cpp" line="1070"/>
<source>Speed: %1% </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1123"/>
<location filename="../QtHost.cpp" line="1125"/>
<source>Game: %1 (%2)
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1131"/>
<location filename="../QtHost.cpp" line="1133"/>
<source>Rich presence inactive or unsupported.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1135"/>
<location filename="../QtHost.cpp" line="1137"/>
<source>Game not loaded or no RetroAchievements available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1543"/>
<location filename="../QtHost.cpp" line="1563"/>
<location filename="../QtHost.cpp" line="1571"/>
<location filename="../QtHost.cpp" line="1605"/>
<location filename="../QtHost.cpp" line="1545"/>
<location filename="../QtHost.cpp" line="1565"/>
<location filename="../QtHost.cpp" line="1573"/>
<location filename="../QtHost.cpp" line="1607"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1543"/>
<location filename="../QtHost.cpp" line="1545"/>
<source>Failed to create HTTPDownloader.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1551"/>
<location filename="../QtHost.cpp" line="1553"/>
<source>Downloading %1...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1564"/>
<location filename="../QtHost.cpp" line="1566"/>
<source>Download failed with HTTP status code %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1572"/>
<location filename="../QtHost.cpp" line="1574"/>
<source>Download failed: Data is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1606"/>
<location filename="../QtHost.cpp" line="1608"/>
<source>Failed to write &apos;%1&apos;.</source>
<translation type="unfinished"></translation>
</message>
@@ -5473,81 +5488,76 @@ Do you want to overwrite?</source>
<context>
<name>ExpressionParser</name>
<message>
<location filename="../../pcsx2/DebugTools/DebugInterface.cpp" line="225"/>
<location filename="../../pcsx2/DebugTools/DebugInterface.cpp" line="1296"/>
<source>Invalid memory access size %d.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/DebugInterface.cpp" line="231"/>
<location filename="../../pcsx2/DebugTools/DebugInterface.cpp" line="1302"/>
<source>Invalid memory access (unaligned).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="244"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="271"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="240"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="267"/>
<source>Token too long.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="255"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="251"/>
<source>Invalid number &quot;%s&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="298"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="294"/>
<source>Invalid symbol &quot;%s&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="306"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="302"/>
<source>Invalid operator at &quot;%s&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="321"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="317"/>
<source>Closing parenthesis without opening one.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="335"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="331"/>
<source>Closing bracket without opening one.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="388"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="384"/>
<source>Parenthesis not closed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="447"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="443"/>
<source>Not enough arguments.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="462"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="458"/>
<source>Invalid memsize operator.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="506"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="502"/>
<source>Division by zero.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="517"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="513"/>
<source>Modulo by zero.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="596"/>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="592"/>
<source>Invalid tertiary operator.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/DebugTools/ExpressionParser.cpp" line="621"/>
<source>Invalid expression.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FileOperations</name>
@@ -17298,7 +17308,7 @@ This action cannot be reversed, and you will lose any saves on the card.</source
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Debugger/MemoryViewWidget.cpp" line="604"/>
<location filename="../Debugger/MemoryViewWidget.cpp" line="605"/>
<source>Cannot Go To</source>
<translation type="unfinished"></translation>
</message>
@@ -18269,45 +18279,45 @@ Ejecting {3} and replacing it with {2}.</source>
<context>
<name>QtHost</name>
<message>
<location filename="../QtHost.cpp" line="1103"/>
<location filename="../QtHost.cpp" line="1105"/>
<source>RA: Logged in as %1 (%2 pts, softcore: %3 pts). %4 unread messages.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1513"/>
<location filename="../QtHost.cpp" line="1528"/>
<location filename="../QtHost.cpp" line="1515"/>
<location filename="../QtHost.cpp" line="1530"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1514"/>
<location filename="../QtHost.cpp" line="1516"/>
<source>An error occurred while deleting empty game settings:
{}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1529"/>
<location filename="../QtHost.cpp" line="1531"/>
<source>An error occurred while saving game settings:
{}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1677"/>
<location filename="../QtHost.cpp" line="1679"/>
<source>Controller {} connected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1690"/>
<location filename="../QtHost.cpp" line="1692"/>
<source>System paused because controller {} was disconnected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1703"/>
<location filename="../QtHost.cpp" line="1705"/>
<source>Controller {} disconnected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1930"/>
<location filename="../QtHost.cpp" line="1932"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -3013,6 +3013,20 @@ void cdvdWrite(u8 key, u8 rt)
case 0x08:
cdvdWrite08(rt);
break;
case 0x09:
/*
The register 0xC, 0xD, 0xE give back MSF of the current sector being read/played from the actual DSP hardware. They are named "where" registers : where0, where1, where2.
They can be read anytime on hw as long as there is a valid disc and mode configured properly. Register 0x9 is where_select register which determines the mode for this registers. The mode must be set according to the used disc.
0 = CDDA
1 = CDROM
2 = DVD
If no disc or invalid mode for disc type then those registers return 0. Only official usage so far is cdvdman reading those registers and waiting to sync while doing SubQ.
Only logging writes different than 0 is enough.
*/
if (rt != 0)
Console.Warning("8bit write to addr 0x1f402009 = 0x%x", rt);
break;
case 0x0A:
cdvdWrite0A(rt);
break;
@@ -3035,7 +3049,7 @@ void cdvdWrite(u8 key, u8 rt)
cdvdWrite3A(rt);
break;
default:
Console.Warning("IOP Unknown 8bit write to addr 0x1f4020%x = 0x%x", key, rt);
Console.Warning("IOP Unknown 8bit write to addr 0x1f4020%02x = 0x%x", key, rt);
break;
}
}

View File

@@ -17,6 +17,7 @@
#include "common/ProgressCallback.h"
#include "common/StringUtil.h"
#include <array>
#include <ctype.h>
#include <exception>
#include <memory>
@@ -55,7 +56,7 @@ static OutputIsoFile blockDumpFile;
// Information about tracks on disc
u8 strack;
u8 etrack;
cdvdTrack tracks[100];
std::array<cdvdTrack, 100> tracks;
// Assertion check for CDVD != NULL (in devel and debug builds), because its handier than
// relying on DEP exceptions -- and a little more reliable too.

View File

@@ -10,7 +10,7 @@
class Error;
class ProgressCallback;
typedef struct _cdvdTrackIndex
struct cdvdTrackIndex
{
bool isPregap;
u8 trackM; // current minute offset from first track (BCD encoded)
@@ -20,9 +20,9 @@ typedef struct _cdvdTrackIndex
u8 discS; // current sector location on the disc (BCD encoded)
u8 discF; // current frame location on the disc (BCD encoded)
} cdvdTrackIndex;
};
typedef struct _cdvdTrack
struct cdvdTrack
{
u32 start_lba; // Starting lba of track, note that some formats will be missing 2 seconds, cue, bin
u8 type; // Track Type
@@ -36,10 +36,10 @@ typedef struct _cdvdTrack
u8 discF; // current frame location on the disc (BCD encoded)
// 0 is pregap, 1 is data
_cdvdTrackIndex index[2];
} cdvdTrack;
cdvdTrackIndex index[2];
};
typedef struct _cdvdSubQ
struct cdvdSubQ
{
u8 ctrl : 4; // control and adr bits
u8 adr : 4; // control and adr bits, note that adr determines what SubQ info we're recieving.
@@ -52,19 +52,19 @@ typedef struct _cdvdSubQ
u8 discM; // current minute location on the disc (BCD encoded)
u8 discS; // current sector location on the disc (BCD encoded)
u8 discF; // current frame location on the disc (BCD encoded)
} cdvdSubQ;
};
typedef struct _cdvdTD
struct cdvdTD
{ // NOT bcd coded
u32 lsn;
u8 type;
} cdvdTD;
};
typedef struct _cdvdTN
struct cdvdTN
{
u8 strack; //number of the first track (usually 1)
u8 etrack; //number of the last track
} cdvdTN;
};
// SpindleCtrl Masks
#define CDVD_SPINDLE_SPEED 0x7 // Speed ranges from 0-3 (1, 2, 3, 4x for DVD) and 0-5 (1, 2, 4, 12, 24x for CD)
@@ -185,7 +185,7 @@ extern const CDVD_API CDVDapi_NoDisc;
extern u8 strack;
extern u8 etrack;
extern cdvdTrack tracks[100];
extern std::array<cdvdTrack, 100> tracks;
extern void CDVDsys_ChangeSource(CDVD_SourceType type);
extern void CDVDsys_SetFile(CDVD_SourceType srctype, std::string newfile);

View File

@@ -54,7 +54,7 @@ static void lsn_to_msf(u8* minute, u8* second, u8* frame, u32 lsn)
// TocStuff
void cdvdParseTOC()
{
tracks[1].start_lba = 0;
tracks.fill(cdvdTrack{});
if (!src->GetSectorCount())
{
@@ -76,35 +76,37 @@ void cdvdParseTOC()
strack = 0xFF;
etrack = 0;
int i = 0;
for (auto& entry : src->ReadTOC())
{
if (entry.track < 1 || entry.track > 99)
const u8 track = entry.track;
if (track < 1 || track >= tracks.size())
{
Console.Warning("CDVD: Invalid track index %u, ignoring\n", track);
continue;
strack = std::min(strack, entry.track);
etrack = std::max(etrack, entry.track);
tracks[i].start_lba = entry.lba;
}
strack = std::min(strack, track);
etrack = std::max(etrack, track);
tracks[track].start_lba = entry.lba;
if ((entry.control & 0x0C) == 0x04)
{
std::array<u8, 2352> buffer;
// Byte 15 of a raw CD data sector determines the track mode
if (src->ReadSectors2352(entry.lba, 1, buffer.data()) && (buffer[15] & 3) == 2)
{
tracks[i].type = CDVD_MODE2_TRACK;
tracks[track].type = CDVD_MODE2_TRACK;
}
else
{
tracks[i].type = CDVD_MODE1_TRACK;
tracks[track].type = CDVD_MODE1_TRACK;
}
}
else
{
tracks[i].type = CDVD_AUDIO_TRACK;
tracks[track].type = CDVD_AUDIO_TRACK;
}
fprintf(stderr, "Track %u start sector: %u\n", entry.track, entry.lba);
i += 1;
#ifdef PCSX2_DEBUG
DevCon.Write("cdvdParseTOC: Track %u: LBA %u, Type %u\n", track, tracks[track].start_lba, tracks[track].type);
#endif
}
}
@@ -131,7 +133,7 @@ static void keepAliveThread()
std::unique_lock<std::mutex> guard(s_keepalive_lock);
while (!s_keepalive_cv.wait_for(guard, std::chrono::seconds(30),
[]() { return !s_keepalive_is_open; }))
[]() { return !s_keepalive_is_open; }))
{
//printf(" * keepAliveThread: polling drive.\n");
@@ -271,20 +273,28 @@ static s32 DISCreadSubQ(u32 lsn, cdvdSubQ* subq)
memset(subq, 0, sizeof(cdvdSubQ));
lsn_to_msf(&subq->discM, &subq->discS, &subq->discF, lsn + 150);
u8 i = strack;
while (i < etrack && lsn >= tracks[i + 1].start_lba)
++i;
lsn -= tracks[i].start_lba;
lsn_to_msf(&subq->trackM, &subq->trackS, &subq->trackF, lsn);
subq->ctrl = tracks[i].type;
// It's important to note that we do _not_ use the current MSF values
// from the host's device. We use the MSF values from the lsn.
// An easy way to test an implementation is to see if the OSDSYS
// CD player can display the correct minute and second values.
// From my testing, the IOCTL returns 0 for ctrl. This also breaks
// the OSDSYS player. The only "safe" values to receive from the IOCTL
// are ADR, trackNum and trackIndex.
if (!src->ReadTrackSubQ(subq))
{
lsn_to_msf(&subq->discM, &subq->discS, &subq->discF, lsn + 150);
u8 i = strack;
while (i < etrack && lsn >= tracks[i + 1].start_lba)
++i;
lsn -= tracks[i].start_lba;
lsn_to_msf(&subq->trackM, &subq->trackS, &subq->trackF, lsn);
subq->adr = 1;
subq->ctrl = tracks[i].type;
subq->trackNum = i;
subq->trackIndex = 1;
}
@@ -470,11 +480,13 @@ static s32 DISCgetTOC(void* toc)
{
err = DISCgetTD(i, &trackInfo);
lba_to_msf(trackInfo.lsn, &min, &sec, &frm);
tocBuff[i * 10 + 30] = trackInfo.type;
tocBuff[i * 10 + 32] = err == -1 ? 0 : dec_to_bcd(i); //number
tocBuff[i * 10 + 37] = dec_to_bcd(min);
tocBuff[i * 10 + 38] = dec_to_bcd(sec);
tocBuff[i * 10 + 39] = dec_to_bcd(frm);
const u8 tocIndex = i - diskInfo.strack;
tocBuff[tocIndex * 10 + 30] = trackInfo.type;
tocBuff[tocIndex * 10 + 32] = err == -1 ? 0 : dec_to_bcd(i); //number
tocBuff[tocIndex * 10 + 37] = dec_to_bcd(min);
tocBuff[tocIndex * 10 + 38] = dec_to_bcd(sec);
tocBuff[tocIndex * 10 + 39] = dec_to_bcd(frm);
fprintf(stderr, "Track %u: %u mins %u secs %u frames\n", i, min, sec, frm);
}
}

View File

@@ -208,18 +208,8 @@ bool IOCtlSrc::ReadTrackSubQ(cdvdSubQ* subQ) const
}
subQ->adr = osSubQ.cdsc_adr;
subQ->ctrl = osSubQ.cdsc_ctrl;
subQ->trackNum = osSubQ.cdsc_trk;
subQ->trackIndex = osSubQ.cdsc_ind;
subQ->discM = osSubQ.cdsc_absaddr.msf.minute;
subQ->discS = osSubQ.cdsc_absaddr.msf.second;
subQ->discF = osSubQ.cdsc_absaddr.msf.frame;
subQ->trackM = osSubQ.cdsc_reladdr.msf.minute;
subQ->trackS = osSubQ.cdsc_reladdr.msf.second;
subQ->trackF = osSubQ.cdsc_reladdr.msf.frame;
return true;
}

View File

@@ -320,17 +320,8 @@ bool IOCtlSrc::ReadTrackSubQ(cdvdSubQ* subQ) const
else
{
subQ->adr = osSubQ.CurrentPosition.ADR;
subQ->ctrl = osSubQ.CurrentPosition.Control;
subQ->trackNum = osSubQ.CurrentPosition.TrackNumber;
subQ->trackIndex = osSubQ.CurrentPosition.IndexNumber;
subQ->trackM = osSubQ.CurrentPosition.TrackRelativeAddress[0];
subQ->trackS = osSubQ.CurrentPosition.TrackRelativeAddress[1];
subQ->trackF = osSubQ.CurrentPosition.TrackRelativeAddress[2];
subQ->discM = osSubQ.CurrentPosition.AbsoluteAddress[0];
subQ->discS = osSubQ.CurrentPosition.AbsoluteAddress[1];
subQ->discF = osSubQ.CurrentPosition.AbsoluteAddress[2];
}
return true;

View File

@@ -990,8 +990,8 @@ set(pcsx2x86Sources
x86/ix86-32/iR5900Shift.cpp
x86/ix86-32/iR5900Templates.cpp
x86/ix86-32/recVTLB.cpp
x86/newVif_Dynarec.cpp
x86/newVif_UnpackSSE.cpp
x86/Vif_Dynarec.cpp
x86/Vif_UnpackSSE.cpp
)
# x86 headers
@@ -1031,15 +1031,15 @@ set(pcsx2x86Headers
x86/microVU_Tables.inl
x86/microVU_Upper.inl
x86/newVif.h
x86/newVif_UnpackSSE.h
x86/Vif_UnpackSSE.h
x86/R5900_Profiler.h
)
# ARM64
set(pcsx2arm64Sources
arm64/AsmHelpers.cpp
arm64/newVif_Dynarec.cpp
arm64/newVif_UnpackNEON.cpp
arm64/Vif_Dynarec.cpp
arm64/Vif_UnpackNEON.cpp
arm64/RecStubs.cpp
)
@@ -1227,6 +1227,10 @@ if (NOT APPLE)
endif()
fixup_file_properties(PCSX2)
# Directories like /usr/local/include, /opt/local/include, etc tend to include lots of headers from lots of libraries.
# Possibly including libraries that we compiled versions of with the dependency build script.
# To ensure the dependency build script's headers are preferred, push any directories that look like */local/include to the end.
force_include_last(PCSX2_FLAGS "/(usr|local)/include/?$")
if (APPLE)
find_library(METAL_LIBRARY Metal)

View File

@@ -91,8 +91,8 @@ namespace Sessions
return;
}
icmpEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (icmpEvent == NULL)
icmpEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
if (icmpEvent == nullptr)
{
Console.Error("DEV9: ICMP: Failed to Create Event");
IcmpCloseHandle(icmpFile);

View File

@@ -169,7 +169,7 @@ namespace Sessions
memcpy(recivedData->data.get(), buffer.get(), recived);
std::unique_ptr<TCP_Packet> iRet = CreateBasePacket(recivedData);
IncrementMyNumber((u32)recived);
IncrementMyNumber(static_cast<u32>(recived));
iRet->SetACK(true);
iRet->SetPSH(true);

View File

@@ -193,7 +193,7 @@ namespace Sessions
#endif
const int noDelay = true; // BOOL on Windows
constexpr int noDelay = true; // BOOL on Windows
ret = setsockopt(client, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast<const char*>(&noDelay), sizeof(noDelay));
if (ret != 0)

View File

@@ -65,7 +65,7 @@ namespace Sessions
return;
}
const int reuseAddress = true; // BOOL on Windows
constexpr int reuseAddress = true; // BOOL on Windows
ret = setsockopt(client, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<const char*>(&reuseAddress), sizeof(reuseAddress));
if (ret == SOCKET_ERROR)
@@ -76,7 +76,7 @@ namespace Sessions
errno);
#endif
const int broadcastEnable = true; // BOOL on Windows
constexpr int broadcastEnable = true; // BOOL on Windows
ret = setsockopt(client, SOL_SOCKET, SO_BROADCAST, reinterpret_cast<const char*>(&broadcastEnable), sizeof(broadcastEnable));
if (ret == SOCKET_ERROR)

View File

@@ -225,7 +225,7 @@ namespace Sessions
return false;
}
const int reuseAddress = true; // BOOL on Windows
constexpr int reuseAddress = true; // BOOL on Windows
ret = setsockopt(client, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<const char*>(&reuseAddress), sizeof(reuseAddress));
if (ret == SOCKET_ERROR)

View File

@@ -16,7 +16,7 @@
#define CARD_SIZE_ECC (1024 * BLOCK_SIZE_ECC)
static u32 ctrl, cmd = (u32)-1, address, id, counter, addrbyte;
static u32 ctrl, cmd = static_cast<u32>(-1), address, id, counter, addrbyte;
static u8 data[PAGE_SIZE_ECC], file[CARD_SIZE_ECC];
static void xfromman_call20_calculateXors(unsigned char buffer[128], unsigned char blah[4]);

View File

@@ -208,12 +208,12 @@ void NetAdapter::InspectSend(NetPacket* pkt)
if (EmuConfig.DEV9.EthLogDNS || EmuConfig.DEV9.EthLogDHCP)
{
EthernetFrame frame(pkt);
if (frame.protocol == (u16)EtherType::IPv4)
if (frame.protocol == static_cast<u16>(EtherType::IPv4))
{
PayloadPtr* payload = static_cast<PayloadPtr*>(frame.GetPayload());
IP_Packet ippkt(payload->data, payload->GetLength());
if (ippkt.protocol == (u16)IP_Type::UDP)
if (ippkt.protocol == static_cast<u16>(IP_Type::UDP))
{
IP_PayloadPtr* ipPayload = static_cast<IP_PayloadPtr*>(ippkt.GetPayload());
UDP_Packet udppkt(ipPayload->data, ipPayload->GetLength());
@@ -240,12 +240,12 @@ void NetAdapter::InspectRecv(NetPacket* pkt)
if (EmuConfig.DEV9.EthLogDNS || EmuConfig.DEV9.EthLogDHCP)
{
EthernetFrame frame(pkt);
if (frame.protocol == (u16)EtherType::IPv4)
if (frame.protocol == static_cast<u16>(EtherType::IPv4))
{
PayloadPtr* payload = static_cast<PayloadPtr*>(frame.GetPayload());
IP_Packet ippkt(payload->data, payload->GetLength());
if (ippkt.protocol == (u16)IP_Type::UDP)
if (ippkt.protocol == static_cast<u16>(IP_Type::UDP))
{
IP_PayloadPtr* ipPayload = static_cast<IP_PayloadPtr*>(ippkt.GetPayload());
UDP_Packet udppkt(ipPayload->data, ipPayload->GetLength());
@@ -350,7 +350,7 @@ bool NetAdapter::InternalServerRecv(NetPacket* pkt)
EthernetFrame frame(ippkt);
frame.sourceMAC = internalMAC;
frame.destinationMAC = ps2MAC;
frame.protocol = (u16)EtherType::IPv4;
frame.protocol = static_cast<u16>(EtherType::IPv4);
frame.WritePacket(pkt);
InspectRecv(pkt);
return true;
@@ -365,7 +365,7 @@ bool NetAdapter::InternalServerRecv(NetPacket* pkt)
EthernetFrame frame(ippkt);
frame.sourceMAC = internalMAC;
frame.destinationMAC = ps2MAC;
frame.protocol = (u16)EtherType::IPv4;
frame.protocol = static_cast<u16>(EtherType::IPv4);
frame.WritePacket(pkt);
InspectRecv(pkt);
return true;
@@ -377,12 +377,12 @@ bool NetAdapter::InternalServerRecv(NetPacket* pkt)
bool NetAdapter::InternalServerSend(NetPacket* pkt)
{
EthernetFrame frame(pkt);
if (frame.protocol == (u16)EtherType::IPv4)
if (frame.protocol == static_cast<u16>(EtherType::IPv4))
{
PayloadPtr* payload = static_cast<PayloadPtr*>(frame.GetPayload());
IP_Packet ippkt(payload->data, payload->GetLength());
if (ippkt.protocol == (u16)IP_Type::UDP)
if (ippkt.protocol == static_cast<u16>(IP_Type::UDP))
{
IP_PayloadPtr* ipPayload = static_cast<IP_PayloadPtr*>(ippkt.GetPayload());
UDP_Packet udppkt(ipPayload->data, ipPayload->GetLength());
@@ -397,7 +397,7 @@ bool NetAdapter::InternalServerSend(NetPacket* pkt)
if (ippkt.destinationIP == internalIP)
{
if (ippkt.protocol == (u16)IP_Type::UDP)
if (ippkt.protocol == static_cast<u16>(IP_Type::UDP))
{
ps2IP = ippkt.sourceIP;

View File

@@ -70,11 +70,11 @@ enum struct AdapterOptions : int
constexpr enum AdapterOptions operator|(const enum AdapterOptions selfValue, const enum AdapterOptions inValue)
{
return (enum AdapterOptions)(int(selfValue) | int(inValue));
return static_cast<enum AdapterOptions>(static_cast<int>(selfValue) | static_cast<int>(inValue));
}
constexpr enum AdapterOptions operator&(const enum AdapterOptions selfValue, const enum AdapterOptions inValue)
{
return (enum AdapterOptions)(int(selfValue) & int(inValue));
return static_cast<enum AdapterOptions>(static_cast<int>(selfValue) & static_cast<int>(inValue));
}
class NetAdapter

View File

@@ -136,7 +136,7 @@ bool PCAPAdapter::recv(NetPacket* pkt)
pxAssert(header->len == header->caplen);
memcpy(pkt->buffer, pkt_data, header->len);
pkt->size = (int)header->len;
pkt->size = static_cast<int>(header->len);
if (!switched)
SetMACBridgedRecv(pkt);
@@ -339,7 +339,7 @@ bool PCAPAdapter::SetMACSwitchedFilter(MAC_Address mac)
void PCAPAdapter::SetMACBridgedRecv(NetPacket* pkt)
{
EthernetFrameEditor frame(pkt);
if (frame.GetProtocol() == (u16)EtherType::IPv4) // IP
if (frame.GetProtocol() == static_cast<u16>(EtherType::IPv4)) // IP
{
// Compare DEST IP in IP with the PS2's IP, if they match, change DEST MAC to ps2MAC.
PayloadPtr* payload = frame.GetPayload();
@@ -347,7 +347,7 @@ void PCAPAdapter::SetMACBridgedRecv(NetPacket* pkt)
if (ippkt.destinationIP == ps2IP)
frame.SetDestinationMAC(ps2MAC);
}
if (frame.GetProtocol() == (u16)EtherType::ARP) // ARP
if (frame.GetProtocol() == static_cast<u16>(EtherType::ARP)) // ARP
{
// Compare DEST IP in ARP with the PS2's IP, if they match, DEST MAC to ps2MAC on both ARP and ETH Packet headers.
ARP_PacketEditor arpPkt(frame.GetPayload());
@@ -362,13 +362,13 @@ void PCAPAdapter::SetMACBridgedRecv(NetPacket* pkt)
void PCAPAdapter::SetMACBridgedSend(NetPacket* pkt)
{
EthernetFrameEditor frame(pkt);
if (frame.GetProtocol() == (u16)EtherType::IPv4) // IP
if (frame.GetProtocol() == static_cast<u16>(EtherType::IPv4)) // IP
{
PayloadPtr* payload = frame.GetPayload();
IP_Packet ippkt(payload->data, payload->GetLength());
ps2IP = ippkt.sourceIP;
}
if (frame.GetProtocol() == (u16)EtherType::ARP) // ARP
if (frame.GetProtocol() == static_cast<u16>(EtherType::ARP)) // ARP
{
ARP_PacketEditor arpPkt(frame.GetPayload());
ps2IP = *(IP_Address*)arpPkt.SenderProtocolAddress();

View File

@@ -37,7 +37,6 @@ public:
private:
bool InitPCAP(const std::string& adapter, bool promiscuous);
void InitPCAPDumper();
bool SetMACSwitchedFilter(PacketReader::MAC_Address mac);
void SetMACBridgedRecv(NetPacket* pkt);

View File

@@ -302,16 +302,14 @@ void emac3_write(u32 addr)
value |= SMAP_E3_PHY_OP_COMP;
int reg = value & (SMAP_E3_PHY_REG_ADDR_MSK);
u16 val = value >> 16;
switch (reg)
if (reg == SMAP_DsPHYTER_BMCR)
{
case SMAP_DsPHYTER_BMCR:
if (val & SMAP_PHY_BMCR_RST)
{
ad_reset();
}
val &= ~SMAP_PHY_BMCR_RST;
val |= 0x1;
break;
if (val & SMAP_PHY_BMCR_RST)
{
ad_reset();
}
val &= ~SMAP_PHY_BMCR_RST;
val |= 0x1;
}
//DevCon.WriteLn("DEV9: phy_write %d: %x", reg, val);
dev9.phyregs[reg] = val;

View File

@@ -268,24 +268,24 @@ bool SocketAdapter::send(NetPacket* pkt)
switch (frame.protocol)
{
case (u16)EtherType::null:
case static_cast<u16>(EtherType::null):
case 0x0C00:
//Packets with the above ethertypes get sent when the adapter is reset
//Catch them here instead of printing an error
return true;
case (int)EtherType::IPv4:
case static_cast<int>(EtherType::IPv4):
{
PayloadPtr* payload = static_cast<PayloadPtr*>(frame.GetPayload());
IP_Packet ippkt(payload->data, payload->GetLength());
return SendIP(&ippkt);
}
case (u16)EtherType::ARP:
case static_cast<u16>(EtherType::ARP):
{
PayloadPtr* payload = static_cast<PayloadPtr*>(frame.GetPayload());
ARP_Packet arpPkt(payload->data, payload->GetLength());
if (arpPkt.protocol == (u16)EtherType::IPv4)
if (arpPkt.protocol == static_cast<u16>(EtherType::IPv4))
{
if (arpPkt.op == 1) //ARP request
{
@@ -304,7 +304,7 @@ bool SocketAdapter::send(NetPacket* pkt)
EthernetFrame* retARP = new EthernetFrame(arpRet);
retARP->destinationMAC = ps2MAC;
retARP->sourceMAC = internalMAC;
retARP->protocol = (u16)EtherType::ARP;
retARP->protocol = static_cast<u16>(EtherType::ARP);
vRecBuffer.Enqueue(retARP);
}
@@ -567,7 +567,7 @@ void SocketAdapter::HandleConnectionClosed(BaseSession* sender)
void SocketAdapter::HandleFixedPortClosed(BaseSession* sender)
{
ConnectionKey key = sender->key;
const ConnectionKey key = sender->key;
connections.Remove(key);
fixedUDPPorts.Remove(key.ps2Port);

View File

@@ -87,8 +87,7 @@ struct ConsoleLog : public LogBase
// ConsoleLogFromVM
// --------------------------------------------------------------------------------------
// Special console logger for Virtual Machine log sources, such as the EE and IOP console
// writes (actual game developer messages and such). These logs do *not* automatically
// append newlines, since the VM generates them manually; and they do *not* support printf
// writes (actual game developer messages and such). These logs do *not* support printf
// formatting, since anything coming over the EE/IOP consoles should be considered raw
// string data. (otherwise %'s would get mis-interpreted).
//
@@ -102,22 +101,18 @@ public:
{
for (const char ch : msg)
{
if (ch == '\n')
{
if (!m_buffer.empty())
{
Console.WriteLn(conColor, m_buffer);
m_buffer.clear();
}
}
else if (ch < 0x20)
{
// Ignore control characters.
// Otherwise you get fun bells going off.
}
else
{
// Ignore control characters.
// Otherwise you get fun bells going off.
if (ch < 0x20)
continue;
if (ch != '\n')
m_buffer.push_back(ch);
if (ch == '\n' || m_buffer.size() >= 4096)
{
Console.WriteLn(conColor, m_buffer);
m_buffer.clear();
}
}

View File

@@ -623,7 +623,7 @@ void GameList::ScanDirectory(const char* path, bool recursive, bool only_cache,
}
const std::string_view filename = Path::GetFileName(ffd.FileName);
progress->SetFormattedStatusText(fmt::format(TRANSLATE_FS("GameList","Scanning {}..."), filename.data()).c_str());
progress->SetStatusText(fmt::format(TRANSLATE_FS("GameList","Scanning {}..."), filename.data()).c_str());
ScanFile(std::move(ffd.FileName), ffd.ModificationTime, lock, played_time_map, custom_attributes_ini);
progress->SetProgressValue(files_scanned);
}

View File

@@ -246,6 +246,13 @@ __ri void ImGuiManager::DrawPerformanceOverlay(float& position_y, float scale, f
FormatProcessorStat(text, PerformanceMetrics::GetGSThreadUsage(), PerformanceMetrics::GetGSThreadAverageTime());
DRAW_LINE(fixed_font, text.c_str(), IM_COL32(255, 255, 255, 255));
if (THREAD_VU1)
{
text = "VU: ";
FormatProcessorStat(text, PerformanceMetrics::GetVUThreadUsage(), PerformanceMetrics::GetVUThreadAverageTime());
DRAW_LINE(fixed_font, text.c_str(), IM_COL32(255, 255, 255, 255));
}
const u32 gs_sw_threads = PerformanceMetrics::GetGSSWThreadCount();
for (u32 i = 0; i < gs_sw_threads; i++)
{
@@ -255,13 +262,6 @@ __ri void ImGuiManager::DrawPerformanceOverlay(float& position_y, float scale, f
DRAW_LINE(fixed_font, text.c_str(), IM_COL32(255, 255, 255, 255));
}
if (THREAD_VU1)
{
text = "VU: ";
FormatProcessorStat(text, PerformanceMetrics::GetVUThreadUsage(), PerformanceMetrics::GetVUThreadAverageTime());
DRAW_LINE(fixed_font, text.c_str(), IM_COL32(255, 255, 255, 255));
}
if (GSCapture::IsCapturing())
{
text = "CAP: ";

View File

@@ -306,7 +306,7 @@ bool PINEServer::Initialize(int slot)
return false;
}
server.sun_family = AF_UNIX;
strcpy(server.sun_path, m_socket_name.c_str());
StringUtil::Strlcpy(server.sun_path, m_socket_name, sizeof(server.sun_path));
// we unlink the socket so that when releasing this thread the socket gets
// freed even if we didn't close correctly the loop

View File

@@ -420,10 +420,11 @@ __forceinline void UpdateSpdifMode()
{
const int OPM = PlayMode;
if (Spdif.Out & 0x4 && SPU2::MsgToConsole()) // use 24/32bit PCM data streaming
if (Spdif.Out & 0x4) // use 24/32bit PCM data streaming
{
PlayMode = 8;
SPU2::ConLog("* SPU2: WARNING: Possibly CDDA mode set!\n");
if (SPU2::MsgToConsole())
SPU2::ConLog("* SPU2: WARNING: Possibly CDDA mode set!\n");
return;
}

View File

@@ -33,7 +33,7 @@ bool _VIF0chain()
}
pMem = (u32*)dmaGetAddr(vif0ch.madr, false);
if (pMem == NULL)
if (pMem == nullptr)
{
vif0.cmd = 0;
vif0.tag.size = 0;

View File

@@ -27,7 +27,7 @@ void vif1TransferToMemory()
u128* pMem = (u128*)dmaGetAddr(vif1ch.madr, false);
// VIF from gsMemory
if (pMem == NULL)
if (pMem == nullptr)
{ // Is vif0ptag empty?
Console.WriteLn("Vif1 Tag BUSERR");
dmacRegs.stat.BEIS = true; // Bus Error
@@ -117,7 +117,7 @@ bool _VIF1chain()
}
pMem = (u32*)dmaGetAddr(vif1ch.madr, !vif1ch.chcr.DIR);
if (pMem == NULL)
if (pMem == nullptr)
{
vif1.cmd = 0;
vif1.tag.size = 0;
@@ -305,8 +305,8 @@ __fi void vif1Interrupt()
// from the GS then we handle that separately (KH2 for testing)
if (vif1ch.chcr.DIR)
{
bool isDirect = (vif1.cmd & 0x7f) == 0x50;
bool isDirectHL = (vif1.cmd & 0x7f) == 0x51;
const bool isDirect = (vif1.cmd & 0x7f) == 0x50;
const bool isDirectHL = (vif1.cmd & 0x7f) == 0x51;
if ((isDirect && !gifUnit.CanDoPath2()) || (isDirectHL && !gifUnit.CanDoPath2HL()))
{
GUNIT_WARN("vif1Interrupt() - Waiting for Path 2 to be ready");

View File

@@ -23,7 +23,7 @@ static u32 QWCinVIFMFIFO(u32 DrainADDR, u32 qwc)
}
else
{
u32 limit = dmacRegs.rbor.ADDR + dmacRegs.rbsr.RMSK + 16;
const u32 limit = dmacRegs.rbor.ADDR + dmacRegs.rbsr.RMSK + 16;
//Drain is higher than SPR so it has looped round,
//calculate from base to the SPR tag addr and what is left in the top of the ring
ret = ((spr0ch.madr - dmacRegs.rbor.ADDR) + (limit - DrainADDR)) >> 4;
@@ -35,8 +35,8 @@ static u32 QWCinVIFMFIFO(u32 DrainADDR, u32 qwc)
}
static __fi bool mfifoVIF1rbTransfer()
{
u32 msize = dmacRegs.rbor.ADDR + dmacRegs.rbsr.RMSK + 16;
u32 mfifoqwc = std::min(QWCinVIFMFIFO(vif1ch.madr, vif1ch.qwc), vif1ch.qwc);
const u32 msize = dmacRegs.rbor.ADDR + dmacRegs.rbsr.RMSK + 16;
const u32 mfifoqwc = std::min(QWCinVIFMFIFO(vif1ch.madr, vif1ch.qwc), vif1ch.qwc);
u32* src;
bool ret;
@@ -49,7 +49,7 @@ static __fi bool mfifoVIF1rbTransfer()
/* Check if the transfer should wrap around the ring buffer */
if ((vif1ch.madr + (mfifoqwc << 4)) > (msize))
{
int s1 = ((msize)-vif1ch.madr) >> 2;
const int s1 = ((msize)-vif1ch.madr) >> 2;
VIF_LOG("Split MFIFO");
@@ -57,7 +57,7 @@ static __fi bool mfifoVIF1rbTransfer()
vif1ch.madr = qwctag(vif1ch.madr);
src = (u32*)PSM(vif1ch.madr);
if (src == NULL)
if (src == nullptr)
return false;
if (vif1.irqoffset.enabled)
@@ -75,7 +75,7 @@ static __fi bool mfifoVIF1rbTransfer()
vif1ch.madr = qwctag(vif1ch.madr);
src = (u32*)PSM(vif1ch.madr);
if (src == NULL)
if (src == nullptr)
return false;
VIF1transfer(src, ((mfifoqwc << 2) - s1));
}
@@ -86,7 +86,7 @@ static __fi bool mfifoVIF1rbTransfer()
/* it doesn't, so just transfer 'qwc*4' words */
src = (u32*)PSM(vif1ch.madr);
if (src == NULL)
if (src == nullptr)
return false;
if (vif1.irqoffset.enabled)
@@ -133,7 +133,7 @@ static __fi void mfifo_VIF1chain()
//No need to exit on non-mfifo as it is indirect anyway, so it can be transferring this while spr refills the mfifo
if (pMem == NULL)
if (pMem == nullptr)
return;
if (vif1.irqoffset.enabled)
@@ -158,7 +158,7 @@ void mfifoVifMaskMem(int id)
//DevCon.Warning("VIF MFIFO MADR below bottom of ring buffer, wrapping VIF MADR = %x Ring Bottom %x", vif1ch.madr, dmacRegs.rbor.ADDR);
vif1ch.madr = qwctag(vif1ch.madr);
}
if (vif1ch.madr > (dmacRegs.rbor.ADDR + (u32)dmacRegs.rbsr.RMSK)) //Usual scenario is the tag is near the end (Front Mission 4)
if (vif1ch.madr > (dmacRegs.rbor.ADDR + static_cast<u32>(dmacRegs.rbsr.RMSK))) //Usual scenario is the tag is near the end (Front Mission 4)
{
//DevCon.Warning("VIF MFIFO MADR outside top of ring buffer, wrapping VIF MADR = %x Ring Top %x", vif1ch.madr, (dmacRegs.rbor.ADDR + dmacRegs.rbsr.RMSK)+16);
vif1ch.madr = qwctag(vif1ch.madr);
@@ -281,8 +281,8 @@ void vifMFIFOInterrupt()
if (vif1ch.chcr.DIR)
{
bool isDirect = (vif1.cmd & 0x7f) == 0x50;
bool isDirectHL = (vif1.cmd & 0x7f) == 0x51;
const bool isDirect = (vif1.cmd & 0x7f) == 0x50;
const bool isDirectHL = (vif1.cmd & 0x7f) == 0x51;
if ((isDirect && !gifUnit.CanDoPath2()) || (isDirectHL && !gifUnit.CanDoPath2HL()))
{
GUNIT_WARN("vifMFIFOInterrupt() - Waiting for Path 2 to be ready");

View File

@@ -109,7 +109,7 @@ static __fi void vuExecMicro(int idx, u32 addr, bool requires_wait)
}
GetVifX.queued_program = true;
if ((s32)addr == -1)
if (static_cast<s32>(addr) == -1)
GetVifX.queued_pc = addr;
else
GetVifX.queued_pc = addr & (idx ? 0x7ffu : 0x1ffu);
@@ -144,7 +144,7 @@ __fi int _vifCode_Direct(int pass, const u8* data, bool isDirectHL)
vif1Only();
pass1
{
int vifImm = (u16)vif1Regs.code;
const int vifImm = static_cast<u16>(vif1Regs.code);
vif1.tag.size = vifImm ? (vifImm * 4) : (65536 * 4);
vif1.pass = 1;
return 1;
@@ -152,9 +152,9 @@ __fi int _vifCode_Direct(int pass, const u8* data, bool isDirectHL)
pass2
{
const char* name = isDirectHL ? "DirectHL" : "Direct";
GIF_TRANSFER_TYPE tranType = isDirectHL ? GIF_TRANS_DIRECTHL : GIF_TRANS_DIRECT;
uint size = std::min(vif1.vifpacketsize, vif1.tag.size) * 4; // Get size in bytes
uint ret = gifUnit.TransferGSPacketData(tranType, (u8*)data, size);
const GIF_TRANSFER_TYPE tranType = isDirectHL ? GIF_TRANS_DIRECTHL : GIF_TRANS_DIRECT;
const uint size = std::min(vif1.vifpacketsize, vif1.tag.size) * 4; // Get size in bytes
const uint ret = gifUnit.TransferGSPacketData(tranType, (u8*)data, size);
vif1.tag.size -= ret / 4; // Convert to u32's
vif1Regs.stat.VGW = false;
@@ -202,7 +202,7 @@ vifOp(vifCode_Flush)
//vifStruct& vifX = GetVifX;
pass1or2
{
bool p1or2 = (gifRegs.stat.APATH != 0 && gifRegs.stat.APATH != 3);
const bool p1or2 = (gifRegs.stat.APATH != 0 && gifRegs.stat.APATH != 3);
vif1Regs.stat.VGW = false;
vifFlush(idx);
if (gifUnit.checkPaths(1, 1, 0) || p1or2)
@@ -234,7 +234,7 @@ vifOp(vifCode_FlushA)
pass1or2
{
//Gif_Path& p3 = gifUnit.gifPath[GIF_PATH_3];
u32 gifBusy = gifUnit.checkPaths(1, 1, 1) || (gifRegs.stat.APATH != 0);
const u32 gifBusy = gifUnit.checkPaths(1, 1, 1) || (gifRegs.stat.APATH != 0);
//bool doStall = false;
vif1Regs.stat.VGW = false;
vifFlush(idx);
@@ -298,7 +298,7 @@ vifOp(vifCode_Mark)
vifStruct& vifX = GetVifX;
pass1
{
vifXRegs.mark = (u16)vifXRegs.code;
vifXRegs.mark = static_cast<u16>(vifXRegs.code);
vifXRegs.stat.MRK = true;
vifX.cmd = 0;
vifX.pass = 0;
@@ -311,7 +311,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;
const u16 vuMemSize = idx ? 0x4000 : 0x1000;
pxAssert(VUx.Micro);
vifExecQueue(idx);
@@ -371,8 +371,8 @@ vifOp(vifCode_MPG)
vifStruct& vifX = GetVifX;
pass1
{
int vifNum = (u8)(vifXRegs.code >> 16);
vifX.tag.addr = (u16)(vifXRegs.code << 3) & (idx ? 0x3fff : 0xfff);
const int vifNum = static_cast<u8>(vifXRegs.code >> 16);
vifX.tag.addr = static_cast<u16>(vifXRegs.code << 3) & (idx ? 0x3fff : 0xfff);
vifX.tag.size = vifNum ? (vifNum * 2) : 512;
vifFlush(idx);
@@ -406,7 +406,7 @@ vifOp(vifCode_MPG)
//DevCon.Warning("Vif%d MPG Split Overflow full %x", idx, vifX.tag.addr + vifX.tag.size*4);
}
_vifCode_MPG(idx, vifX.tag.addr, data, vifX.tag.size);
int ret = vifX.tag.size;
const int ret = vifX.tag.size;
vifX.tag.size = 0;
vifX.cmd = 0;
vifX.pass = 0;
@@ -430,7 +430,7 @@ vifOp(vifCode_MSCAL)
return 0;
}
vuExecMicro(idx, (u16)(vifXRegs.code), false);
vuExecMicro(idx, static_cast<u16>(vifXRegs.code), false);
vifX.cmd = 0;
vifX.pass = 0;
@@ -455,7 +455,7 @@ vifOp(vifCode_MSCALF)
{
vifXRegs.stat.VGW = false;
vifFlush(idx);
if (u32 a = gifUnit.checkPaths(1, 1, 0))
if (const u32 a = gifUnit.checkPaths(1, 1, 0))
{
GUNIT_WARN("Vif MSCALF: Stall! [%d,%d]", !!(a & 1), !!(a & 2));
vif1Regs.stat.VGW = true;
@@ -469,7 +469,7 @@ vifOp(vifCode_MSCALF)
return 0;
}
vuExecMicro(idx, (u16)(vifXRegs.code), true);
vuExecMicro(idx, static_cast<u16>(vifXRegs.code), true);
vifX.cmd = 0;
vifX.pass = 0;
vifExecQueue(idx);
@@ -595,7 +595,7 @@ static __fi int _vifCode_STColRow(const u32* data, u32* pmem2)
{
vifStruct& vifX = GetVifX;
int ret = std::min(4 - vifX.tag.addr, vifX.vifpacketsize);
const int ret = std::min(4 - vifX.tag.addr, vifX.vifpacketsize);
pxAssume(vifX.tag.addr < 4);
pxAssume(ret > 0);
@@ -641,7 +641,7 @@ vifOp(vifCode_STCol)
}
pass2
{
u32 ret = _vifCode_STColRow<idx>(data, &vifX.MaskCol._u32[vifX.tag.addr]);
const u32 ret = _vifCode_STColRow<idx>(data, &vifX.MaskCol._u32[vifX.tag.addr]);
if (idx && vifX.tag.size == 0)
vu1Thread.WriteCol(vifX);
return ret;
@@ -662,7 +662,7 @@ vifOp(vifCode_STRow)
}
pass2
{
u32 ret = _vifCode_STColRow<idx>(data, &vifX.MaskRow._u32[vifX.tag.addr]);
const u32 ret = _vifCode_STColRow<idx>(data, &vifX.MaskRow._u32[vifX.tag.addr]);
if (idx && vifX.tag.size == 0)
vu1Thread.WriteRow(vifX);
return ret;
@@ -676,8 +676,8 @@ vifOp(vifCode_STCycl)
vifStruct& vifX = GetVifX;
pass1
{
vifXRegs.cycle.cl = (u8)(vifXRegs.code);
vifXRegs.cycle.wl = (u8)(vifXRegs.code >> 8);
vifXRegs.cycle.cl = static_cast<u8>(vifXRegs.code);
vifXRegs.cycle.wl = static_cast<u8>(vifXRegs.code >> 8);
vifX.cmd = 0;
vifX.pass = 0;
}
@@ -744,9 +744,9 @@ vifOp(vifCode_Unpack)
{
vifStruct& vifX = GetVifX;
VIFregisters& vifRegs = vifXRegs;
uint vl = vifX.cmd & 0x03;
uint vn = (vifX.cmd >> 2) & 0x3;
bool flg = (vifRegs.code >> 15) & 1;
const uint vl = vifX.cmd & 0x03;
const uint vn = (vifX.cmd >> 2) & 0x3;
const bool flg = (vifRegs.code >> 15) & 1;
static const char* const vntbl[] = {"S", "V2", "V3", "V4"};
static const uint vltbl[] = {32, 16, 8, 5};

View File

@@ -43,4 +43,4 @@ alignas(16) extern nVifStruct nVif[2];
alignas(16) extern nVifCall nVifUpk[(2 * 2 * 16) * 4]; // ([USN][Masking][Unpack Type]) [curCycle]
alignas(16) extern u32 nVifMask[3][4][4]; // [MaskNumber][CycleNumber][Vector]
static constexpr bool newVifDynaRec = 1; // Use code in newVif_Dynarec.inl
static constexpr bool newVifDynaRec = 1; // Use code in Vif_Dynarec.inl

View File

@@ -1,7 +1,7 @@
// SPDX-FileCopyrightText: 2002-2024 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0
#include "arm64/newVif_UnpackNEON.h"
#include "arm64/Vif_UnpackNEON.h"
#include "arm64/AsmHelpers.h"
#include "MTVU.h"
@@ -367,7 +367,9 @@ void VifUnpackNEON_Dynarec::ModUnpack(int upknum, bool PostOp)
case 3:
case 7:
case 11:
pxFailRel(fmt::format("Vpu/Vif - Invalid Unpack! [{}]", upknum).c_str());
// TODO: Needs hardware testing.
// Dynasty Warriors 5: Empire - Player 2 chose a character menu.
Console.Warning("Vpu/Vif: Invalid Unpack %d", upknum);
break;
}
}

View File

@@ -1,7 +1,7 @@
// SPDX-FileCopyrightText: 2002-2024 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0
#include "newVif_UnpackNEON.h"
#include "Vif_UnpackNEON.h"
#include "common/Perf.h"
namespace a64 = vixl::aarch64;
@@ -345,7 +345,9 @@ void VifUnpackNEON_Base::xUnpack(int upknum) const
case 3:
case 7:
case 11:
pxFailRel(fmt::format("Vpu/Vif - Invalid Unpack! [{}]", upknum).c_str());
// TODO: Needs hardware testing.
// Dynasty Warriors 5: Empire - Player 2 chose a character menu.
Console.Warning("Vpu/Vif: Invalid Unpack %d", upknum);
break;
}
}

View File

@@ -117,10 +117,10 @@
<ClCompile Include="arm64\AsmHelpers.cpp">
<ExcludedFromBuild Condition="'$(Platform)'!='ARM64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="arm64\newVif_Dynarec.cpp">
<ClCompile Include="arm64\Vif_Dynarec.cpp">
<ExcludedFromBuild Condition="'$(Platform)'!='ARM64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="arm64\newVif_UnpackNEON.cpp">
<ClCompile Include="arm64\Vif_UnpackNEON.cpp">
<ExcludedFromBuild Condition="'$(Platform)'!='ARM64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="arm64\RecStubs.cpp">
@@ -457,10 +457,10 @@
<ClCompile Include="Vif_Codes.cpp" />
<ClCompile Include="Vif_Transfer.cpp" />
<ClCompile Include="Vif_Unpack.cpp" />
<ClCompile Include="x86\newVif_Dynarec.cpp">
<ClCompile Include="x86\Vif_Dynarec.cpp">
<ExcludedFromBuild Condition="'$(Platform)'!='x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="x86\newVif_UnpackSSE.cpp">
<ClCompile Include="x86\Vif_UnpackSSE.cpp">
<ExcludedFromBuild Condition="'$(Platform)'!='x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="SPR.cpp" />
@@ -579,7 +579,7 @@
<ClInclude Include="arm64\AsmHelpers.h">
<ExcludedFromBuild Condition="'$(Platform)'!='ARM64'">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="arm64\newVif_UnpackNEON.h">
<ClInclude Include="arm64\Vif_UnpackNEON.h">
<ExcludedFromBuild Condition="'$(Platform)'!='ARM64'">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="CDVD\BlockdumpFileReader.h" />
@@ -898,7 +898,7 @@
<ClInclude Include="Vif_Dma.h" />
<ClInclude Include="Vif_Unpack.h" />
<ClInclude Include="x86\newVif.h" />
<ClInclude Include="x86\newVif_UnpackSSE.h" />
<ClInclude Include="x86\Vif_UnpackSSE.h" />
<ClInclude Include="SPR.h" />
<ClInclude Include="Gif.h" />
<ClInclude Include="R5900.h" />

View File

@@ -521,10 +521,10 @@
<ClCompile Include="Vif_Unpack.cpp">
<Filter>System\Ps2\EmotionEngine\DMAC\Vif\Unpack</Filter>
</ClCompile>
<ClCompile Include="x86\newVif_Dynarec.cpp">
<ClCompile Include="x86\Vif_Dynarec.cpp">
<Filter>System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif\Dynarec</Filter>
</ClCompile>
<ClCompile Include="x86\newVif_UnpackSSE.cpp">
<ClCompile Include="x86\Vif_UnpackSSE.cpp">
<Filter>System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif\Dynarec</Filter>
</ClCompile>
<ClCompile Include="SPR.cpp">
@@ -1425,10 +1425,10 @@
<ClCompile Include="GS\Renderers\SW\GSSetupPrimCodeGenerator.arm64.cpp">
<Filter>System\Ps2\GS\Renderers\Software</Filter>
</ClCompile>
<ClCompile Include="arm64\newVif_Dynarec.cpp">
<ClCompile Include="arm64\Vif_Dynarec.cpp">
<Filter>System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif\Dynarec\arm64</Filter>
</ClCompile>
<ClCompile Include="arm64\newVif_UnpackNEON.cpp">
<ClCompile Include="arm64\Vif_UnpackNEON.cpp">
<Filter>System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif\Dynarec\arm64</Filter>
</ClCompile>
<ClCompile Include="arm64\AsmHelpers.cpp">
@@ -1532,7 +1532,7 @@
<ClInclude Include="x86\newVif.h">
<Filter>System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif</Filter>
</ClInclude>
<ClInclude Include="x86\newVif_UnpackSSE.h">
<ClInclude Include="x86\Vif_UnpackSSE.h">
<Filter>System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif\Dynarec</Filter>
</ClInclude>
<ClInclude Include="SPR.h">
@@ -2387,7 +2387,7 @@
<ClInclude Include="GS\GSVector4i_arm64.h">
<Filter>System\Ps2\GS</Filter>
</ClInclude>
<ClInclude Include="arm64\newVif_UnpackNEON.h">
<ClInclude Include="arm64\Vif_UnpackNEON.h">
<Filter>System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif\Dynarec\arm64</Filter>
</ClInclude>
<ClInclude Include="arm64\AsmHelpers.h">

View File

@@ -1,7 +1,7 @@
// SPDX-FileCopyrightText: 2002-2024 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#include "newVif_UnpackSSE.h"
#include "Vif_UnpackSSE.h"
#include "MTVU.h"
#include "common/Perf.h"
#include "common/StringUtil.h"
@@ -46,9 +46,9 @@ __fi void VifUnpackSSE_Dynarec::SetMasks(int cS) const
const vifStruct& vif = MTVU_VifX;
//This could have ended up copying the row when there was no row to write.1810080
u32 m0 = vB.mask; //The actual mask example 0x03020100
u32 m3 = ((m0 & 0xaaaaaaaa) >> 1) & ~m0; //all the upper bits, so our example 0x01010000 & 0xFCFDFEFF = 0x00010000 just the cols (shifted right for maskmerge)
u32 m2 = (m0 & 0x55555555) & (~m0 >> 1); // 0x1000100 & 0xFE7EFF7F = 0x00000100 Just the row
const u32 m0 = vB.mask; //The actual mask example 0x03020100
const u32 m3 = ((m0 & 0xaaaaaaaa) >> 1) & ~m0; //all the upper bits, so our example 0x01010000 & 0xFCFDFEFF = 0x00010000 just the cols (shifted right for maskmerge)
const u32 m2 = (m0 & 0x55555555) & (~m0 >> 1); // 0x1000100 & 0xFE7EFF7F = 0x00000100 Just the row
if ((doMask && m2) || doMode)
{
@@ -73,7 +73,7 @@ void VifUnpackSSE_Dynarec::doMaskWrite(const xRegisterSSE& regX) const
pxAssertMsg(regX.Id <= 1, "Reg Overflow! XMM2 thru XMM6 are reserved for masking.");
const int cc = std::min(vCL, 3);
u32 m0 = (vB.mask >> (cc * 8)) & 0xff; //The actual mask example 0xE4 (protect, col, row, clear)
const u32 m0 = (vB.mask >> (cc * 8)) & 0xff; //The actual mask example 0xE4 (protect, col, row, clear)
u32 m3 = ((m0 & 0xaa) >> 1) & ~m0; //all the upper bits (cols shifted right) cancelling out any write protects 0x10
u32 m2 = (m0 & 0x55) & (~m0 >> 1); // all the lower bits (rows)cancelling out any write protects 0x04
u32 m4 = (m0 & ~((m3 << 1) | m2)) & 0x55; // = 0xC0 & 0x55 = 0x40 (for merge mask)
@@ -213,7 +213,9 @@ void VifUnpackSSE_Dynarec::ModUnpack(int upknum, bool PostOp)
case 3:
case 7:
case 11:
pxFailRel(fmt::format("Vpu/Vif - Invalid Unpack! [{}]", upknum).c_str());
// TODO: Needs hardware testing.
// Dynasty Warriors 5: Empire - Player 2 chose a character menu.
Console.Warning("Vpu/Vif: Invalid Unpack %d", upknum);
break;
}
}
@@ -315,8 +317,8 @@ static u16 dVifComputeLength(uint cl, uint wl, u8 num, bool isFill)
if (!isFill)
{
uint skipSize = (cl - wl) * 16;
uint blocks = (num + (wl - 1)) / wl; //Need to round up num's to calculate skip size correctly.
const uint skipSize = (cl - wl) * 16;
const uint blocks = (num + (wl - 1)) / wl; //Need to round up num's to calculate skip size correctly.
length += (blocks - 1) * skipSize;
}
@@ -368,15 +370,15 @@ _vifT __fi void dVifUnpack(const u8* data, bool isFill)
// in u32 (aka x86 register).
//
// Warning the order of data in hash_key/key0/key1 depends on the nVifBlock struct
u32 hash_key = (u32)(upkType & 0xFF) << 8 | (vifRegs.num & 0xFF);
const u32 hash_key = static_cast<u32>(upkType & 0xFF) << 8 | (vifRegs.num & 0xFF);
u32 key1 = ((u32)vifRegs.cycle.wl << 24) | ((u32)vifRegs.cycle.cl << 16) | ((u32)(vif.start_aligned & 0xFF) << 8) | ((u32)vifRegs.mode & 0xFF);
u32 key1 = (static_cast<u32>(vifRegs.cycle.wl) << 24) | (static_cast<u32>(vifRegs.cycle.cl) << 16) | (static_cast<u32>(vif.start_aligned & 0xFF) << 8) | (static_cast<u32>(vifRegs.mode) & 0xFF);
if ((upkType & 0xf) != 9)
key1 &= 0xFFFF01FF;
// Zero out the mask parameter if it's unused -- games leave random junk
// values here which cause false recblock cache misses.
u32 key0 = doMask ? vifRegs.mask : 0;
const u32 key0 = doMask ? vifRegs.mask : 0;
block.hash_key = hash_key;
block.key0 = key0;
@@ -395,7 +397,7 @@ _vifT __fi void dVifUnpack(const u8* data, bool isFill)
{ // Execute the block
const VURegs& VU = vuRegs[idx];
const uint vuMemLimit = idx ? 0x4000 : 0x1000;
constexpr uint vuMemLimit = idx ? 0x4000 : 0x1000;
u8* startmem = VU.Mem + (vif.tag.addr & (vuMemLimit - 0x10));
u8* endmem = VU.Mem + vuMemLimit;

View File

@@ -1,7 +1,7 @@
// SPDX-FileCopyrightText: 2002-2024 PCSX2 Dev Team
// SPDX-License-Identifier: GPL-3.0+
#include "newVif_UnpackSSE.h"
#include "Vif_UnpackSSE.h"
#include "common/Perf.h"
#include "fmt/core.h"
@@ -222,7 +222,7 @@ void VifUnpackSSE_Base::xUPK_V3_16() const
//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);
const int result = (((UnpkLoopIteration / 4) + 1 + (4 - IsAligned)) & 0x3);
if ((UnpkLoopIteration & 0x1) == 0 && result == 0)
xBLEND.PS(destReg, zeroReg, 0x8); //zero last word - tested on ps2
@@ -308,7 +308,9 @@ void VifUnpackSSE_Base::xUnpack(int upknum) const
case 3:
case 7:
case 11:
pxFailRel(fmt::format("Vpu/Vif - Invalid Unpack! [{}]", upknum).c_str());
// TODO: Needs hardware testing.
// Dynasty Warriors 5: Empire - Player 2 chose a character menu.
Console.Warning("Vpu/Vif: Invalid Unpack %d", upknum);
break;
}
}
@@ -328,7 +330,7 @@ VifUnpackSSE_Simple::VifUnpackSSE_Simple(bool usn_, bool domask_, int curCycle_)
void VifUnpackSSE_Simple::doMaskWrite(const xRegisterSSE& regX) const
{
xMOVAPS(xmm7, ptr[dstIndirect]);
int offX = std::min(curCycle, 3);
const int offX = std::min(curCycle, 3);
xPAND(regX, ptr32[nVifMask[0][offX]]);
xPAND(xmm7, ptr32[nVifMask[1][offX]]);
xPOR (regX, ptr32[nVifMask[2][offX]]);
@@ -347,7 +349,7 @@ static void nVifGen(int usn, int mask, int curCycle)
for (int i = 0; i < 16; ++i)
{
nVifCall& ucall(nVifUpk[((usnpart + maskpart + i) * 4) + curCycle]);
ucall = NULL;
ucall = nullptr;
if (nVifT[i] == 0)
continue;