Commit Graph
8279 Commits
Author SHA1 Message Date
Rix 4ab5ce3945 Merge pull request #2244 from rixnobis/gpu-cmd-fixes
gpu: fix GP0(02h) X snap, GP0(80h) mask bits, GP0(1Fh) IRQ
2026-10-10 10:00:55 -07:00
Rix 363869f8a3 tests: GPUSTAT.24 survives a save state
Raises IRQ1 from code poked into RAM, saves, acks with GP1(02h), loads, and checks the flag is back. Fails with the restore in GPU::deserialize removed.
2026-10-10 08:59:18 -07:00
Rix b0a245bc23 Merge pull request #2274 from grumpycoders/chores-i18n
[Chores] Regen i18n
2026-10-10 07:02:47 -07:00
Rix 92ded553bd tests: bump nugget for the gpu-{fbrect,vram-move,command,irq,polyline} suites 2026-10-10 04:17:42 -07:00
Rix 3ba201636f gpu: GP0(80h) onto its own source still applies set-mask 2026-10-10 04:17:37 -07:00
Rix d5ae80b06a gpu: GP0(1Fh) raises IRQ1 and GPUSTAT.24, cleared by GP1(02h) and GP1(00h) 2026-10-10 04:17:37 -07:00
Rix 071a881e95 gpu: GP0(80h) VRAM copy honours the GP0(E6h) set-mask and check-mask settings 2026-10-10 04:17:36 -07:00
Rix c5739b5880 gpu: GP0(02h) fill ignores the low 4 bits of X and rounds the width up to 16 2026-10-10 04:17:36 -07:00
Rix 3253fa54c7 tests: add gtest wrappers for the gpu-{fbrect,vram-move,command,irq,polyline} suites 2026-10-10 04:17:36 -07:00
rixnobis 8264b11959 [Chores] Regen i18n 2026-10-10 10:03:52 +00:00
Rix 7a6df104f3 Merge pull request #2273 from grumpycoders/chores-code-format
[Chores] Format code
2026-10-10 02:57:17 -07:00
Rix fab37739b8 Merge pull request #2272 from rixnobis/openbios-disc-boot
OpenBIOS boots discs again
2026-10-10 02:55:13 -07:00
Rix 1cc671894e OpenBIOS boots discs again; bump nugget
Bumps nugget to d9e0baca (pcsx-redux/nugget#161 on the current pin line): OpenBIOS waits long enough for Init's completion, and its free survives a user heap the game wrote over. Fixes WipEout (USA) under OpenBIOS (#1913). The new cdrom tests boot the test disc through OpenBIOS without -loadexe.
2026-10-10 02:04:23 -07:00
Rix 139b5e27e2 cdrom: an acked response no longer holds back the next one
An acked response whose bytes were never read kept its slot, so the next one was never delivered. OpenBIOS's shell acks GetID's INT3 without reading it and sat waiting for INT2 forever; no disc booted. The unread bytes stay readable until the next response replaces them.
2026-10-10 02:04:11 -07:00
rixnobis 8de3f8763f [Chores] Format code 2026-10-10 08:24:19 +00:00
Rix 6f4e4b8709 Merge pull request #2270 from rixnobis/dynarec-mtc0-cause
dynarec: store Cause on a non-constant MTC0 $13
2026-10-10 01:19:11 -07:00
Rix 66bd9f44c9 Merge pull request #2271 from rixnobis/dynarec-bcz-cu
dynarec: raise Coprocessor Unusable on BCzF/BCzT with SR.CUz clear
2026-10-10 01:17:45 -07:00
Rix 39e2805bc2 Merge pull request #2268 from grumpycoders/chores-i18n
[Chores] Regen i18n
2026-10-10 01:16:04 -07:00
rixnobis 10e445a95d [Chores] Regen i18n 2026-10-10 05:56:19 +00:00
Rix 3d3508aeec Merge pull request #2226 from rixnobis/delay-slot-exceptions
interpreter: cancel the pending branch on an exception in its delay slot
2026-10-09 22:40:49 -07:00
Rix eacd57d320 dynarec: raise Coprocessor Unusable on BCzF/BCzT with SR.CUz clear
The interpreter traps a COPz branch when SR.CUz is clear, COP0 included,
but both dynarecs only ever branched. Test SR.CUz at runtime and, when it
is clear, take the exception and leave the block before the delay slot,
committing a pending load first as the interpreter does. Adds the dynarec
run of cop-branch, whose CU-clear cases all failed before this.
2026-10-09 22:06:02 -07:00
Rix 61cda43cda dynarec: store Cause on a non-constant MTC0 $13
The register path masked the guest register in place and never wrote Cause, so mtc0 $reg, $13 left Cause untouched and cleared bits 10-15 of $reg. Mask into a scratch register and store it, as the constant path does. src/mips moves to nugget's mtc0-cause-redux-pin, which adds the sr-write case for it.
2026-10-09 21:46:42 -07:00
Rix c10020e81d interpreter: let the exception override cancel a faulting BCz's pending branch
BCz kept its own cleanup of the current delayed load slot, which aborts now that the exception override clears the pending branch from the other slot.
2026-10-09 21:01:59 -07:00
Rix b4dc9cd95a interpreter: keep the pending branch when PCdrv handles a BREAK in its delay slot
exception() now reports whether it took the exception; PCdrv returns without taking one.
2026-10-09 19:15:44 -07:00
Rix 8f86dd0529 interpreter: cancel the pending branch on any exception in its delay slot
ADD/ADDI/SUB overflow in a taken branch's delay slot left the branch
pending, so it overwrote the exception vector. SYSCALL and BREAK cleared it
themselves but looked in the wrong delayed load slot and aborted. Fixes
#2224 and #2225.
2026-10-09 19:15:44 -07:00
Rix 6eda90ff55 Merge pull request #2258 from grumpycoders/chores-i18n
[Chores] Regen i18n
2026-10-09 17:41:29 -07:00
Rix 0f9ffde350 Merge pull request #2252 from grumpycoders/chores-code-format
[Chores] Format code
2026-10-09 17:41:22 -07:00
rixnobis 2f3b5e9a32 [Chores] Format code 2026-10-09 18:19:08 +00:00
rixnobis d7cc9e2c5f [Chores] Regen i18n 2026-10-09 18:15:00 +00:00
Rix bf543f2e87 Merge pull request #2147 from rixnobis/imgui-memedit-upstream
Sync vendored imgui memory editor with upstream fixes
2026-10-09 10:32:58 -07:00
Rix 009725adef Merge pull request #2251 from rixnobis/irq-branch-slot
cpu: take an IRQ on a branch's delay slot without losing the handler
2026-10-09 10:32:27 -07:00
Rix ed576b86ed Merge pull request #2190 from rixnobis/psm-user-events
midi2psm: turn tag:payload cue points into PSM USER events
2026-10-09 10:17:36 -07:00
Rix cf5008d09e cpu: clear the delay-slot flag when an IRQ drops the inner branch's jump
The inner branch set m_nextIsDelaySlot, so the interpreter ran the handler's first instruction as a delay slot.
2026-10-09 08:47:32 -07:00
Rix a6a1c8150f cpu: take an IRQ on a branch's delay slot without losing the handler
A branch in the delay slot of a taken branch leaves its own jump pending
when branchTest runs. Taking an interrupt there let that jump land after
the first instruction of the exception handler, so the handler never ran
and SR kept interrupts disabled. Drop the pending jump and take the
interrupt with BD set and EPC on the branch, which RFE then runs again.
Threads of Fate stalled on this in the interpreter.
2026-10-09 08:47:32 -07:00
Rix 8e0b9eae22 Merge branch 'main' into imgui-memedit-upstream 2026-10-09 08:47:11 -07:00
Rix 3fb24f8078 Merge pull request #2243 from rixnobis/branch-in-delay-slot
cpu: branches in a taken branch's delay slot
2026-10-09 07:12:23 -07:00
Rix 8c3eb6d266 cpu: count ROM cycles on the delay-slot branch paths
Both blocks ended by the branch-in-delay-slot path added the instruction count without the ROM bias, and the not-taken path did not restore it.
2026-10-09 05:38:52 -07:00
Rix abef88594a Merge pull request #2256 from rixnobis/lua-harness
Lua: name the unknown event, and don't abort when a startup script fails
2026-10-09 04:51:36 -07:00
Rix ee2220f166 cpu: a branch in a taken branch's delay slot is relative to its target
A relative branch adds its offset to the PC register, which in the delay
slot of a taken branch already holds that branch's target, and the second
branch's own delay slot is the instruction at that target. The interpreter
takes its base from the pending PC load; both dynarecs compile the taken
case as its own path when the first target is known at compile time.
2026-10-09 03:52:15 -07:00
Rix 7c1c997ce1 Merge pull request #2257 from rixnobis/spu-deadwait
spu: drop the frame limiter that could never wait
2026-10-09 03:07:22 -07:00
Rix d47af40815 main: shut down normally when a startup Lua script fails
A -dofile or -exec error took the emergency exit, which leaves the uv
thread unjoined and aborts the process with "terminate called without an
active exception" after the traceback is printed.
2026-10-09 03:06:51 -07:00
Rix c4b9424680 lua: name the event createEventListener doesn't know
The error read "createListener: unknown event name" with no name, so a
script using the C++ spelling GPU::VSync instead of GPU::Vsync got no hint.
2026-10-09 03:06:43 -07:00
Rix 0a9b4499f2 Merge pull request #2261 from rixnobis/iso2048-length
cdriso: size bare 2048-byte ISOs by 2048-byte sectors
2026-10-09 03:02:52 -07:00
Rix 93aeb5fee0 Merge pull request #2255 from rixnobis/mds-parse
cdrom: open the .mds descriptor in parsemds, read sectors from the .mdf
2026-10-09 02:31:54 -07:00
Rix 27d7a5b6f4 Merge pull request #2264 from rixnobis/readn-resend
cdrom: a resent ReadN keeps the read in flight
2026-10-09 02:12:42 -07:00
Rix 0a9d54ade1 cdrom: a resent ReadN keeps the read in flight
Each ReadN reset the drive to idle and pushed the seek 20 ms out, so a game that resends Setloc and ReadN faster than that never got a sector (Giftscop, #2260). On an SCPH-9002 the resent loop still reads. Bumps nugget to the branch carrying simpleReadingResendLoop.
2026-10-09 00:39:48 -07:00
Rix c9688931f5 cdriso: size bare 2048-byte ISOs by 2048-byte sectors
A cue-less image recognised as Mode 1/2048 still had its track length computed from 2352-byte sectors, so the last ~13% of the disc fell outside the track. The new CD-ROM code rejects seeks and reads there, which hangs games whose files sit near the end of the image.
2026-10-08 21:50:04 -07:00
Rix ab945c299f Merge pull request #2214 from nicolasnoble/thorvg-gles
Bumping minimum requested OpenGL version to 3.3 for ThorVG
2026-10-08 14:13:31 -07:00
Rix 8d1aaadfc9 Merge pull request #2259 from rixnobis/m2raw-verbatim
isobuilder: write M2_RAW sectors verbatim again
2026-10-08 07:49:22 -07:00
Rix 912286001d isobuilder: write M2_RAW sectors verbatim again
The CD-ROM rewrite merge brought back an EDC/ECC recompute in
writeSectorAt's M2_RAW case, which overwrites the tail of a raw payload
whose subheader says form 1. M2_RAW means the caller owns those bytes,
as everywhere else in the builder.
2026-10-08 06:48:00 -07:00