10 months agodrc: something works on arm64
notaz [Thu, 11 Nov 2021 00:32:02 +0000 (02:32 +0200)]
drc: something works on arm64

10 months agodrc: adjust bogus looking check
notaz [Wed, 10 Nov 2021 21:44:25 +0000 (23:44 +0200)]
drc: adjust bogus looking check

not really sure what's going on, but at the start of
"Pass 3 - Register allocation" zero reg allocations are removed,
so "regmap_pre[i+1][hr] != regs[i].regmap[hr]" assert will not hold.

10 months agodrc: arm64 wip
notaz [Mon, 8 Nov 2021 22:26:05 +0000 (22:26 +0000)]
drc: arm64 wip

10 months agodrc: some more general cleanup
notaz [Fri, 5 Nov 2021 22:19:16 +0000 (00:19 +0200)]
drc: some more general cleanup

10 months agodrc: arm64 wip
notaz [Wed, 3 Nov 2021 23:37:59 +0000 (23:37 +0000)]
drc: arm64 wip

10 months agodrc: starting arm64 support
notaz [Tue, 2 Nov 2021 23:08:49 +0000 (23:08 +0000)]
drc: starting arm64 support

mostly stubs only for now

10 months agodrc: move some stuff out of assem_arm for reuse
notaz [Tue, 2 Nov 2021 15:47:56 +0000 (17:47 +0200)]
drc: move some stuff out of assem_arm for reuse

10 months agodrc: remove yet yet more n64 stuff
notaz [Tue, 2 Nov 2021 15:12:21 +0000 (17:12 +0200)]
drc: remove yet yet more n64 stuff

10 months agodrc: remove yet more n64 stuff
notaz [Tue, 2 Nov 2021 13:50:03 +0000 (15:50 +0200)]
drc: remove yet more n64 stuff

10 months agodrc: rework for 64bit, part 4
notaz [Mon, 1 Nov 2021 22:44:56 +0000 (00:44 +0200)]
drc: rework for 64bit, part 4

10 months agodrc: remove some leftover n64-only stuff
notaz [Mon, 1 Nov 2021 22:42:09 +0000 (00:42 +0200)]
drc: remove some leftover n64-only stuff

quite sure some more is left, but it's not easy to separate out

10 months agodrc: rework for 64bit, part 3
notaz [Mon, 1 Nov 2021 19:57:53 +0000 (21:57 +0200)]
drc: rework for 64bit, part 3

10 months agodrc: remove old debug code
notaz [Mon, 1 Nov 2021 16:14:23 +0000 (18:14 +0200)]
drc: remove old debug code

it just makes arm64 conversion harder

10 months agodrc: convert 'stubs' to a struct with proper types (rework part 2)
notaz [Mon, 1 Nov 2021 14:55:04 +0000 (16:55 +0200)]
drc: convert 'stubs' to a struct with proper types (rework part 2)

10 months agodrc: rework for 64bit, part 1
notaz [Sun, 31 Oct 2021 23:30:34 +0000 (01:30 +0200)]
drc: rework for 64bit, part 1

11 months agosome drc debug patches
notaz [Sun, 31 Oct 2021 17:12:50 +0000 (19:12 +0200)]
some drc debug patches

11 months agosome drc debug helpers
notaz [Sun, 31 Oct 2021 16:33:40 +0000 (18:33 +0200)]
some drc debug helpers

11 months agosome cleanup to reduce confusion
notaz [Sun, 31 Oct 2021 16:20:57 +0000 (18:20 +0200)]
some cleanup to reduce confusion

11 months agoupdate libpicofe
notaz [Sun, 31 Oct 2021 15:23:53 +0000 (17:23 +0200)]
update libpicofe

11 months agoassorted warning fixes
notaz [Sun, 31 Oct 2021 12:40:30 +0000 (14:40 +0200)]
assorted warning fixes

11 months agoci-linux.yml: also need submodules
notaz [Fri, 29 Oct 2021 21:08:27 +0000 (00:08 +0300)]
ci-linux.yml: also need submodules

11 months agotry to migrate from Travis CI to GitHub Actions
notaz [Fri, 29 Oct 2021 20:57:05 +0000 (23:57 +0300)]
try to migrate from Travis CI to GitHub Actions

11 months agoRemove CdlGetlocP hack. (#235)
gameblabla [Fri, 29 Oct 2021 20:22:25 +0000 (20:22 +0000)]
Remove CdlGetlocP hack. (#235)

This was added back in 2013 or so in PCSX Rearmed
and according to some tests against Tomb Raider 1 (which
is affected by the GetLocP code),
it works properly without this hack.

So let's just remove it as we are now doing it properly.
(Besides, Duckstation and mednafen don't have this hack)

11 months agoMove CdlSetLoc to CdrInterrupt and return invalid arg error (#234)
gameblabla [Fri, 29 Oct 2021 20:09:41 +0000 (20:09 +0000)]
Move CdlSetLoc to CdrInterrupt and return invalid arg error (#234)

So far,
i could only find Simple 1500 Series Vol. 31 - The Sound Novel to be affected by this.
In Duckstation, this was causing extra delays without it.
However in our case, this doesn't seem to be the case and i couldn't
find much find about it.

11 months agoNew, separate GPU plugin based on Unai. (#233)
gameblabla [Fri, 29 Oct 2021 20:03:27 +0000 (20:03 +0000)]
New, separate GPU plugin based on Unai. (#233)

This new plugin is based on Unai but is more accurate and fixes a few issues.
According to some tests on real hardware :
fps      old new
spyro1   130 112
tekken3   95  68
nfs3     107  91

Because of this, it was decided to make it separate from the "Old" Unai.

Note that this doesn't have the threading changes from libretro's fork yet :
this will be for another PR.

Co-authored-by: negativeExponent <negativeExponent@users.noreply.github.com>
Co-authored-by: Justin Weiss <justin@justinweiss.com>
Co-authored-by: senquack <dansilsby@gmail.com>
11 months agoHack fix for CDROM timings regression (Castlevania, Megaman X4) (#231)
gameblabla [Fri, 29 Oct 2021 20:00:59 +0000 (20:00 +0000)]
Hack fix for CDROM timings regression (Castlevania, Megaman X4) (#231)

See https://github.com/libretro/pcsx_rearmed/issues/557.

The CDROM timings changes from Redux fixed a bunch of games
(Crash Team Racing's intro no longer cuts off too early,
Worms Pinball gets further instead of just crashing,
FF8 Lunar Cry FMV no longer crashes etc...)
but it broke the other games that relied on ADPCM samples,
which is most noticeable in games like Castlevania or Megaman X4.

According to nicolasnoble, we should not cause a delay if seek destination is c>
However, this would require a lot more work so in the meantime,
let's do just that and add a comment.

11 months agoFix CD volume issue in Star Wars - Dark Forces. (#232)
gameblabla [Mon, 18 Oct 2021 20:20:09 +0000 (20:20 +0000)]
Fix CD volume issue in Star Wars - Dark Forces. (#232)

CD Volume is 16-bits signed, not unsigned.
Otherwise in Star Wars Dark Forces :
If you set the volume slider to the minimum value allowed
for the CD Volume, it will overflow and wrap around (to the maximum volume).

11 months agoFix oversight for icache emulation code. (#226)
gameblabla [Sun, 10 Oct 2021 15:30:59 +0000 (15:30 +0000)]
Fix oversight for icache emulation code. (#226)

This fixes Armored Core when being run in icache emulation mode.
This was a mistake on my part as i forgot about that piece of code.

11 months agocdriso: clean up after cdda thread removal
notaz [Sat, 2 Oct 2021 18:37:51 +0000 (21:37 +0300)]
cdriso: clean up after cdda thread removal

11 months agoMerge several fixes from PCSX Redux and adjust delay for SetLocPending. (#221)
gameblabla [Sat, 2 Oct 2021 17:51:48 +0000 (17:51 +0000)]
Merge several fixes from PCSX Redux and adjust delay for SetLocPending. (#221)

There's a game, PoPoLoCrois Monogatari II, that unfortunately locks up
during the intro screen.
I should have known that code was wrong as Mednafen did not have anything
like that in their code either, hence the confusion.

Their fix however still don't include the Driver fix so the game would still
crash if we don't have the "+ Seektime".
To be honest, i'm not sure why the PCSX Reloaded team did it this way...

I noticed that the fastforward and fastbackward code was pretty much unused.
Looked at Mednafen and all they do is just adjust the cursector
and make sure that fastword & backword trigger the AUTO_REPORT code
so i did the latter.

Co-authored-by: Nicolas Noble <nicolasnoble@users.noreply.github.com>
11 months agoProper CDDA fix for Fantastic Pinball Kyuutenkai (and remove CDDA playthread as it...
gameblabla [Sat, 2 Oct 2021 15:51:24 +0000 (15:51 +0000)]
Proper CDDA fix for Fantastic Pinball Kyuutenkai (and remove CDDA playthread as it causes issues) (#215)

Part of the CDROM related changes were taken from PCSX Reloaded.

11 months agoOne more on odd lines for PAL HSYNC (#224)
gameblabla [Sat, 2 Oct 2021 14:53:16 +0000 (14:53 +0000)]
One more on odd lines for PAL HSYNC (#224)

As done by Duckstation

11 months agoFix for Armored Core misdetecting a Link cable being detected (#223)
gameblabla [Sat, 2 Oct 2021 14:39:44 +0000 (14:39 +0000)]
Fix for Armored Core misdetecting a Link cable being detected (#223)

For some reason, the game detects that a link cable is plugged in
and disables the local multiplayer as a result.

Thanks @sony for fixing the issue in their PS Classic branch, a
simplier fix is done here instead.

Co-authored-by: Sony
11 months agoIcache emulation from PCSX Redux + Senquack changes from PCSX4ALL (#198)
gameblabla [Sat, 2 Oct 2021 13:41:42 +0000 (13:41 +0000)]
Icache emulation from PCSX Redux + Senquack changes from PCSX4ALL (#198)

* Merge Icache emulation from PCSX Redux

See (Redux) :

See original icache implementation (mirror of PCSX Reloaded):

Without icache emulation, F1 2001 will greatly misbehave :
if you accelerate, the car will go around like crazy.
With icache emulation, it works as intended.

Our code is slightly different from theirs as i found out that
having the icache arrays in psxregs would cause crashes so instead
what i'm doing is to taking them out of there and only allocating them
on the heap (due to their great size).

Co-authored-by: Nicolas Noble <nicolasnoble@users.noreply.github.com>
* Fix issues with BREAK and some interpreter commands. Fixes F1 2000.

Note that the game is very sensible to timing issues when it comes to the CDROM
That will be for a separate commit however.

* Culling off cache bits from the hardware addresses.

Based on those PRs from PCSX-Redux :

Co-authored-by: Nicolas Noble <nicolasnoble@users.noreply.github.com>
* Slightly better "open bus" behavior

OG commit is here from PCSX Redux :

Co-authored-by: Nicolas Noble <nicolasnoble@users.noreply.github.com>
* [Interpreter] Link even if branch is not taken in BGEZAL/BLTZAL

Source :

Co-authored-by: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com>
Co-authored-by: Nicolas Noble <nicolasnoble@users.noreply.github.com>
11 months agoFix detection of some CDs such as Wild Arms USA detected as a PAL game. (#222)
gameblabla [Sat, 2 Oct 2021 13:23:27 +0000 (13:23 +0000)]
Fix detection of some CDs such as Wild Arms USA detected as a PAL game. (#222)

I was able to confirm it fixed the issue for Wild Arms.

Co-authored-by: bardeci <37640967+bardeci@users.noreply.github.com>
12 months agopsxmem: Writes to PIO Expansion area have no effect. (#220)
gameblabla [Mon, 27 Sep 2021 19:09:52 +0000 (19:09 +0000)]
psxmem: Writes to PIO Expansion area have no effect. (#220)

This is related to the Tetris with Card Captor fix a while back.
However, i forgot to merge this one as well related to writes,
even though it was not really necessary to fix that particular game.

Co-authored-by: senquack <dansilsby@gmail.com>
12 months agoARM build fixes. (Should fix building on ARM/GCC10) (#210)
gameblabla [Thu, 9 Sep 2021 20:20:54 +0000 (20:20 +0000)]
ARM build fixes. (Should fix building on ARM/GCC10) (#210)

This fixes building on GCC10 and ARM.
Note that in my previous HLE patch, i forgot to export psxNULL
so it was failling to compile it... Oops.

Co-authored-by: negativeExponent <negativeExponent@users.noreply.github.com>
13 months agoImplement fix from Mednafen for Fantastic Pinball Kyuutenkai. (#206)
gameblabla [Mon, 30 Aug 2021 22:34:02 +0000 (22:34 +0000)]
Implement fix from Mednafen for Fantastic Pinball Kyuutenkai. (#206)

This is taken from the way Mednafen implemented it.

This properly fixes the freeze issue in Fantastic Pinball Kyuutenkai.

13 months agoFix regression with CdlPause (#209)
gameblabla [Mon, 30 Aug 2021 21:08:08 +0000 (21:08 +0000)]
Fix regression with CdlPause (#209)

13 months agoImprove CdlPause command based on Mednafen's implementation (#207)
gameblabla [Fri, 27 Aug 2021 22:05:02 +0000 (22:05 +0000)]
Improve CdlPause command based on Mednafen's implementation (#207)

Reference :

This fixed an issue with Worms Pinball booting to the language screen.
Previously, it would sometimes boot to it but not reliably
and the screen would always not appear or be black.

Now, the emulator doesn't crash anymore and the language screen
can be seen (although it is a glitchy mess).

13 months agoCDROM: Rename Reset+Init commands approperly, fix "This is Football 2" lockup (#205)
gameblabla [Thu, 26 Aug 2021 18:05:23 +0000 (18:05 +0000)]
CDROM: Rename Reset+Init commands approperly, fix "This is Football 2" lockup (#205)

Upon the reset command being issued, we need to set the Mode to 0x20
(as it was confirmed in Mednafen) and also disable the muting.

We also change the seektime for the reset command appropriately.
Please see Mednafen's implementation as reference :

This fixes the black screen issue in "This is Football 2".
This also fixes the black screen issue in Pooh's Party.

13 months agoFix CdlGetTD according to Mednafen's implementation. (#204)
gameblabla [Thu, 26 Aug 2021 18:04:19 +0000 (18:04 +0000)]
Fix CdlGetTD according to Mednafen's implementation. (#204)

13 months agoCdlGetmode is GetParam, fix it according to Mednafen's implementation (#203)
gameblabla [Wed, 25 Aug 2021 21:56:52 +0000 (21:56 +0000)]
CdlGetmode is GetParam, fix it according to Mednafen's implementation (#203)

The result size for GetParam (previously Getmode) should be only 5 and done this way.

13 months agoWe shouldn't throw an error for GetQ. (#202)
gameblabla [Wed, 25 Aug 2021 21:53:08 +0000 (21:53 +0000)]
We shouldn't throw an error for GetQ. (#202)

I doubt this is used by any games but who knows.

See Mednafen for reference :

13 months agoImprove SetLoc CDROM command from Duckstation (#201)
gameblabla [Wed, 25 Aug 2021 21:37:51 +0000 (21:37 +0000)]
Improve SetLoc CDROM command from Duckstation (#201)

See Duckstation's CDROM for reference :

This probably shouldn't make a difference but who knows.

13 months agoCdlSync should be NULL and return an error. (#199)
gameblabla [Wed, 25 Aug 2021 21:22:44 +0000 (21:22 +0000)]
CdlSync should be NULL and return an error. (#199)

This has been confirmed by both Mednafen and nocash's documentation.

13 months agoAlways look up verify_dirty literals from offsets by neonloop (#194)
gameblabla [Wed, 25 Aug 2021 20:55:22 +0000 (20:55 +0000)]
Always look up verify_dirty literals from offsets by neonloop (#194)

Literals are deduplicated, so there's no guarantee they will be stored
next to each other, even if they're written sequentially. verify_dirty
and get_bounds must use the offsets on each instruction, instead of
assuming values are stored sequentially.

Co-authored-by: neonloop <neonloop@pm.me>
13 months agopsxinterpreter: Merge DIV interpreter fix from libretro's fork (#193)
gameblabla [Sun, 22 Aug 2021 22:31:18 +0000 (22:31 +0000)]
psxinterpreter: Merge DIV interpreter fix from libretro's fork (#193)

Fix comes from here :

Co-authored-by: Ember Cold <embercold@outlook.com>
13 months agoCDROM: Ignore sectors with channel number 255 (#195)
gameblabla [Sun, 22 Aug 2021 22:29:02 +0000 (22:29 +0000)]
CDROM: Ignore sectors with channel number 255 (#195)

This was inspired by the fix in Duckstation :

Some games have junk audio sectors with a channel number of 255.
If these are not skipped, then they will play wrong file.

This was tested on "Blue's Clues : Blue's Big Musical" and
it fixed the missing audio there.

Taxi 2 is also said to be affected by this.

13 months agomdec.cpp: Dare to set MDEC_BIAS to 10 (#186)
gameblabla [Sun, 22 Aug 2021 22:18:42 +0000 (22:18 +0000)]
mdec.cpp: Dare to set MDEC_BIAS to 10 (#186)

This fixes graphic artifacts during cinematics in :
- Vandal Hearts
- R-Types
- Galerians

Dmitrysmagin had a similar fix in PCSX4ALL but he set it to 6.
It turns out MDEC_BIAS set to 6 was still not enough for Galerians
to look properly so it was set to 10.
It seems so far that other games are unaffected.

Co-authored-by: Dmitry Smagin <exmortis@yandex.ru>
13 months agoFixes Diablo 1 SPU bug properly and remove Diablo hack. (#191)
gameblabla [Sun, 22 Aug 2021 21:50:09 +0000 (21:50 +0000)]
Fixes Diablo 1 SPU bug properly and remove Diablo hack. (#191)

(Mostly) inspired by the fixes done in PCSX Redux :

It seems that there was an attempt to initially implement it
in PCSX Reloaded (hence the bIgnoreLoop in freeze.c) but it was never
implemented properly.

Co-authored-by: Nicolas Noble <nicolasnoble@users.noreply.github.com>
13 months agoProperly protect the HLE instructions against corrupted memory. (#189)
gameblabla [Sun, 22 Aug 2021 21:39:05 +0000 (21:39 +0000)]
Properly protect the HLE instructions against corrupted memory. (#189)

Fix is from PCSX-redux :

This should hopefully fix HDHOSHY's experimental patch properly.

Co-authored-by: Nicolas Noble <nicolasnoble@users.noreply.github.com>
13 months agoRewrite GPU bios functions according to OpenBIOS. (#192)
gameblabla [Wed, 18 Aug 2021 21:15:09 +0000 (21:15 +0000)]
Rewrite GPU bios functions according to OpenBIOS. (#192)

See PCSX-Redux :

13 months ago[SPU] Emulate SPUSTAT[5:0] as a mirror of SPUCNT[5:0] (#190)
gameblabla [Wed, 18 Aug 2021 20:58:45 +0000 (20:58 +0000)]
[SPU] Emulate SPUSTAT[5:0] as a mirror of SPUCNT[5:0] (#190)

Fix is from PCSX-Redux :

I have tested the fix against Loonies 8192 (a PSn00bSDK made homebrew game) and it no longer
locks up during loading.

Co-authored-by: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com>
13 months agoCDRom timings changes (#184)
gameblabla [Wed, 18 Aug 2021 20:24:33 +0000 (20:24 +0000)]
CDRom timings changes (#184)

Upstreamed changes from PCSX Redux as seen here :

This apparently fixes Deus Fight in Xenogears.

Co-authored-by: Nicolas Noble <nicolasnoble@users.noreply.github.com>
13 months agoAdd internal database for problematic games. (#182)
gameblabla [Wed, 18 Aug 2021 20:22:43 +0000 (20:22 +0000)]
Add internal database for problematic games. (#182)

13 months agodeal with some more annoying warnings
notaz [Mon, 16 Aug 2021 22:09:20 +0000 (01:09 +0300)]
deal with some more annoying warnings

Especially main.c as it's regenerated after each commit.

13 months agoCHD support from libretro's fork. (#188)
gameblabla [Mon, 16 Aug 2021 21:37:34 +0000 (21:37 +0000)]
CHD support from libretro's fork. (#188)

We are implementing it as a sub-module for maintenance reasons.

Co-authored-by: aliaspider <aliaspider@gmail.com>
13 months agogte_divider: should include it's own header
notaz [Mon, 16 Aug 2021 21:26:01 +0000 (00:26 +0300)]
gte_divider: should include it's own header

Would have noticed the wrong divider type with this.

13 months agogte: Fix gteH division and sign extension (from PCSX4ALL) (#185)
gameblabla [Mon, 16 Aug 2021 21:18:58 +0000 (21:18 +0000)]
gte: Fix gteH division and sign extension (from PCSX4ALL) (#185)

gteH register is u16, not s16. DIVIDE macro/func assumed it was
s16 for some reason. Behavior now matches Mednafen.

Co-authored-by: senquack <dansilsby@gmail.com>
13 months agoFixed Linked List DMA end marker. (#183)
gameblabla [Mon, 16 Aug 2021 21:03:52 +0000 (21:03 +0000)]
Fixed Linked List DMA end marker. (#183)

Taken from PCSX Redux project.

2 years agoFix crash on retrying mission in driver (#165)
ifcaro [Sat, 4 Jul 2020 13:26:16 +0000 (15:26 +0200)]
Fix crash on retrying mission in driver (#165)

Fix crash on retrying mission in driver

2 years agoMerge pull request #160 from J-O-N/fix-neon-cspace-upstream
notaz [Mon, 27 Apr 2020 17:37:45 +0000 (20:37 +0300)]
Merge pull request #160 from J-O-N/fix-neon-cspace-upstream

Fixed bug where MSB of a 15-bit BGR color could corrupt green value.

2 years agoFixed bug where MSB of a 15-bit BGR color could corrupt green value. Also added docum...
J-O-N [Sun, 26 Apr 2020 04:35:54 +0000 (00:35 -0400)]
Fixed bug where MSB of a 15-bit BGR color could corrupt green value. Also added documentation.

2 years agoMerge pull request #156 from pcercuei/fix-gte-divide
notaz [Sun, 16 Feb 2020 18:03:39 +0000 (20:03 +0200)]
Merge pull request #156 from pcercuei/fix-gte-divide

Replace existing gte_divider with MAME's version

2 years agoReplace existing gte_divider with MAME's version
Paul Cercueil [Wed, 12 Feb 2020 18:38:16 +0000 (15:38 -0300)]
Replace existing gte_divider with MAME's version

The original code did not have a license header, and as a result was
licensed under the GPLv2 which means that it was impossible to link it
with LGPL code.

The new code originates from MAME and is under a BSD-3-Clause license,
which is GPL-compatible, and also much cleaner.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
2 years agoadd some missing license headers
notaz [Tue, 11 Feb 2020 23:46:45 +0000 (01:46 +0200)]
add some missing license headers

2 years agogte_neon: fix compile under clang's assembler
notaz [Tue, 11 Feb 2020 23:19:43 +0000 (01:19 +0200)]
gte_neon: fix compile under clang's assembler

2 years agoLicense these files as MIT
twinaphex [Sat, 8 Feb 2020 20:40:17 +0000 (21:40 +0100)]
License these files as MIT

2 years agomenu: fix a buffer overflow
notaz [Sat, 8 Feb 2020 19:29:08 +0000 (21:29 +0200)]
menu: fix a buffer overflow

Reported by @wwhheerree, closes #152.

2 years agoMerge pull request #147 from senquack/cdrom_sstate_fix
notaz [Tue, 19 Nov 2019 22:24:11 +0000 (00:24 +0200)]
Merge pull request #147 from senquack/cdrom_sstate_fix

cdrom: add missing BCD->int convert in cdrFreeze()

2 years agocdrom: add missing BCD->int convert in cdrFreeze()
Daniel Silsby [Tue, 12 Nov 2019 23:48:44 +0000 (18:48 -0500)]
cdrom: add missing BCD->int convert in cdrFreeze()

For some Eboot .PBP game images, when loading a savestate, a zlib error
like 'uncompress failed with -5 for block 5383, sector 86132' would be
output to stdout/stderr. The savestate would still be playable, though.

Traced it down to cdrFreeze() failing to convert cdr.Prev from BCD->int
when calling ReadTrack(). Note that the odd 'cdr.Prev[0]++;' line seems
to be someone's hacky way of forcing ReadTrack() to avoid skipping what
it thinks is a duplicate sector read.

2 years agoMerge pull request #146 from senquack/gpulib_fix
notaz [Mon, 11 Nov 2019 18:50:44 +0000 (20:50 +0200)]
Merge pull request #146 from senquack/gpulib_fix

gpulib: fix out-of-bounds reads in do_cmd_buffer()

2 years agogpulib: fix out-of-bounds reads in do_cmd_buffer()
Daniel Silsby [Sat, 9 Nov 2019 01:30:04 +0000 (20:30 -0500)]
gpulib: fix out-of-bounds reads in do_cmd_buffer()

When gpu.cmd_buffer[] is filling up, and the last 1 or 2 words
in it are the beginning of a new vram read/write cmd, do_cmd_buffer()
would access out-of-bounds, reading garbage pos/size data.

Fixes corrupted gfx in this PS1 .exe test utility:
(This and all similar tests on Peter's site).
Note that gfx access in this utility is done entirely through cmds given
through GPUwriteData(), i.e. direct CPU->GP0 stores, not DMA.

3 years agoMerge pull request #139 from retro-wertz/patch-3
notaz [Sat, 3 Aug 2019 13:22:14 +0000 (16:22 +0300)]
Merge pull request #139 from retro-wertz/patch-3

Fix corrupted memory card saves when using HLE

3 years agoFix corrupted memory card saves when using HLE
retro-wertz [Sat, 3 Aug 2019 13:04:35 +0000 (21:04 +0800)]
Fix corrupted memory card saves when using HLE

- This is fixed by adding the missing SaveMcd() to buwrite().

Tested on Wild Arms and Breath of Fire III

3 years agoMerge pull request #137 from gameblabla/hle
notaz [Wed, 24 Jul 2019 20:39:11 +0000 (23:39 +0300)]
Merge pull request #137 from gameblabla/hle

HLE BIOS improvements (based on nocash doc, pcsx4all, upstream pcsxr etc...)

3 years agopsxbios: Don't accept 400h as a valid sector.
gameblabla [Mon, 22 Jul 2019 21:25:49 +0000 (23:25 +0200)]
psxbios: Don't accept 400h as a valid sector.

Notaz said this could corrupt the emulator (even though
the console allowed this and it was a bug) so limit it to 0x3FF.

3 years agopsxbios: Properly fix garbage area code.
gameblabla [Mon, 22 Jul 2019 02:39:41 +0000 (04:39 +0200)]
psxbios: Properly fix garbage area code.

This should work as intended now.

3 years agopsxbios: Fixup mistake in card_info function.
gameblabla [Sun, 21 Jul 2019 18:57:57 +0000 (20:57 +0200)]
psxbios: Fixup mistake in card_info function.

This fixes Looney Tunes Sheep Raiders.

3 years agopsxbios: Return value is always 1 for CloseTh and ChangeTh.
gameblabla [Sun, 21 Jul 2019 15:31:48 +0000 (17:31 +0200)]
psxbios: Return value is always 1 for CloseTh and ChangeTh.

According to nocash PSX doc, ChangeThread and CloseThread should
always return 1. Fix it accordingly.

3 years agopsxbios: Add checks for memchr.
gameblabla [Sun, 21 Jul 2019 05:43:56 +0000 (07:43 +0200)]
psxbios: Add checks for memchr.

3 years agopsxbios: Some games read from address 0, fix that.
gameblabla [Sun, 21 Jul 2019 03:39:55 +0000 (05:39 +0200)]
psxbios: Some games read from address 0, fix that.

See Garbage Area at Address 00000000h in Nocash PSX Specifications for more inf>

R-types will refuse to boot if psxM[0] is zero.
Fade to Black can crash upon memory card access if psxM[5] is set to the wrong >
Crash Team Racing will refuse to boot if psxM[2] and psxM[3] are not zero.
(Previously, that region of memory would be overwritten above. No explanation why.)

It's set as such according to nocash :
[00000000h]=3C1A0000h  ;<-- but overwritten by 00000003h after soon
[00000004h]=275A0C80h  ;<-- or 275A0C50h (in older BIOS)

Note that setting 00000000h to 00000003h doesn't work for R-types.

3 years agopsxbios: Implement get_cd_status stub according to nocash doc.
gameblabla [Sun, 21 Jul 2019 00:45:58 +0000 (02:45 +0200)]
psxbios: Implement get_cd_status stub according to nocash doc.

3 years agopsxbios: Make HLE bios start from block 1, not 2.
gameblabla [Sun, 21 Jul 2019 00:38:32 +0000 (02:38 +0200)]
psxbios: Make HLE bios start from block 1, not 2.

I already fixed this for bufile :
ptr = Mcd##mcd##Data + 128 * (nfile + 1); \
instead of
ptr = Mcd##mcd##Data + 128 * nfile; \

But i forgot to also fix psxBios_firstfile accordingly.
So nfile would still start from block 2 and it would
cause all kinds of issues.

This was the original comment on pcsxr codeplex
as my patch was based on it :
"The HLE-Bios start to read memory card blocks at block 2. You need to change
ptr = Mcd##mcd##Data + 128 * nfile; \ to
ptr = Mcd##mcd##Data + 128 * (nfile + 1); \
for #define bufile(mcd) { \ and changing nfile = 1; to nfile = 0; for psxBios_firstfile() { // 42 Starts numbering slots in the right position."

3 years agopsxbios: Fix card_status function as to use card_active_chan.
gameblabla [Sun, 21 Jul 2019 00:30:15 +0000 (02:30 +0200)]
psxbios: Fix card_status function as to use card_active_chan.

3 years agopsxbios: Merge interrupt_r26 fix from PCSX4ALL.
gameblabla [Sun, 21 Jul 2019 00:13:34 +0000 (02:13 +0200)]
psxbios: Merge interrupt_r26 fix from PCSX4ALL.

Thanks DmitrySmagin for the fix.

3 years agopsxbios: Do the same for heap_size.
gameblabla [Sun, 21 Jul 2019 00:10:27 +0000 (02:10 +0200)]
psxbios: Do the same for heap_size.

3 years agopsxbios : Use bfreezel for pad_stopped instead of setting it to 0.
gameblabla [Sat, 20 Jul 2019 23:31:24 +0000 (01:31 +0200)]
psxbios : Use bfreezel for pad_stopped instead of setting it to 0.

3 years agopsxbios : Implement stub for wait_card.
gameblabla [Sat, 20 Jul 2019 23:28:56 +0000 (01:28 +0200)]
psxbios : Implement stub for wait_card.

Pretty much identical to get_card_status except it's supposed
to wait until a non-busy state occurs.

3 years agopsxbios : Fix a few mistakes :
gameblabla [Sat, 20 Jul 2019 23:26:10 +0000 (01:26 +0200)]
psxbios : Fix a few mistakes :

- Remove extra ffile, pfile.. as it is declared elsewhere.
- Remove extra condition as it's already being handled by pad_stopped.
- Remove n variable from function (pcsx4all did this) as it's useless
and documentation doesn't seem to specify it's needed.

3 years agopsxbios: Add note and update copyright.
gameblabla [Thu, 18 Jul 2019 00:51:25 +0000 (02:51 +0200)]
psxbios: Add note and update copyright.

3 years agopsxbios: Merge heap fix from PCSX4ALL.
gameblabla [Thu, 18 Jul 2019 00:42:41 +0000 (02:42 +0200)]
psxbios: Merge heap fix from PCSX4ALL.

3 years agopsxbios: Init some vars just to be sure.
gameblabla [Thu, 18 Jul 2019 00:40:13 +0000 (02:40 +0200)]
psxbios: Init some vars just to be sure.

3 years agopsxbios: Merge PCSX4ALL pad_stopped fix.
gameblabla [Thu, 18 Jul 2019 00:38:32 +0000 (02:38 +0200)]
psxbios: Merge PCSX4ALL pad_stopped fix.

3 years agopsxbios.cpp: Add psxBios_card_status(); doesn't seem to affect anything
gameblabla [Thu, 18 Jul 2019 00:35:47 +0000 (02:35 +0200)]
psxbios.cpp: Add psxBios_card_status(); doesn't seem to affect anything

3 years agopsxbios: Fixes save issues on Parasite Eve II, Parasite Eve I and others
gameblabla [Thu, 18 Jul 2019 00:34:31 +0000 (02:34 +0200)]
psxbios: Fixes save issues on Parasite Eve II, Parasite Eve I and others

Merging never-merged fix by Solus for Parasite Eve. I also fixed some GCC warnings
about dir->name going out of bounds too.
We also make sure to only add '/0' if string is not full and right after the last character in the dir array.

This fixes saving/loading in Parasite Eve II, Parasite Eve.
It also fixed regressions for the LEGO Racers where other games would break,
meaning this should be the proper fix for saves.

We're also using our own strlen implementation to avoid any issues or
relying on the libc's own strlen.

3 years agopsxbios: Callback Events should not set event status to busy in TestEvent.
gameblabla [Thu, 18 Jul 2019 00:30:31 +0000 (02:30 +0200)]
psxbios: Callback Events should not set event status to busy in TestEvent.

We are already doing that in WaitEvent. According to nocash documentation,
this also applies to TestEvent as well so let's implement it.

3 years agopsxbios: Support other syscalls
gameblabla [Thu, 18 Jul 2019 00:29:49 +0000 (02:29 +0200)]
psxbios: Support other syscalls

Since they don't do anything however, let's just add a default and break;
instead. Interestingly, trying to implement SYS(04h+ can actually crash
the HLE bios. Nocash documentation said that it should crash it
but due to other reasons, it doesn't and returns to main program instead.

3 years agopsxbios: Add checks for strlen.
gameblabla [Thu, 18 Jul 2019 00:28:55 +0000 (02:28 +0200)]
psxbios: Add checks for strlen.

Per what Nocash documentation says.