* Release 20251204
* Update sys
* Implement real Mechacon backward-seek behavior (skip only when ≥2 sectors behind)
Fix for Dave Mirra / Trasher games
https://github.com/MiSTer-devel/PSX_MiSTer/issues/169
* keep track of savestate slot status and allow load only for valid states/slots
* Add optional Backward Seek Hack (OSD toggle) - fix Dave Mirra/Thrasher games
Fix for Dave Mirra/Thrasher is generally safe for most titles (tested over 200+ games ), but known to cause issues in some Army Men games.
It must be some edge case that cannot tolerate this change. Anyway, the problem with Dave Mirra is also like that :)
Kept as an unsafe optional setting until a proper fix is available. This is the best solution for now, and it would be a shame to lose the opportunity to comfortably play Dave Mirra and Trasher games
* Add optional Backward Seek Hack (OSD toggle) - fix Dave Mirra/Thrasher games
Fix for Dave Mirra/Thrasher is generally safe for most titles (tested over 200+ games ), but known to cause issues in some Army Men games.
It must be some edge case that cannot tolerate this change. Anyway, the problem with Dave Mirra is also like that :)
Kept as an unsafe optional setting until a proper fix is available. This is the best solution for now, and it would be a shame to lose the opportunity to comfortably play Dave Mirra and Trasher games
* Update README.md
* Update PSX.sv
* CD: Fix INT1 handling
CD: Fix INT1 vs INT3 interrupt ordering
Some games rely on very strict CDROM interrupt ordering and timing:
Gokujou Parodius Da! Deluxe Pack and Crime Crackers require INT1 to be visible immediately after a sector becomes readable.
Jikkyō Powerful Pro Yakyū ’95 relies on INT3 responses being fully processed before INT1, otherwise FIFO responses are read in the wrong order, causing music stutter.
This change refines INT1 delivery logic.
INT1 is forced immediately when no conflicting INT3 is active (required by Parodius / Crime Crackers).
INT1 is deferred (queued) when INT3 is currently active, preventing response/FIFO ordering issues (required by Jikkyō ’95).
Any active non-INT1 IRQ is preserved using the existing pendingDriveIRQ mechanism.
* Update PSX.sv
* Update README.md
* CD: fix DMA read from empty sector buffer
- The previous code could start a CD-ROM DMA transfer even when sectorBufferSizes(readPtr) was zero, and it cleared the buffer size flag before copySize was latched, leading to reads from empty buffers and propagation of invalid data.
- The new logic only starts DMA when a valid sector is present and latches the sector size before clearing the ready flag, eliminating the race condition.
* CD: Fix PAUSE timing to match psx-spx and DuckStation
* CD: prevent DMA from empty sector buffers while allowing RAW reads
fixes some regressions (Gran Turismo 2)
* rework INT1 handling
fix regression Burger Burger
* add cpu exception breakpoint functionality
* CD: correct PAUSE behavior during seek and early read states (fix Parasite Eve II)
Parasite Eve II issues a PAUSE command while a seek is still in progress and expects the pending read to be cancelled.
The previous logic rejected PAUSE too broadly, causing the read to execute after the seek and hang the loading screen.
This change accepts PAUSE during SEEK and stops the pending read, restoring correct PE2 behavior.
* reverting changes for “pause swap”
* CD: Correct Pause handling during SEEK
fix Vigilante 8: 2nd Offense black screen
https://github.com/MiSTer-devel/PSX_MiSTer/issues/296
* unnecessary backward seek hack removed
The issue wasn't caused by backward seek itself, but by interrupt ordering.
There was a race condition between INT1 (Data Ready) and INT3.
Fixed with commit be26ea591e
* unnecessary backward seek hack removed
The issue wasn't caused by backward seek itself, but by interrupt ordering.
There was a race condition between INT1 (Data Ready) and INT3.
Fixed with commit be26ea591e
* unnecessary backward seek hack removed
The issue wasn't caused by backward seek itself, but by interrupt ordering.
There was a race condition between INT1 (Data Ready) and INT3.
Fixed with commit be26ea591e
* Update README.md
unnecessary backward seek hack removed
* unused warning bit removed
* Update README.md
* Update sys_top.sdc
* Delete PSX_20251204.rbf
* Revert "Update sys_top.sdc"
This reverts commit 2058c5ef45.
---------
Co-authored-by: RobertPeip <53250236+RobertPeip@users.noreply.github.com>
Co-authored-by: jackyangantelope <jack@retroremake.co>
Co-authored-by: kuba-j <jhajda@poczta.fm>
Co-authored-by: Robert <->
Co-authored-by: dtungsten <github@draketungsten.net>
- SPU: add debug feature to trigger a SPU IRQ
- Preliminary change for black screen on screen transition. Might change in future commits, as it's framework related
- GPU: GPUSTAT_DrawingOddline on moved one line earlier in 480i mode -> fulfills test against hardware
- disable automatic reset when switching CDs while LID is open in OSD
- DMA: corrected block mode pausing
- DMA: corrected linked list mode starting pause, and timing between list entries
- DMA: simplified linked list mode data reading and autoread logic
- SDRAM: change 8 word burst to 4*2 word bursts to allow for unwrapped page reads for DMA
- restructure savestates for memctrl, dma, timer and sio (resource reduction)
- fix cheats being turning off when turbo is on
- DMA: add separate state for DMA start and reduce start intitial overhead by 2 cycles
- RAM: ram reqprocessed only used for dma now -> removes risk of CPU reads influencing DMA reads
- Savestates: fix reset when loading .exe files
- DMA: due to seperate ram ready signals for DMA, DMA does not have to wait for pending data before switching back to CPU -> lower latency when DMA ends
- DMA: unify blocklength calculation for DMA to/from SDRAM
- Savestates: wait for valid spot before going into reset/savestate load
- Savestates: add retry logic if reset ends in permanten pausing or permanent not pausible situation
- Memory: don't access savestate data as cpu cache -> fixes random bugs after taking a savestate(bug introduced with last build)
- Memory: unify data rotation for data from ram and bios
- exe loading: store header values at .exe download instead of fetching them from sdram later
- CD: increased minimum seek time until better values/model are implemented(Transformers: fixes hang in loading screen)
- option for fixed CD speed added(1X-8X)
- error overlay off by default
- GPU: restructure most GPU modules to complete VRAM request even when core is paused
- GPU: don't reread fetched vram data after unpausing
- Digital pad can now use left Analog Stick as virtual DPad
- SNAC input pins clocked in twice to prevent metastability
- Joypad: added ack hold time (fixes Resident Evil controller loss)
- fix widescreen hack wraparound glitches
- add widescreen hack modes for 5:3 and 3:2
- longer savestate wait when saving to sdcard, no wait when not saving
- shift vsync for PAL
- don't force refresh when going into DMA -> 1 cycle faster DMAs
- decrease DMA setup time by 1 cycle
- skip empty liked list DMAs -> 5 cycles less
- CPU: block IRQ after after Exceptions(fixes e.g. FF8)
- DMA: writing to D_CHCR does not always request DMA
- DMA: writing to DPCR does not always request DMA
- DMA: manual request works now for all channels
- DMA: don't start and wait with DMA when CPU is in middle of memory access anyway
- DMA resource usage reduced
- added REPtimingGPU for vram2vram
- deactivated gun crosshair because of resource usage
- added "Advance Pause" debug feature: advance 1000 clock cycles in pause mode for each press