Includes some small fixes on CMake, such as prettier status messages,
host and target arch detection (taken from PCSX2), and various other
small errors.
This commit reflects mostly changes that happened in upstream since the last sync.
Commit messages in upstream are lacking information. Most important changes are
commented below, the rest of them are either formating or just trivial stuff.
Memory viewer, invalidate dynarec
gui/DebugMemory.c
libpcsxcore/cdrom.c
libpcsxcore/gpu.c
libpcsxcore/misc.c
libpcsxcore/psxdma.c
Load binary files and psx executables
libpcsxcore/misc.c
libpcsxcore/misc.h
libpcsxcore/plugin.c
libpcsxcore/plugin.h
Support for psxida
libpcsxcore/debug.c
libpcsxcore/r3000a.c
plugins/bladesio1/connection.c
disable loading save states with digits
gui/Plugin.c
Fix psxDIV in interpreter
libpcsxcore/psxinterpreter.c
The previous implementation was doing file paths manipulation deep inside sio.c, and it
was hardcoding windows style paths. This was breaking on linux in more than one ways and
it is incompatible with the dynamic apppath handling from codeplex branch. Moreover,
SaveMcd and LoadMcd functions already take memory card file paths as arguments,
making any such logic redundant.
This patch rewrites the global Config.Mcd# variables during game startup, which makes it
more compatible across all platforms. It also has the added benefit that it doesn't update
the configuration file with the each game's memory cards, i.e. at PCSXR startup the default
memory cards will be loaded.
- Sign extend values read using LH
- Add conversion functions to represent Signed/Unsigned 16-bit ranges
- Add overflow and truncation functions for 16-bit ranges
- Sign extend imm value in ADD(U)
- Add component overflow and truncation to ADD/SUB functions
- Construct new value in logic operators where result using inputs is undefined
- Return a valid W component from logic operators (if either input has one)
- Compare against high value (y), then low value (x) in less than operators
- Use doubles and implement overflow for Multiply operations to try to increase accuracy
- Use unsigned values in both MUL and DIV operations to make output as accurate as possible
- Implement several variants of shift operators. Trying both arithmetically correct and more analytical approaches with varying success.
Debug updates
- Added ability to force all values to be equal to low precision values before operating on them
- Added feature to test output of operations against a tolerance and print only those which fail
GPU updates
- Colour vertices with valid XY coordinates but no W as cyan to make them easier to spot
- Remove cyan colouring for stale vertices (wasn't useful)
- Added ability to skip debug rendering when needed (like seeing the output of offscreen rendering applied to a sprite).
- Added new mode which shows primitive type
Validity of a pgxp value can now be set for any of four components using individual bit flags. This also allows the potential expansion of more flag data for each component.
- Change processor transfer functions to use take both source and destination values
- Add enum values to all debug functions to double check instructions are correct
- Temporarily store instruction codes in interpreter wrappers as these are sometimes changed by branching
- Change recompiler wrapper functions to store register values in global variables in case they're changed by the original function
- Reset CPU on switching between interpret and recompiler
- Call wrapped functions even when tests fail
- Handle retrieved data overwriting address in load operations
- Change PGXP integration to use wrapper functions
- Use modified function lookup tables to call wrappers or default funnctions based on mode
- Implement wrappers for interpreter too, recompiler sometimes calls interpreter functions
- Add UI elements for selecting CPU modes
- Only call precision version of NCLIP in modes where there are not going to be stale vertices in GTE registers
- Added support for CP0 co-processor functions
- Improve support for CPU functions (still broken in many games)
- Improved debug output to show values for inputs before they're modified
GPU plugin
- Ignore stale vertices (occurs when CPU mode no longer writes to memory)
- Add Cyan vertex colouring for stale vertices
- SH: Use appropriate masking when validating 16-bit values before storing
- Shift operations: on shifts larger than 16bits, first shift elements along, then apply arithmetic for remainder
- Restructured project to base interface on PSX instructions
- Support for all relevant CPU arithmetic and logic instructions
- Debug output available via deferred PGXP calls
- Remove most dependencies on PCSXR
- Still very much a work in progress (lots of errors)
- Add extra debug information to GPU plugin (w values)