Alex

PSX Undither

By Alex Free.

Patch PlayStation 1 games to turn off the dithering effect by either modifying the CD image directly, or generating GameShark codes from a DuckStation RAM dump.

Homepage Github

Table Of Contents

Downloads

Version 1.0 (7/23/2024)

Changes:



What Is Dithering?

Dithering is a graphical effect that exploit the blur of a CRT set in combination with a composite signal in order to create transparency or texture related detail/color illusion effects. Most PS1 games were explicitly designed with the expected setup of a CRT TV using a composite signal (be that S-Video or standard AV RCA cables) in mind. Some games even heavily depend on dithering (i.e. Silent Hill) to hide color banding.

PS1 Console models with the original dual-ported VRAM GPU (SCPH-1000, early SCPH-1001, early SCPH-1002, and early SCPH-3000) have a less advanced dithering capability then ones with the newer SGRAM GPU. This may make disabling of dithering cause less of a visual change on these older console models with the original GPU design, according to no Martin Korth of No $ fame.

Without a CRT TV dithering can make some games appear less sharp and nosier (an opinion shared by many, but not a fact), causing a non-intentional checkerboard pattern on textures and or a noticeable drop in clarity on TV’s using Plasma, LCD, OLED, or similar non-CRT-based screen technologies. Dithering is usually lost in translation when using emulators (varies from emulator to emulator), however one way to see it is to use DuckStation with the software renderer:

Dither ON (DuckStation Software Renderer):

tekken 3 dither on

(Full Screen Image)

Dither OFF (DuckStation Software Renderer):

tekken 3 dither off

(Full Screen Image)

Note: the floor, the background, the character models.

For more info on PS1 dithering, please see ConsoleMods Wiki: PS1 De-dithering Patch and PlayStation 1 Dithering Removal - by Chris Covell. The latter contains great side by side comparison images and further technical information. There are also comparisons on YouTube.

How Does This Work?

For games that do not bake dithering into the texture themselves, a method to turn off the dither flag in GPU related code was first documented by Chris Corvell. The user user cr4zymanz0r then posted “Disabling PS1 hardware dithering (better looking 2D) ”, which led to him developing a CD image patcher named PS1 De-Dither to disable dithering using Chris Covell’s methods.

The cr4zymanz0r patcher is a batch script calling sed and ECCscan Windows binaries. So when I found it I became excited immediately to write my own patcher, with additional features and improvements such as:

Usage

psxund <input file>

<input file> Can be either the data track bin file of a PlayStation 1 disc image (the sole .bin file or the .bin file named something like track 01), or a DuckStation RAM dump file.

There are 2 ways you can interact with the patcher:

Drag n’ Drop

On Windows and most Linux distributions, you can simply drag the input file on top of the psxund.exe (Windows releases) or psxund (linux releases) executable file found in the portable releases.

Traditional CLI

On Windows execute psxund.exe with the input file as an argument, i.e. psxund.exe <input file> using cmd.exe, command.com or similar shell. On Linux execute ./psxund <input file> found in the portable release using the Terminal application. Alternatively if you have install the .deb package file psxund is available as a global user command to the system, so just psxund <input file> works fine.

Disc Image Patching Examples

ridge racer 1

ridge racer 2

medievil 1

medievil 2

Generating GameShark Codes

1) Download DuckStation, and make sure the Debug menu is enabled in the settings. Start the target game.

ridge racer gs 1

2) Use the Debug menu to Dump RAM.

ridge racer gs 2

ridge racer gs 3

3) Use the RAM dump as the input file for PSX Undither:

ridge racer gs 4

ridge racer gs 5

One way to apply these codes is Tonyhax International’s GameShark feature.

License

PSX Undither is released as open source software under the GNU GPLv2 license (required by the use of CDRDAO code for the EDC/ECC regeneration functions). Please see the file license.md in each release for more info. In the future, I’d like to dual license this 3-BSD (my code), and use a CDDL or MIT license to cover the EDC/ECC code.

Credits