Duckstation/src/core
Stenzek 8a1b4d8bee
DMA: Halt linked list transfers during pad transfer
Plenty of games seem to suffer from this issue where they have a linked list
DMA going while polling the controller. Having a large slice size causes the
serial transfer to complete before the silly busy wait in the BIOS poll routine
returns, resulting in it thinking that the controller is disconnected. Some
games are very sensitive to this (e.g. Newman Haas Racing), to the point that
even using a slice size of 1 is insufficient for avoiding the race, probably
due to the linked list layout.

Therefore, without major refactoring to ensure the CPU runs every DMA block,
and the associated performance penalty, we just halt the DMA until the serial
transfers have completed. To reduce the chances of this significantly affecting
timing, we add accumulate the ticks that have been "lost", and allow them to be
"used up" when the transfer does happen.
2024-04-07 18:55:03 +10:00
..
achievements.cpp dep/imgui: Update to v1.90.1 2024-01-19 21:22:26 +10:00
achievements.h System: Clear cheat list on reset 2024-02-06 22:24:33 +09:00
achievements_private.h Misc: Build fixes for Android 2023-11-04 20:11:51 +10:00
analog_controller.cpp AnalogController: Minimum deadzone/activation threshold should be 1% 2023-12-31 19:42:52 +10:00
analog_controller.h Misc: Add copyright/license statement to applicable files 2022-12-04 21:03:49 +10:00
analog_joystick.cpp ImGuiManager: Use PromptFont icons for input OSD 2023-11-26 21:35:29 +10:00
analog_joystick.h Misc: Add copyright/license statement to applicable files 2022-12-04 21:03:49 +10:00
bios.cpp Common: Drop String, add SmallString 2023-09-23 14:14:52 +10:00
bios.h BIOS: Add FindBIOSPathWithHash() 2023-08-30 22:20:36 +10:00
bus.cpp Bus: Direct KUSEG+KSEG0 isolated cache reads to ICache 2024-03-13 14:14:40 +10:00
bus.h System: Gracefully handle memory allocaion failure 2024-02-25 20:30:41 +10:00
cdrom.cpp CDROM: Don't send reports when subq isn't valid 2024-03-26 01:20:33 +10:00
cdrom.h System: Store game hash as well as serial 2023-05-15 23:39:07 +10:00
cdrom_async_reader.cpp Misc: Add copyright/license statement to applicable files 2022-12-04 21:03:49 +10:00
cdrom_async_reader.h CDROM: Add current file to debug window 2023-11-29 22:01:45 +10:00
cheats.cpp Settings: Add UserResources to EmuFolders 2024-01-10 22:46:57 +10:00
cheats.h Misc: Add copyright/license statement to applicable files 2022-12-04 21:03:49 +10:00
CMakeLists.txt Image: Swap stb for libpng/libjpeg 2024-03-07 00:02:35 +10:00
controller.cpp FullscreenUI: More localization fixes 2023-11-30 14:21:44 +10:00
controller.h Build: Move Image from common to util 2024-03-06 16:09:21 +10:00
core.props GameDatabase: Switch to YAML 2024-02-04 16:14:05 +10:00
core.vcxproj Build: Use deps DLLs on Windows 2024-03-24 16:02:59 +10:00
core.vcxproj.filters CPU/NewRec: Fix lui/mfc0 not getting called in CPU PGXP mode 2023-12-06 20:12:20 +10:00
cpu_code_cache.cpp CPU/CodeCache: Clear backpatch info for blocks when recompiled 2024-02-27 22:16:59 +10:00
cpu_code_cache.h System: Gracefully handle memory allocaion failure 2024-02-25 20:30:41 +10:00
cpu_code_cache_private.h CPU/NewRec: Fix PGXP desync 2024-03-30 00:46:38 +10:00
cpu_core.cpp CPU: Make interrupts actually edge-triggered 2024-03-18 01:46:19 +10:00
cpu_core.h CPU: Make interrupts actually edge-triggered 2024-03-18 01:46:19 +10:00
cpu_core_private.h CPU: Inhibit debug dispatcher when COP0 BP is invalid 2024-01-01 15:25:48 +10:00
cpu_disasm.cpp CPU: Fix GTE control register disassembly 2024-01-21 02:45:09 +10:00
cpu_disasm.h CPU: Fix GTE control register disassembly 2024-01-21 02:45:09 +10:00
cpu_newrec_compiler.cpp CPU/NewRec: Fix lwl/lwr on ARM 2024-03-31 23:49:40 +10:00
cpu_newrec_compiler.h CPU/NewRec: Speculative execution for mult/div 2024-02-24 14:57:30 +10:00
cpu_newrec_compiler_aarch32.cpp CPU/NewRec: Fix ARM32 (again) 2024-04-04 13:25:33 +10:00
cpu_newrec_compiler_aarch32.h CMake: Support multiple CMAKE_OSX_ARCHITECTURES 2023-11-25 00:50:12 +10:00
cpu_newrec_compiler_aarch64.cpp CPU/NewRec: Fix lwl/lwr on ARM 2024-03-31 23:49:40 +10:00
cpu_newrec_compiler_aarch64.h CMake: Support multiple CMAKE_OSX_ARCHITECTURES 2023-11-25 00:50:12 +10:00
cpu_newrec_compiler_riscv64.cpp CPU/NewRec: Fix lwl/lwr on ARM 2024-03-31 23:49:40 +10:00
cpu_newrec_compiler_riscv64.h CPU/NewRec/RISCV64: Implement PGXP 2023-12-21 02:00:19 +10:00
cpu_newrec_compiler_x64.cpp CPU/NewRec: Fix register corruption in swl/swr 2024-03-31 13:55:19 +10:00
cpu_newrec_compiler_x64.h CMake: Support multiple CMAKE_OSX_ARCHITECTURES 2023-11-25 00:50:12 +10:00
cpu_pgxp.cpp Misc: Combine some redundant functions 2023-12-13 20:56:40 +10:00
cpu_pgxp.h Misc: Combine some redundant functions 2023-12-13 20:56:40 +10:00
cpu_recompiler_code_generator.cpp CPU/Recompiler: Fix build error 2023-12-26 13:07:28 +01:00
cpu_recompiler_code_generator.h CPU/Recompiler/AArch32: Load membase on demand 2023-10-21 13:49:35 +10:00
cpu_recompiler_code_generator_aarch32.cpp CPU/NewRec: Fix lwl/lwr on ARM 2024-03-31 23:49:40 +10:00
cpu_recompiler_code_generator_aarch64.cpp CMake: Support multiple CMAKE_OSX_ARCHITECTURES 2023-11-25 00:50:12 +10:00
cpu_recompiler_code_generator_generic.cpp Bus: Protect main RAM buffer 2023-10-18 00:49:01 +10:00
cpu_recompiler_code_generator_x64.cpp SmallString: fmt -> format, format -> sprintf 2023-12-13 21:06:15 +10:00
cpu_recompiler_register_cache.cpp CPU/Recompiler: Fix jal/jalr to load delayed register 2023-12-15 21:46:30 +10:00
cpu_recompiler_register_cache.h CPU/Recompiler: Fix jal/jalr to load delayed register 2023-12-15 21:46:30 +10:00
cpu_recompiler_thunks.h CPU/CodeCache: Include hi/lo in state logging 2023-10-21 13:49:35 +10:00
cpu_recompiler_types.h CPU/NewRec: Fix ARM32 (again) 2024-04-04 13:25:33 +10:00
cpu_types.cpp Misc: Add copyright/license statement to applicable files 2022-12-04 21:03:49 +10:00
cpu_types.h Common: Add intrin.h 2023-10-01 17:24:34 +10:00
digital_controller.cpp ImGuiManager: Use PromptFont icons for input OSD 2023-11-26 21:35:29 +10:00
digital_controller.h Misc: Add copyright/license statement to applicable files 2022-12-04 21:03:49 +10:00
dma.cpp DMA: Halt linked list transfers during pad transfer 2024-04-07 18:55:03 +10:00
dma.h DMA: Convert to namespace 2023-01-11 19:15:59 +10:00
fullscreen_ui.cpp Qt: Add copy/clear game settings 2024-03-21 00:50:57 +10:00
fullscreen_ui.h FullscreenUI: Move functionality to Host 2024-01-20 20:29:33 +10:00
game_database.cpp GameDatabase: Warn if CPU mode is enabled and unnecessary 2024-04-03 22:58:20 +10:00
game_database.h GameDB: Add DisablePGXPPreserveProjFP trait 2024-03-23 14:11:28 +10:00
game_list.cpp Path: Add CreateFileURL() 2024-03-16 14:10:35 +10:00
game_list.h GameList: Add "File Size" field 2023-12-20 23:40:28 +10:00
gdb_protocol.cpp CPU: Implement memory breakpoints/watchpoints 2024-02-28 00:02:02 +10:00
gdb_protocol.h Misc: Add copyright/license statement to applicable files 2022-12-04 21:03:49 +10:00
gpu.cpp GPUDevice: Add support for feedback loops 2024-04-01 13:55:19 +10:00
gpu.h GPUDevice: Add support for feedback loops 2024-04-01 13:55:19 +10:00
gpu_backend.cpp GPU: Make VRAM a global object 2024-02-29 17:00:51 +10:00
gpu_backend.h GPU: Make VRAM a global object 2024-02-29 17:00:51 +10:00
gpu_commands.cpp GPU: Fix HW readback counter 2024-03-31 14:02:44 +10:00
gpu_hw.cpp GPU/HW: Don't create shader blend pipelines if disallowed 2024-04-04 13:25:33 +10:00
gpu_hw.h GPU/HW: Move pipelines to end of struct 2024-04-06 21:51:52 +10:00
gpu_hw_shadergen.cpp GPU/HW: Enable feedback loops for rendering 2024-04-01 18:12:52 +10:00
gpu_hw_shadergen.h GPU/HW: Enable feedback loops for rendering 2024-04-01 18:12:52 +10:00
gpu_shadergen.cpp GPU: Fix GLES compile error 2024-04-04 13:25:33 +10:00
gpu_shadergen.h GPU: Rewrite deinterlacing and add adaptive/blend modes 2024-03-16 14:14:15 +10:00
gpu_sw.cpp GPU: Rewrite deinterlacing and add adaptive/blend modes 2024-03-16 14:14:15 +10:00
gpu_sw.h GPU: Rewrite deinterlacing and add adaptive/blend modes 2024-03-16 14:14:15 +10:00
gpu_sw_backend.cpp GPU: Make VRAM a global object 2024-02-29 17:00:51 +10:00
gpu_sw_backend.h GPU: Make VRAM a global object 2024-02-29 17:00:51 +10:00
gpu_types.h GPU: Remove redundant fields 2023-12-14 20:23:49 +10:00
gte.cpp CPU: Add disassembly of GTE instructions 2023-12-17 00:38:11 +10:00
gte.h CPU: Add disassembly of GTE instructions 2023-12-17 00:38:11 +10:00
gte_types.h Misc: Add copyright/license statement to applicable files 2022-12-04 21:03:49 +10:00
guncon.cpp ImGuiManager: Use PromptFont icons for input OSD 2023-11-26 21:35:29 +10:00
guncon.h GunCon: Add relative pointer binding 2023-09-20 17:11:29 +10:00
host.cpp AudioStream: Re-add SDL backend 2024-03-20 22:46:20 +10:00
host.h Qt: Redesign graphics settings panel 2024-03-02 21:21:20 +10:00
host_interface_progress_callback.cpp PostProcessing: Add compile progress indicator 2023-12-14 20:23:48 +10:00
host_interface_progress_callback.h PostProcessing: Add compile progress indicator 2023-12-14 20:23:48 +10:00
hotkeys.cpp GPU/HW: Slightly reduce struct size 2024-03-01 13:51:16 +10:00
imgui_overlays.cpp GameDB: More settings 2024-03-05 00:02:22 +10:00
imgui_overlays.h SaveStateSelectorUI: Decouple current slot from list 2023-12-17 13:33:51 +10:00
input_types.h InputManager: Support inverted full axis 2023-01-15 15:13:54 +10:00
interrupt_controller.cpp CPU: Make interrupts actually edge-triggered 2024-03-18 01:46:19 +10:00
interrupt_controller.h CPU: Make interrupts actually edge-triggered 2024-03-18 01:46:19 +10:00
mdec.cpp DMA: Template transfer functions 2023-12-19 22:38:36 +10:00
mdec.h MDEC: Convert to namespace 2022-12-20 21:18:30 +10:00
memory_card.cpp Pad: Fix unconditional memory card replug on load state 2024-03-29 12:34:42 +10:00
memory_card.h Pad: Fix unconditional memory card replug on load state 2024-03-29 12:34:42 +10:00
memory_card_image.cpp MemoryCardImage: Handle 128KB GME files 2024-04-07 17:06:42 +10:00
memory_card_image.h MemoryCardImage: Report errors to caller 2024-04-07 13:23:00 +10:00
multitap.cpp Pad: Convert to namespace 2023-01-11 19:15:59 +10:00
multitap.h Misc: Add copyright/license statement to applicable files 2022-12-04 21:03:49 +10:00
negcon.cpp Misc: Warning fixes 2024-01-26 14:31:03 +10:00
negcon.h Add independent settings for NeGcon axes (#3094) 2024-01-22 14:41:19 +10:00
pad.cpp Pad: Fix unconditional memory card replug on load state 2024-03-29 12:34:42 +10:00
pad.h Qt: Fix labels when changing multi-tap controller type 2024-02-15 22:06:01 +09:00
pcdrv.cpp Misc: Remove StringUtil::{Starts,Ends}With, use C++20 2023-12-13 21:18:19 +10:00
pcdrv.h CPU: HLE implementation of PCDrv (host file access) 2023-04-29 20:45:39 +10:00
pch.cpp Build: Use precompiled headers 2023-09-02 21:44:08 +10:00
pch.h Build: Use precompiled headers 2023-09-02 21:44:08 +10:00
playstation_mouse.cpp ImGuiManager: Use PromptFont icons for input OSD 2023-11-26 21:35:29 +10:00
playstation_mouse.h GunCon: Add relative pointer binding 2023-09-20 17:11:29 +10:00
psf_loader.cpp SmallString: fmt -> format, format -> sprintf 2023-12-13 21:06:15 +10:00
psf_loader.h Misc: Add copyright/license statement to applicable files 2022-12-04 21:03:49 +10:00
resources.cpp Resources: Remove embedded crosshair image 2023-08-30 00:44:00 +10:00
resources.h Resources: Remove embedded crosshair image 2023-08-30 00:44:00 +10:00
save_state_version.h CPU: Make interrupts actually edge-triggered 2024-03-18 01:46:19 +10:00
settings.cpp Settings: Support saving WebP screenshots 2024-03-24 16:03:00 +10:00
settings.h Qt: Add copy/clear game settings 2024-03-21 00:50:57 +10:00
shader_cache_version.h GPU/HW: Enable feedback loops for rendering 2024-04-01 18:12:52 +10:00
sio.cpp Misc: Make struct member functions file-local 2023-11-18 16:46:11 +10:00
sio.h SIO: Convert to namespace 2023-01-11 19:15:59 +10:00
spu.cpp SPU: Ignore End+Mute flag for noise channels 2024-03-29 15:08:14 +10:00
spu.h CDROM: Convert to namespace 2023-01-09 22:20:27 +10:00
system.cpp System: Leave title empty when booting physical audio CDs 2024-03-25 23:24:41 +10:00
system.h System: Change "Auto Load Cheats" to "Enable Cheats" 2024-03-03 14:03:07 +10:00
texture_replacements.cpp Build: Move Image from common to util 2024-03-06 16:09:21 +10:00
texture_replacements.h Build: Move Image from common to util 2024-03-06 16:09:21 +10:00
timers.cpp CPU: Make interrupts actually edge-triggered 2024-03-18 01:46:19 +10:00
timers.h Timers: Convert to namespace 2023-01-11 19:15:59 +10:00
timing_event.cpp TimingEvents: Reset downcount when head is resorted 2023-10-17 13:14:05 +10:00
timing_event.h System: Refactor main loop 2023-08-16 01:13:00 +10:00
types.h Settings: Support saving WebP screenshots 2024-03-24 16:03:00 +10:00