Q1 2021 Progress Report

Authored By:  lightningterror

Core Improvements #

#4115 PAD/Counters: MakeVSync Queue Adjustable in the UI. Extra Pad Update. By refractionpcsx2

New UI option (ini option has been there a while) so users can choose between a little bit extra performance or reduced input lag.

Also added the PAD Update to the VSync call in Counters as it seemed to reduce input lag marginally.

#4066 IPU: Return Contentsof the Bottom of the FIFO in CMD Except FDEC/VDEC. By refractionpcsx2

This is based on the work by @PS1-Rockin on Dobiestation but modified based on the theory that it always returns the first 32bits of the FIFO unless an FDEC/VDEC command is executed, however FDEC is basically doing this anyway, but VDEC returns decoded information.

Fixed videos for probably all broken EA games, but namely:

  • F1 2001
  • F1 2002
  • Neo Contra
  • Shox
  • Theme Park Rollercoaster/World

#4225 IPU: Fill Input FIFOon Command End Ready for Next Command. By refractionpcsx2

Dance Summit 2001: So basically what the game does is it does some IPU stuff, but the DMA is left with 1 QWC left to be read on the DMA, on the hardware this will normally be flushed in to the FIFO. The game then does a FIFO reset (To get rid of it) then starts another DMA. The problem we have is because we still had the DMA pending for 1 QWC, it ignored the new DMA start and the IPU would hang up waiting for data to be fed in. This PR resolves that problem.

Test Drive: Also added DMA 4 (To IPU) being flushed if BCLR is called without first stopping the DMA.

Set the Picture type on VDEC to I-Picture if set to 0 in the IPU_CTRL, this fixes a bunch of Eyetoy games which incorrectly set this register.

  • Fixes EyeToy Play(1-3).
  • Fixes Bakufuu Slash!! Kizna Arashi.
  • Fixes Kaiketsu Zorro Mezase! SIF0 and SIF1 stall control.
  • Fixes Test Drive: IPU hang in middle of Event 5.

DEV9 #

#4062 Support 16bit Reads/Writes to SPD_R_PIO_DATA & SPD_R_PIO_DIR By TheLastRar

This improves #3192 , the online beta now sends a DHCP Discover packet, although it appears to be invalid.

#4059 Generate Unique MAC for TAP By TheLastRar

An unique MAC is needed for full compatibility with XLink Kai.

Uses a method similar to what was done for PCAP.

#3932 Add HDDemulation By TheLastRar

#4214 Merge _DEV9*() Functions Into *Net(), and Check EthEnable Before Calling InitNet() By TheLastRar

Previously, the ethEnable config value was not checked before starting network RX net thread.

#4219 Fix Crash on Linux When We Fail to Open the Adapter By TheLastRar

#4149 Re-Add PCAP(both Bridged and Switched) on Windows By TheLastRar


#4314 #4045 Add CHD Compression Format Support By rtissera SleepyMan siddhartha77

#4146 Increase Buffer for DVD_LAYER_DESCRIPTOR. By refractionpcsx2

#4236 Implement Mechacon Command 0xEF By F0bes

microVU #

#ee07f8 MicroVU: Implement Overflow Checks By refractionpcsx2

Fixes Superman Returns.

#413fd0 MicroVU: Fix Jump Caching When Using DoJumpAsSameProgram By refractionpcsx2

#c9bc6e MicroVU: Fix P Flag Instance on Ebit By refractionpcsx2

Also small fix for flag statuses on M-Bit on Branch.

#0f7044 MicroVU: Removed Full Flag Optimisations By refractionpcsx2

They were unused, broken and cluttering up the code.

#4198 Fix Esinopcode By kozarovv

Someone accidentally used bad function to analyze ESIN opcode on microVU, that generated bad values due to wrong register field being used.

Fixes X2 - Wolverine’s Revenge.

#f9d96f MicroVU: Move the Overflow Flags to the Correct Position By refractionpcsx2


#ddffd9 VIF: Fix MPG VU Address Wrapping By refractionpcsx2

Fixes Boogie.

#899915 VIF: Clean Up Some Old (Incorrect) Code By refractionpcsx2

SPU2 #

#4074 SPU2: Attempt 96khz Sample Rate if 48khz Fails (WASAPI). By refractionpcsx2

WASAPI is terrible and doesn’t support sample rate conversion in shared (normal) mode and requires exclusive mode.

This PR basically attempts to double the PS2 sample rate of 48khz to 96khz as this tends to be the other windows default. If this fails it will put a log message to say you need to use Exclusive mode.

Note: When using PS1 game emulation you will need to use exclusive mode, nothing I can do about this (44.1khz doesn’t divide nicely from 48khz or 96khz).

#4057 #4085 #f1e44b SPU2: Improve DMA/IRQ Timing By refractionpcsx2

  • Fixes The Simple 2000 Series Vol 51 - The Senkan (AKA The Battleship) which was not booting with anything but ZeroSPU2
  • Fixes The Simpsons, problem was due to an ADMA refill bug.

#f5d890 SPU2: Update Voices Before DMA Reads, Reset OutPos on Reset By refractionpcsx2

Improves the booting reliability of GTA VC, especially on consecutive boots without closing the emulator.

#4134 Switch to a More Accurate Noise Algorithm By Ziemas

This algorithm comes from PCSX-R and is an implementation of Dr. Hell’s research.

The previous implementation was a simple LFSR and did not use the provided noise clock from the ATTR register.

#4171 SPU2: Improve ADMA Behaviour/Timing. By refractionpcsx2

  • Hopefully improves the crackling in burnout 3.
  • Fixes music looping in Ratatouille.
  • Fixes Vexx clicking sound (Partial ADMA transfers).
  • Fixes the Dolby Pro Logic video missing sound in Primal (Partial ADMA transfers).
  • Fixes Splinter Cell panning audio problem and high pitched noises in cut-scenes.
  • Fixes Myst 3 panning audio problem.
  • Fixes Dynasty Warriors 5 stuttering videos when Dolby is enabled.

#e03949 SPU2: Tighten AutoDMA IRQ Timing By refractionpcsx2

Fixes games which monitor the MADR while transferring.

Fixes Tom & Jerry in War of the Whiskers jumpy music.

#4210 Adjust Interpolation Implementations By Ziemas

These seems to be have been adjusted to match the output of catmull-rom which is really the one in the wrong by being twice as loud.

As a result of the interpolated output being at a reasonable level we can use ApplyVolume to apply the ADSR volume.

#4203 SPU2: Make Sure Cache Hits Match Previous Block Decoded Samples. By refractionpcsx2

Caching blocks of ADPCM is a bit sketchy because the previous samples (which it uses to generate the new ones) can change depending on if it’s the start of the voice on or if it has looped around, so you can end up with blips and glitches in the sample stream, this should avoid that problem whilst not making the cache completely unusable.

Should get rid of clicking and popping noises in loops samples.

Fixes Sphinx and the Cursed Mummy sound distortion.

Also fixes remaining blips in Vexx.

#4195 Add Gaussian Interpolation By Ziemas

This implements the actual SPU interpolation as documented by nocash.

#4226 Resample Reverb Input/Output By Ziemas

The reverb runs at half the sample rate of the rest of the SPU so a change of sample rate is required. The way this is currently done is by decimating when down-sampling and duplicating samples when up-sampling without doing any filtering.

This adds proper filtering to this process, the filter coefficients are from Mednafen but we think they were originally found by Neill Corlett.

#f42bef SPU2: Try to Recover DMA Pointer After Savestate Load By refractionpcsx2

#4186 SPU2: Ignore LSAL/H Writes After Key on if Voice Sets Loop Point. By refractionpcsx2

Fixes behaviour with loop address writes within 4T’s of a voice keying on which is what the old Delay Cycles tried to address, if the voice sets its own loop point the write from hardware is ignored.

Fixes Mafia music loops.

#ce8047 Reset IRQ Status When Swapping Game in Case It Got Set Previously By refractionpcsx2

Memory Card #

#4113 Memorycards: Fix Out of Bounds Array Access in Folder Memcards. By Ziemas

Don’t keep the DataClusterInUse bit when accessing the next cluster.

With this folder memcards work on 64bit.

#2995 Memorycards: Add Support for OpenPS2Loader VirtualMemoryCards. By KrossX

Adds some basic support to OPL VMC files (.bin) that use 512 bytes pages.

Normal pages are 528 bytes long, those extra 16 bytes contain 12 bytes of ECC data.

Debuggers #

#4252 Debugger: Add “Go to Address” for Both Disasm and Memory View Context Menus. By F0bes

#4289 Debugger: Require Emulator Start Before Enabling Break/Run Button. By F0bes

#4326 #4287 Misc: Support More BIOSes for the Debugger Thread View. By F0bes

#4271 GS/Core: Implement the New Generation of GS Debugger. By GovanifY

This is a full in-core reimplementation of GSDumpGUI. It will be used for GS Debugging once GSdx is merged in to the core.

One step closer in to merging GSdx in to the core.

Misc core #

#3011 Implements IOPbreakpoints By monster860

#4234 Execute Breakpoints for the Interpreter By F0bes

#4205 Don’t Destroy() Modals By TellowKrinkle

On macOS it prevents the parent window from regaining focus. By

#4223 PGIF: PS1DRV Handlesbit 28 of GPU Status Register, Not PGIF. By Nobbs66

Fixes several PSX games:

  • Castlevania: Symphony of the Night
  • Twisted Metal
  • Pink Panther

#c695a7 USB: Usb-Mic: Send 1ms Worth of Samples for 48kHz and 8kHz Sample Rates By jackun

#4310 USB: Improve Force Feedback Test So It Doesn’t Block UI. By CookiePLMonster

This modifies DirectInput USB Force Feedback test not to block the UI. Instead of performing the test synchronously on the UI thread, a timer gets created which advances the test every half a second.

#4232 Eyetoy Mirroring By Florin9doi

  • Fixes Bakufuu Slash! Kizna Arashi.

#4250 Core: Preserve Read Only Bits in the COP0 Config Register. By F0bes

The read-only bits in question are the Instruction cache size (IC) and the Data cache size (DC).

Before this MTC0 would freely write to the entire config register.

#4123 Core: Implement Proper %S Handling for Syscall 117 (0x75). By F0bes

This makes the syscall iterate through the format string which can be considered “slow” but this syscall is only going to be used for debugging purposes.

#4255 Core: Added Support for Little Endian Data for Patches. By Tupelov

Allows users to use the leshort, leword, and ledouble datatypes inside their patches. Using these datatypes ensures that values in the memory view appear the same as the values in the patch.

This was made with easing patch development in mind as now developers can make patches without having to reverse endianness. This is especially useful when using programs like ghidra that displays instructions in little endian.

GSdx Improvements #

#4206 GSdx-Hw: Implement per Pixel Alpha Blending (PABE). By lightningterror tadanokojin

Improves shadow/lighting effects on certain games, both HW renderers support the feature.

So far we have a few games that see an improvement:

Fixes Strawberry Shortcake character shadow/lighting.

Fixes Cartoon Network Racing shadow/lighting.

And for those that enjoy some image comparisons:

Cartoon Network Racing: Before -> After


Strawberry Shortcake: Before -> After


Misc GSdx #

#3973 Some GUI Changes By RedDevilus

Changed some options:

  • Large framebuffer renamed into conservative framebuffer.
  • Dithering context menu re-ordered.
  • 8-bit textures renamed into GPU Palette Conversion.

#dabfff GSdx-Hw: Get Rid of Some Extra Branches/Conditions in DATE Selection By lightningterror

#4182 Fix Alignment of Font By RedDevilus

Should fix invisible characters.

#4188 #4261 #4320 GSdx: Switch to Unicode By GovanifY F0bes turtleli

This brings GSdx one step closer to be merged with the core.

#4270 GSdx-D3d11: Cleanup Gsdevice11.cpp Warnings Reported on Codacy. By lightningterror

#4131 #4288 Use Constexpr to Initialize AVX Vectors Without AVX Instructions By TellowKrinkle

List of removed CRC hacks:

TAS (Tool Assisted Speedrun) Utility Improvements #

#4019 Recording: Reorganize and Realign InputRecordingControls. By sonicfind

#4060 Recording: GUI Improvements Around Savestate-Based Input Recordings. By sonicfind

IPC (Interprocess Communication) Improvements #

#4262 Socket Re-Usability By GovanifY

This avoids port overfills on windows, while increasing performance substantially on platforms that do port overfills.

#4267 Add a Slot System By GovanifY

This allows multiple emulator sessions to run at the same time and windows user to configure their used port to their preferred one.

#4272 Fix Type Polymorphism & Checkbox By GovanifY

Some versions of wxWidgets are more sensitive than others on dynamic casting, so instead I used a C style cast to prevent any crash.

GameDB Improvements #

#4b71dd GameDB: Remove Patches for Quake 3 Videos, No Longer Required By refractionpcsx2

#7512c0 GameDB: Removed No Longer Required FMV Skip Patches By refractionpcsx2

List of removed patches for games include:

  • BDFL Manager 2005 (EU)
  • F1 Racing Championship (Japan and EU regions)
  • Paris-Dakar Rally (EU)

#4259 GameDB: Add Improved Xenosaga Save Crash Prevention Patch. By RedPanda4552

Updated patch rewrites a chunk of game code to decrement JPEG quality, rather than just immediately floor it. Allows thumbnails to still look kind of okay.

#4187 #4249 Add Patchesfor KOF Series By kozarovv

Fixes depth precision, game fills upper 16bits of depth with 0xFFFF. This results in a really high 32 bit value which is then converted to float because both HW and SW renderers lack double precision the lower 16 bits of the initial 32 bit value lose precision.

Misc Improvements #

#3999 Add GHC Filesystem By kenshen112

This adds GHC filesystem to pcsx2 common utilities.

#4073 3rdparty: PortAudio: Upgrade PortAudio to Latest Master. By refractionpcsx2

#4277 3rdparty: Update Libsamplerate to 0.2.1. By refractionpcsx2

#3991 Keyboard Shortcuts Strings By RedDevilus

Based on https://wiki.pcsx2.net/Hotkeys .

#4216 Fix Compilation in Path With Spaces By laenion

#4283 Fix Various Debug Tools Codacy Complaints By F0bes

#4010 Fix Paths on MacOS By TellowKrinkle

MacOS was using linux paths rather than wx’s macOS-specific subclass, which doesn’t match how the app is installed in macOS (all paths should be relative to the executable).

Also adds steps to copy missing resources into the app bundle.

#4243 Purge GSNull Plugin Entirely By rtissera

The plugin is obsolete, GSdx already provides Null(no display functionality).

#4201 GUI: Prevent Vsync Setting From Being Wiped on Preset Changes. By RedPanda4552

Reapplies the currently applied vsync mode when changing preset options.

#4230 Remove Unused Code By MrCK1

#4244 Avoid Presets From Resetting VsyncQueueSize By KrossX

The VsyncQueueSize setting is currently affected by presets, would revert to default on start as well. Since the setting is not grayed out, this change makes it be unaffected.

#3556 GUI: If Available, Enable Menu Option to Load Backup Savestate When a Game Is First Launched By xTVaser

#4306 GUI: Visually Indicate the Current Savestate Slot in the Load/Save Menu By xTVaser

#4036 Capture: Optimizations With File Names, SPU2 Recording, and Capture Menu Gui By sonicfind

Addresses some oversights involving transferring a file name between the GS & SPU2 recording setups.

Adds a new audio toggle setting that allows a user to control whether a WAV file should be generated alongside a video recording. In doing this, behavior for when SPU2 recording fails to be setup becomes more defined and consistent.

Additionally, F12 will now route to sMainFrame if GUI is active as to keep the capture menu GUI accurate to the current state.

Conclusion #

And that’s all from us, see you next time in our 2021 Q2 Report!

Metadata #

2021 Q1:
(dev818 to dev1163) (2020-01-01 - 2020-03-31)