mirror of
https://github.com/PCSX2/pcsx2.git
synced 2026-01-31 01:15:24 +01:00
Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
719063e996 | ||
|
|
5d40f36fa8 | ||
|
|
31ffcfc920 | ||
|
|
c9642b70f6 | ||
|
|
849fa57bf6 | ||
|
|
2c95ef76f1 | ||
|
|
4d9cb885b2 | ||
|
|
e375f98f7a | ||
|
|
1b80f3aea2 | ||
|
|
b0496645f1 | ||
|
|
235cb13647 | ||
|
|
504dd9f513 | ||
|
|
e3fedf1676 | ||
|
|
f113a51783 | ||
|
|
f69d5835b8 | ||
|
|
8e8277c0c9 | ||
|
|
c6c4eaf31c | ||
|
|
6324722b65 | ||
|
|
efd8c9ec69 |
@@ -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"
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 '{}'.</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>
|
||||
@@ -5036,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 '%1'.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -18279,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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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: ";
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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" />
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user