pcsx_rearmed.git
2 years agocdrom: update status immediately after seek
notaz [Thu, 29 Sep 2022 19:45:23 +0000 (22:45 +0300)]
cdrom: update status immediately after seek

Philosoma wants it

2 years agocdrom: ignore repeated read cmds
notaz [Thu, 29 Sep 2022 18:36:54 +0000 (21:36 +0300)]
cdrom: ignore repeated read cmds

libretro/pcsx_rearmed#691

2 years agocdrom: change GetlocL behavior
notaz [Wed, 21 Sep 2022 21:35:28 +0000 (00:35 +0300)]
cdrom: change GetlocL behavior

notaz/pcsx_rearmed#263

2 years agocdrom: treat seek the same as other commands
notaz [Sat, 17 Sep 2022 20:28:46 +0000 (23:28 +0300)]
cdrom: treat seek the same as other commands

much simpler this way

2 years agocdrom: allow to interrupt initial scan sequence
notaz [Sat, 17 Sep 2022 20:18:47 +0000 (23:18 +0300)]
cdrom: allow to interrupt initial scan sequence

probably wrong but ohwell...

2 years agocdrom: actually reject commands when not ready
notaz [Sat, 17 Sep 2022 19:46:03 +0000 (22:46 +0300)]
cdrom: actually reject commands when not ready

before it would still execute them and just do an error response

2 years agomain: log missing CPU features
notaz [Fri, 16 Sep 2022 19:59:25 +0000 (22:59 +0300)]
main: log missing CPU features

will probably be too late but ohwell

2 years agogpu_neon: rm wrong cost qualifier
notaz [Thu, 15 Sep 2022 23:34:58 +0000 (02:34 +0300)]
gpu_neon: rm wrong cost qualifier

2 years agocdrom: adjust timing
notaz [Thu, 15 Sep 2022 23:31:37 +0000 (02:31 +0300)]
cdrom: adjust timing

2 years agodon't cast between long and pointers for win64
notaz [Thu, 15 Sep 2022 21:03:40 +0000 (00:03 +0300)]
don't cast between long and pointers for win64

long is 32 bit there

2 years agomisc: patch some issues indicated by clang
notaz [Thu, 15 Sep 2022 18:12:10 +0000 (21:12 +0300)]
misc: patch some issues indicated by clang

2 years agofrontend: handle double res rendering, enable on x86_64
notaz [Thu, 15 Sep 2022 16:11:11 +0000 (19:11 +0300)]
frontend: handle double res rendering, enable on x86_64

2 years agogpu_neon: brand new x86 SSE2+ implementation
notaz [Sun, 11 Sep 2022 22:40:24 +0000 (01:40 +0300)]
gpu_neon: brand new x86 SSE2+ implementation

2 years agogpu_neon: adjust some comments and things
notaz [Tue, 16 Aug 2022 21:11:39 +0000 (00:11 +0300)]
gpu_neon: adjust some comments and things

2 years agocdrom: delay the missed irq more
notaz [Thu, 15 Sep 2022 16:25:01 +0000 (19:25 +0300)]
cdrom: delay the missed irq more

2 years agosome big endian fixes
notaz [Sat, 10 Sep 2022 14:53:54 +0000 (17:53 +0300)]
some big endian fixes

"kinda sucks but it works" kind of thing

2 years agostandalone: allow lightrec for testing
notaz [Fri, 9 Sep 2022 23:26:04 +0000 (02:26 +0300)]
standalone: allow lightrec for testing

lightrec is not (yet?) here, just to reduce diff from libretro fork

2 years agospu: fix wrong volume shift
notaz [Sat, 10 Sep 2022 13:46:05 +0000 (16:46 +0300)]
spu: fix wrong volume shift

libretro/pcsx_rearmed#685

2 years agofix build
notaz [Fri, 9 Sep 2022 23:37:50 +0000 (02:37 +0300)]
fix build

forgot to add 'extern'

2 years agogte: minor diff from libretro
notaz [Fri, 9 Sep 2022 23:39:24 +0000 (02:39 +0300)]
gte: minor diff from libretro

2 years agopsxinterpreter: reduce the use of globals
notaz [Fri, 9 Sep 2022 19:11:30 +0000 (22:11 +0300)]
psxinterpreter: reduce the use of globals

they induce penalties with -fPIC

2 years agoeasier logging of unhandled stuff
notaz [Thu, 8 Sep 2022 17:09:04 +0000 (20:09 +0300)]
easier logging of unhandled stuff

2 years agocdrom: partially emulate the fifo
notaz [Thu, 8 Sep 2022 18:13:25 +0000 (21:13 +0300)]
cdrom: partially emulate the fifo

2 years agodma: try more accurate timings
notaz [Thu, 8 Sep 2022 15:17:06 +0000 (18:17 +0300)]
dma: try more accurate timings

seems to help Legend of Mana

2 years agocdrom: get rid of pTransfer
notaz [Thu, 8 Sep 2022 15:01:34 +0000 (18:01 +0300)]
cdrom: get rid of pTransfer

it could easily crash the emu (misbehaving game or even malicious ISO)

2 years agocdrom: don't reschedule irqs
notaz [Tue, 6 Sep 2022 21:47:55 +0000 (00:47 +0300)]
cdrom: don't reschedule irqs

trigger shortly after ack instead, like nocash describes

2 years agocdrom: clean up command handling
notaz [Mon, 5 Sep 2022 20:47:10 +0000 (23:47 +0300)]
cdrom: clean up command handling

2 years agocdrom: try to eliminate playback timing drifting
notaz [Mon, 5 Sep 2022 16:41:52 +0000 (19:41 +0300)]
cdrom: try to eliminate playback timing drifting

2 years agopsxcounters: try to eliminate another source of audio drift
notaz [Tue, 6 Sep 2022 23:09:08 +0000 (02:09 +0300)]
psxcounters: try to eliminate another source of audio drift

2 years agospu: cleanup some irq hacks
notaz [Wed, 7 Sep 2022 23:50:36 +0000 (02:50 +0300)]
spu: cleanup some irq hacks

Note that bIgnoreLoop is still needed or
"Misadventures Of Tron Bonne" may hang after cutscenes.
Before this commit the game will sometimes cut off dialogues.

2 years agospu: sync on xa playback start
notaz [Tue, 6 Sep 2022 15:25:42 +0000 (18:25 +0300)]
spu: sync on xa playback start

this avoids nasty underflows at the start of the stream

2 years agospu: support master volume
notaz [Sun, 4 Sep 2022 23:03:24 +0000 (02:03 +0300)]
spu: support master volume

2 years agospu: rename dwChannelOn to something more suitable
notaz [Sun, 4 Sep 2022 21:40:58 +0000 (00:40 +0300)]
spu: rename dwChannelOn to something more suitable

2 years agospu: remove some strange rounding
notaz [Sun, 4 Sep 2022 21:02:28 +0000 (00:02 +0300)]
spu: remove some strange rounding

Seems wrong.
Also deal with now possible div by 0 in scan_for_irq().

2 years agocdrom: remove confusing comment
notaz [Sat, 3 Sep 2022 15:37:53 +0000 (18:37 +0300)]
cdrom: remove confusing comment

No need for a wall-of-text comment for something as basic as seeking.
It also said "disabling it with `&& false` for now" when there is no
such code here.

2 years agocdrom: remove another hack
notaz [Sat, 3 Sep 2022 15:33:09 +0000 (18:33 +0300)]
cdrom: remove another hack

The hack just makes Worms Pinball unstable, and Crusaders of Might
and Magic no longer seems to need it.

2 years agocdrom: take a minor change from libretro
notaz [Fri, 2 Sep 2022 22:54:28 +0000 (01:54 +0300)]
cdrom: take a minor change from libretro

2 years agocdrom: get rid of cdrPlayInterrupt
notaz [Fri, 2 Sep 2022 20:13:44 +0000 (23:13 +0300)]
cdrom: get rid of cdrPlayInterrupt

unify with cdrReadInterrupt and name it cdrPlaySeekReadInterrupt

... althoug these are not actually interrupts, more like events,
but keep this weird PCSX's naming convention

2 years agocdrom: try to clean up the seeking mess
notaz [Thu, 1 Sep 2022 21:47:56 +0000 (00:47 +0300)]
cdrom: try to clean up the seeking mess

regressions are likely (this is cdrom code - pcsx's weak spot),
so feel free to revert if I'm not responsive

2 years agocdrom: should use the last Setloc loc and SeekL
notaz [Wed, 31 Aug 2022 23:09:49 +0000 (02:09 +0300)]
cdrom: should use the last Setloc loc and SeekL

notaz/pcsx_rearmed#253

2 years agocdrom: some debugging aid
notaz [Wed, 31 Aug 2022 23:02:21 +0000 (02:02 +0300)]
cdrom: some debugging aid

2 years agoplugins: try to untangle the CALLBACK mess
notaz [Mon, 29 Aug 2022 23:58:32 +0000 (02:58 +0300)]
plugins: try to untangle the CALLBACK mess

on ARM it doesn't matter so calling conventions were never maintained,
so just get rid of __stdcall

2 years agospu: get rid of iXAPitch
notaz [Tue, 30 Aug 2022 00:00:51 +0000 (03:00 +0300)]
spu: get rid of iXAPitch

it makes no sense after SPU was fully synced to the core, and now it
just pulls unwanted windows.h dependency on win32.

2 years agomisc: get rid of an unaligned read
notaz [Sun, 28 Aug 2022 20:51:40 +0000 (23:51 +0300)]
misc: get rid of an unaligned read

96c6ec7055ecef55b3dd221c86b796512bf52107 introduced an unaligned read
which is undefined behavior in C, even if most hardware allows it
(but some very old ARMs don't). Perf. doesn't matter here so read
byte-by-byte.

notaz/pcsx_rearmed#261

2 years agogpu_neon: fix another abi violation
notaz [Sat, 13 Aug 2022 21:07:11 +0000 (00:07 +0300)]
gpu_neon: fix another abi violation

before the flush_render_block_buffer call the stack is misaligned,
so push an odd num of regs to realign

2 years agogpu_neon: fix wrong block counting
notaz [Sat, 13 Aug 2022 21:05:07 +0000 (00:05 +0300)]
gpu_neon: fix wrong block counting

2 years agodrc: fix a silly mistake of overwriting a reg
notaz [Thu, 11 Aug 2022 19:52:54 +0000 (22:52 +0300)]
drc: fix a silly mistake of overwriting a reg

2 years agodrc: rework smc checks again
notaz [Wed, 10 Aug 2022 19:39:41 +0000 (22:39 +0300)]
drc: rework smc checks again

the way it was done before wasn't good enough for
Mega Man Legends 2 at least

2 years agodrc: fix wrong masking in set_jump_target
notaz [Wed, 10 Aug 2022 19:32:11 +0000 (22:32 +0300)]
drc: fix wrong masking in set_jump_target

2 years agocspace: add forgotten length decrement
notaz [Tue, 9 Aug 2022 17:42:39 +0000 (20:42 +0300)]
cspace: add forgotten length decrement

2 years agomark libretro makefile as unmaintained here
notaz [Mon, 8 Aug 2022 22:50:54 +0000 (01:50 +0300)]
mark libretro makefile as unmaintained here

2 years agocspace: generic implementation with vector extensions
notaz [Mon, 8 Aug 2022 21:07:27 +0000 (00:07 +0300)]
cspace: generic implementation with vector extensions

2 years agogpu_neon: integration for arm64
notaz [Mon, 8 Aug 2022 18:16:59 +0000 (21:16 +0300)]
gpu_neon: integration for arm64

2 years agogpu_neon: new intrinsics-only implementation
notaz [Sun, 17 Jul 2022 22:26:25 +0000 (01:26 +0300)]
gpu_neon: new intrinsics-only implementation

~80-95% performance of the asm version on cortex-a72,
but maybe less of a portability nightmare (+arm64 support)

2 years agogpu_neon: place asm func prototypes into a separate header
notaz [Sat, 23 Jul 2022 15:22:33 +0000 (18:22 +0300)]
gpu_neon: place asm func prototypes into a separate header

for the upcoming intrinsics implementation

2 years agogpu_neon: don't include vector_ops.h in the main header
notaz [Sun, 17 Jul 2022 22:18:52 +0000 (01:18 +0300)]
gpu_neon: don't include vector_ops.h in the main header

that stuff is only used in the C-only prototype

2 years agogpu_neon: fix some more abi violations
notaz [Mon, 1 Aug 2022 21:08:49 +0000 (00:08 +0300)]
gpu_neon: fix some more abi violations

2 years agodrc: patch up some potential issues on the switch
notaz [Tue, 2 Aug 2022 21:51:35 +0000 (00:51 +0300)]
drc: patch up some potential issues on the switch

2 years agogpu_neon: try to make the compiler save some callee-save regs
notaz [Sat, 23 Jul 2022 22:31:08 +0000 (01:31 +0300)]
gpu_neon: try to make the compiler save some callee-save regs

... which the asm isn't doing properly

2 years agodfxvideo: patch up some unsafe macros
notaz [Fri, 29 Jul 2022 22:07:21 +0000 (01:07 +0300)]
dfxvideo: patch up some unsafe macros

(old?)-ARM version of GETLE32() was causing wrong shifting due to
implicit signed int promotion.

libretro/pcsx_rearmed#676

2 years agoCI: Pass SDL_CONFIG to the ./configure script
Paul Cercueil [Fri, 3 Jun 2022 17:26:28 +0000 (18:26 +0100)]
CI: Pass SDL_CONFIG to the ./configure script

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
2 years agoconfigure: Detect the toolchain's sdl-config tool
Paul Cercueil [Fri, 29 Apr 2016 20:06:36 +0000 (22:06 +0200)]
configure: Detect the toolchain's sdl-config tool

Instead of calling the host's sdl-config, which doesn't work when
cross-compiling, call the sdl-config program that's installed in the
compiler's sysroot.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
2 years agocdrom: Fix PBP support on big-endian platforms
Paul Cercueil [Tue, 24 May 2022 21:22:48 +0000 (22:22 +0100)]
cdrom: Fix PBP support on big-endian platforms

The data contained in the PBP is in little-endian format. Therefore,
everything in the PBP's header must be read with the byte-swap macros,
for PBP support to work on big-endian systems.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
2 years agodfxvideo: Restore support for big-endian arch
Paul Cercueil [Sat, 21 May 2022 16:52:47 +0000 (17:52 +0100)]
dfxvideo: Restore support for big-endian arch

The hardware registers, emulated RAM or emulated VRAM are all in
little-endian format. Therefore, each access must be done with one of
the byte-swap macros, for the plugin to work on big-endian systems.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
2 years agofrontend: Fix colorspace conversion routines on big-endian
Paul Cercueil [Sat, 21 May 2022 17:58:14 +0000 (18:58 +0100)]
frontend: Fix colorspace conversion routines on big-endian

The bgr555_to_rgb565() and bgr888_to_rgb565() functions were only
working correctly on little-endian systems.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
2 years agomisc: Use GCC builtins for byte-swap operations
Paul Cercueil [Thu, 26 May 2022 13:07:41 +0000 (14:07 +0100)]
misc: Use GCC builtins for byte-swap operations

Instead of using custom code to byte-swap values, use the built-in
function provided by GCC.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
2 years agogpulib: Add proper support for big-endian
Paul Cercueil [Fri, 13 Sep 2019 21:13:43 +0000 (23:13 +0200)]
gpulib: Add proper support for big-endian

Update the gpulib code to work properly on big-endian architectures.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
2 years agoGet rid of bit fields in union
Paul Cercueil [Fri, 13 Sep 2019 21:09:11 +0000 (23:09 +0200)]
Get rid of bit fields in union

Long story short, bit fields aren't endian-safe.
More info: http://mjfrazer.org/mjfrazer/bitfields/

Simplify that by just using a few macros to access the needed bits.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
2 years agoMake sure hardware registers are manipulated as little-endian
Paul Cercueil [Fri, 13 Sep 2019 21:01:57 +0000 (23:01 +0200)]
Make sure hardware registers are manipulated as little-endian

The hardware registers should be represented in little-endian format.
Therefore, on big-endian systems the values need to be byte-swapped.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
2 years agoFix PCSX on big-endian systems
Paul Cercueil [Wed, 11 Sep 2019 15:33:14 +0000 (17:33 +0200)]
Fix PCSX on big-endian systems

The __BIGENDIAN__ macro was never defined anywhere, and the
__BIG_ENDIAN__ macro isn't set anymore by recent versions of GCC.

Replace them by checking __BYTE_ORDER__ against __ORDER_BIG_ENDIAN__.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
2 years agodrc: some more libnx support
notaz [Mon, 18 Jul 2022 21:21:44 +0000 (00:21 +0300)]
drc: some more libnx support

2 years agodrc: simplify cache flush for some platforms
notaz [Thu, 14 Jul 2022 21:41:58 +0000 (00:41 +0300)]
drc: simplify cache flush for some platforms

untested, may break 3DS, if it happens please report

2 years agodrc: some libnx support
notaz [Thu, 14 Jul 2022 21:24:34 +0000 (00:24 +0300)]
drc: some libnx support

2 years agocdriso: hack .chd track handling to match .cue
notaz [Mon, 6 Jun 2022 22:59:51 +0000 (01:59 +0300)]
cdriso: hack .chd track handling to match .cue

libretro/pcsx_rearmed#648

2 years agocdrom: don't read and play simultaneously
notaz [Mon, 6 Jun 2022 21:45:57 +0000 (00:45 +0300)]
cdrom: don't read and play simultaneously

notaz/pcsx_rearmed#250

2 years agopsxcounters: try to support a dynarec with a very long timeslice
notaz [Thu, 2 Jun 2022 20:22:19 +0000 (23:22 +0300)]
psxcounters: try to support a dynarec with a very long timeslice

The dynarec instead should probably not run for thousands of cycles
doing no interrupt checks, but maybe this hack will be enough.
libretro/pcsx_rearmed#658

2 years agodrc: update some logging and patches
notaz [Wed, 1 Jun 2022 21:25:32 +0000 (00:25 +0300)]
drc: update some logging and patches

2 years agorelease r23 r23
notaz [Mon, 14 Mar 2022 22:04:27 +0000 (00:04 +0200)]
release r23

2 years agofrontend: omap: fix glitches on mode changes
notaz [Sun, 13 Mar 2022 23:24:50 +0000 (01:24 +0200)]
frontend: omap: fix glitches on mode changes

Where was I 10 years ago? Why am I so old?

2 years agocdriso: handle chd subchannels, when available
notaz [Sun, 13 Mar 2022 21:40:48 +0000 (23:40 +0200)]
cdriso: handle chd subchannels, when available

libretro/pcsx_rearmed#535
only raw mode tested

2 years agocdriso: merge some libretro changes
notaz [Sun, 13 Mar 2022 21:10:52 +0000 (23:10 +0200)]
cdriso: merge some libretro changes

no async read for now

2 years agoalways enable chd support
notaz [Sun, 13 Mar 2022 20:46:31 +0000 (22:46 +0200)]
always enable chd support

2 years agodrc: fix some wrong inv address calculations
notaz [Tue, 1 Mar 2022 22:49:11 +0000 (00:49 +0200)]
drc: fix some wrong inv address calculations

Fixes: 882a08fc49541450bc403b2e920e4bccc257dfdf
notaz/pcsx_rearmed#243

2 years agounbreak nodynarec build
notaz [Sat, 26 Feb 2022 23:54:39 +0000 (01:54 +0200)]
unbreak nodynarec build

oops

2 years agodrc: try to avoid some block trapping
notaz [Sat, 26 Feb 2022 22:10:57 +0000 (00:10 +0200)]
drc: try to avoid some block trapping

2 years agodrc: rework jump_out lists
notaz [Thu, 24 Feb 2022 21:28:11 +0000 (23:28 +0200)]
drc: rework jump_out lists

should waste less memory for malloc overheads

2 years agodrc: rework expire code
notaz [Wed, 23 Feb 2022 23:08:35 +0000 (01:08 +0200)]
drc: rework expire code

Should be quite a bit simpler now, and no longer wastes ~4MB of
translation cache for aggressive block expiring. However more stuff
in cache means longer lists which may slow things down if
recompilation is happening nonstop, so further tuning might be needed.

2 years agodrc: more precise invalidation checking for the invstub case
notaz [Tue, 22 Feb 2022 22:26:51 +0000 (00:26 +0200)]
drc: more precise invalidation checking for the invstub case

2 years agodrc: rework block tracking
notaz [Mon, 21 Feb 2022 23:23:09 +0000 (01:23 +0200)]
drc: rework block tracking

Mostly to remove that horrible generated code parsing.
Also seems to generate less code now.

2 years agodrc: get rid of SPAN
notaz [Sat, 19 Feb 2022 22:46:51 +0000 (00:46 +0200)]
drc: get rid of SPAN

Should have done it 10 years ago, it's a huge maintenance burden for
something than almost never happens.

2 years agodrc: restore all block entry points at once
notaz [Sat, 19 Feb 2022 22:11:52 +0000 (00:11 +0200)]
drc: restore all block entry points at once

and add some stats

2 years agodrc: don't delay block restoration
notaz [Sat, 19 Feb 2022 19:37:23 +0000 (21:37 +0200)]
drc: don't delay block restoration

Not sure why it was done the way it was (maybe something N64 related?),
but it occasionally caused dyna_linker to repeatedly walk the jump_in
list. What's worse, if the dirty block was deemed to expire soon,
it would never be restored and dyna_linker repeated jump_in walking
would never end, causing severe slowdown.

2 years agoRevert "clear Index0 data FIFO flag (#241)"
notaz [Thu, 17 Feb 2022 00:14:03 +0000 (02:14 +0200)]
Revert "clear Index0 data FIFO flag (#241)"

This reverts commit 50ae51487697da0d2f9c93295f89d2f10694b6d8.
It broke Driver 2.

2 years agodrc: try not to end the block prematurely
notaz [Tue, 15 Feb 2022 23:20:31 +0000 (01:20 +0200)]
drc: try not to end the block prematurely

Fixes: 4919de1e88095f00466f6674323d518fc520b0db

(was not really broken, only load delay detection can't work with
blocks that are too small)

2 years agopsxinterpreter: unbreak load delay handling
notaz [Tue, 15 Feb 2022 21:17:42 +0000 (23:17 +0200)]
psxinterpreter: unbreak load delay handling

Fixes: 943a507a4156b8f5b00e4431152e41eeb4dc6f3d

2 years agodrc: add a clock override for Super Robot Taisen Alpha
notaz [Sat, 12 Feb 2022 20:58:23 +0000 (22:58 +0200)]
drc: add a clock override for Super Robot Taisen Alpha

libretro/pcsx_rearmed#610

2 years agodrc: try to make some passes not as slow, part 2
notaz [Sun, 6 Feb 2022 23:41:12 +0000 (01:41 +0200)]
drc: try to make some passes not as slow, part 2

2 years agodrc: put passes in their own functions
notaz [Sun, 6 Feb 2022 20:38:54 +0000 (22:38 +0200)]
drc: put passes in their own functions

mostly for profiling

2 years agodrc: try to make some passes not as slow
notaz [Sat, 5 Feb 2022 22:10:18 +0000 (00:10 +0200)]
drc: try to make some passes not as slow

2 years agodrc: use optimized get_reg
notaz [Thu, 3 Feb 2022 00:04:52 +0000 (02:04 +0200)]
drc: use optimized get_reg

arm32-only for now