Age | Commit message (Collapse) | Author |
|
This reverts commit aafde6de7b2a28c1684c0e9fa62fee9a2a5398dd.
This was causing trimmed roms to fail to load.
|
|
|
|
This fixes issue #133
The explanation is as follows. Most blocks end on an inconditional
jump/branch, but there's two cases where this doesn't happen:
translation gates and when we hit MAX_EXITS. These are very uncommon
cases and therefore more prone to hidden bugs.
When this happens, the last instruction emits a conditional jump (via
arm_conditional_block_header macro) which is patched by a later
instruction via generate_branch_patch_conditional. Typically the last
unconditional branch will trigger the patching condition (which is
aproximately condition != last_condition), but in these two cases it
might not happen, leaving an unpatched branch. This makes x86 and ARM
dynarecs crash in interesting ways (although it might not crash
depending on $stuff and make the bug even harder to track).
|
|
This reverts commit 960d776dfcd5d2f071107be1ff08b1a16d275a3f.
This is now handled in custom SDL, so each emulator doesn't need to
handle it.
|
|
|
|
|
|
Gated MIPS_HAS_R2_INSTS not used at the moment. Tested with qemu.
|
|
|
|
Enable big-endian devices: gc/wii
|
|
This patch adds big-endian compatibility in gpsp (in general but only
for the interpreter). There's no performance hit for little-endian
platforms (should be a no-op) and only add a small overhead in memory
accesses for big-endian platforms.
Most memory accesses are wrapped with a byteswap instruction and I/O reg
accesses are also rewired for proper access (using macros). Video
rendering has been fixed to also do byteswaps but there's a couple of
games and rendering modes that still seem broken (but they amount to
less than 20 games in my tests with 1K ROMs).
This also adds build rules and CI for NGC/WII/WIIU (untested)
|
|
Remove macros in dma code
|
|
This reduces code size more than 20% (which is 200-300KB!).
DMA handling accounts for less than 0.5% the average emulation runtime
which doesn't justify the crazy optimization level that the code has. In
fact it's more than likely that the new code runs faster due to less
I-cache trashing.
|
|
Fix CI for OD beta
|
|
|
|
Some MIPS fixes
|
|
Seems that ABI mandates that we allocate space for arg0..4 even if we do
pass them as registers. For some reason write_io_register<> functions
write in that stack area (1 word) corrupting the s0 saved register.
This seems to be a new gcc behaviour?
|
|
This only needs some support to save/load state with 64 bit registers.
Since pointers remain 32 bit, no extra changes are needed in the
dynarec. Verified with qemu (qemu-mipsn32el) and miniretro.
|
|
This is required in PS2 but could also make older dingux devices run
gpsp on retroarch
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Add turbo A/B buttons
|
|
|
|
This should correct some minor issues in some games.
|
|
This might make a handful games slightly slower (but on the upper side
they work now instead of crashing or restarting).
Also while at it, fix some minor stuff in arm stubs for speed.
|
|
Add dedicated RetroPad fast-forward button
|
|
|
|
|
|
Cleans up a ton of whitespace in cpu.c (like 100KB!) and improves
readability of some massive decode statements.
Added an optimization for PC-relative loads (pool load) in ROM (since
it's read only and cannot possibily change) that directly emits an
immediate load. This is way faster, specially in MIPS/x86, ARM can be
even faster if we rewrite the immediate load macros to also use a pool.
|
|
|
|
An address check was missing to read aligned 32 (stm/ldm) data from
high mem areas (0xX0000000). This fixes SM4 EU that for some reason has
some weird memory access (perhaps a bug?)
|
|
Some minor formating too
|
|
This works on both interpreter and dynarec.
Tested in MIPS, ARM and x86, still needs some more testing, some edge
cases can be buggy.
|
|
|
|
This reverts commit fb7ca09b019248b9a0aba481ea55386f71053d73.
It seems that commit broke rolling in Minish Cap when using the ARM dynarec.
|
|
|
|
Using an invalid SP makes Vita crash (for an unkown reason) and makes
things like C signal handlers crash (luckily Retroarch doesn't use
them). It is also a violation of the ABI and not a great idea.
Recycled some little used registers to free SP. Perf should be roughly
the same.
|
|
|
|
|
|
This checks for USB hotplugging every 60 times audio is written. This
can be adjusted to favor performance vs reacting to hotplugs more quickly.
There are some errors that appear when unplugging the headset because
it tries to write audio to a device that has disappeared.
|
|
|
|
Was not writing to the right address (but decoded memory was working).
Most game worked well except those that depend on modifying the existing
palette bits (instead of copying from ROM/RAM). Fixes several games.
|
|
No need for it (faster) and avoid mis-aligning it across calls
|
|
|
|
Thanks to drowsnug for the original implementation of a subpixel
scaler. This scaler uses the core of that one, but smooths the
transition in the new pixels added during scaling.
If you think of the scaler as 4x integer scaling of the GBA screen,
and assigning each of those pixels to a subpixel, each subpixel takes
the value of 50% the pixel assigned, 25% of the pixel to its left, and
25% of the pixel to its right.
With the pixels:
BGRBGRBGRBGR
AAAABBBBCCCC
^--- this subpixel will be 1/4 A[G] + 1/2 B[G] + 1/4 B[G]
The first and last pixels in each batch are not blended with the
previous / next batch to keep them sharp.
|
|
|