Commit graph

59 commits

Author SHA1 Message Date
David Guillen Fandos
33f1e25099 Emit BIOS SWI entrypoint to ROM arena
This fixes a race condition that happens whenever the ROM cache is flushed but
the RAM one is not, causing any SWI calls (implemented as direct branches) to
jump to random instructions.
The fix could be to flush both caches at the same time (~expensive on
low mem platforms), use indirect jumps (a bit expensive) or emit the SWI
handler below the watermark to ensure it is never flushed. This is cheap
and effective, requires minimal changes.
2021-09-10 00:30:55 +02:00
David Guillen Fandos
b431a8a4b6 Merge stub arena into ROM cache for simplicity. 2021-09-09 19:06:15 +02:00
David Guillen Fandos
7068cbc95b New savestate implementation
This uses BSON as savestate format, to allow external tools to parse it
(so that we can add proper test of the states). The BSON is not 100%
correct according to spec (no ordered keys) but can be parsed by most
libraries.

This fixes also a bug in the savestate palette color recalculation that
was wrongly overwritting the original palette (which could cause some
problems on some games).

Also fixes some potential issues by serializing some more stuff and
cleans up unused stuff.

Testing shows that states look good and there's only minor differences
in audio ticks, related to buffer sizes (since buffer flushes are
de-synced from video frames due to different frequency).
2021-08-24 17:15:27 +02:00
David Guillen Fandos
1e976fb312 Remove unused stuff and fix const variables
Trying to figure out what needs to be part of a savestate :)
2021-08-24 10:57:30 +02:00
David Guillen Fandos
a3377c2ac1 Minor DMA cleanup 2021-08-21 18:10:12 +02:00
David Guillen Fandos
86b365f065 Remove unused variable 2021-08-21 16:59:07 +02:00
David Guillen Fandos
77803adcac Remove more unused stuff 2021-08-20 17:39:35 +02:00
David Guillen Fandos
7f7d066854 Remove video vars serialization
This is not needed at all, since the variables are not updated between
reload and end-of-frame (where we take our savestates). Added a reload
call during gba_load_state() to initialize it from the I/O regs.
2021-08-15 23:30:57 +02:00
David Guillen Fandos
c9421e6929 Some small cleanup to make the code more C++ conformant 2021-07-11 13:35:21 +02:00
David Guillen Fandos
8dbf5f6c17 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)
2021-06-27 01:16:28 +02:00
David Guillen Fandos
4fd456e158 Adding Code Breaker cheat support
This works on both interpreter and dynarec.
Tested in MIPS, ARM and x86, still needs some more testing, some edge
cases can be buggy.
2021-05-05 21:15:27 +02:00
David Guillen Fandos
71ebc49b59 Improve indirect jumps in ARM
Handle already translated blocks in the ARM asm to speed up indirect
branches (affect some games more than others)
2021-03-30 21:06:52 +02:00
David Guillen Fandos
a494a3f00e Move OAM update flag to a register
Fix a small bug in MIPS dynarec that affects non -G0 targets
2021-03-26 23:13:26 +01:00
David Guillen Fandos
eab44b9e0b Enable runtime dynarec enable/disable
Added a more thorough cache cleanup for reset/mode-change too.
Fixed the mmap initialization that ends up leaking memory.
Minor x86 asm fixes for Android.
2021-03-17 21:05:49 +01:00
David Guillen Fandos
fb7ca09b01 Remove BIOS reserved translation area
This is not really necessary since it can share area with ROM.
Performance impact should be very minimal (haven't noticed it myself)
and could be compensated (even by a positive offset) if we bump the ROM
cache area size.
Tested with several dynarecs.
2021-03-17 18:33:02 +01:00
David Guillen Fandos
5ffd2832e8 Rewrite of the MIPS dynarec stubs
This allows us to emit the handlers directly in a more efficient manner.
At the same time it allows for an easy fix to emit PIC code, which is
necessary for libretro. This also enables more platform specific
optimizations and variations, perhaps even run-time multiplatform
support.
2021-03-16 22:58:58 +01:00
David Guillen Fandos
5127f4b5cc Remove PSP-specific stuff from MIPS backend
This is unnecessary since newlib supports all file I/O.
This is needed for other mips ports
2021-03-10 18:41:37 +01:00
David Guillen Fandos
56dc6ecb70 Remove libco
This removes libco and all the usages of it (+pthreads).
Rewired all dynarecs and interpreter to return after every frame so that
libretro can process events. This required to make dynarec re-entrant.

Dynarecs were updated to check for new frame on every update (IRQ, cycle
exhaustion, I/O write, etc). The performance impact of doing so should
be minimal (and definitely outweight the libco gains). While at it,
fixed small issues to get a bit more perf: arm dynarec was not idling
correctly, mips was using stack when not needed, etc.

Tested on PSP (mips), OGA (armv7), Linux (x86 and interpreter). Not
tested on Android though.
2021-03-08 18:44:03 +01:00
bmaupin
89e55e9902 Reenable native file IO on PSP 2019-10-03 13:53:34 -04:00
twinaphex
5ebf76a41f Provide two comments 2014-12-11 02:32:14 +01:00
twinaphex
0bc2a111d7 Demacro-ize main.c 2014-12-11 02:29:51 +01:00
twinaphex
51d78afa09 Add HAVE_DYNAREC ifdef 2014-12-10 17:06:09 +01:00
twinaphex
7a0b0cba45 Style nits 2014-12-10 15:47:19 +01:00
aliaspider
f10da5d664 cleanups 2014-12-10 13:10:25 +01:00
aliaspider
a926a68eb3 cleanups 2014-12-10 12:53:26 +01:00
aliaspider
41484cd73c use correct save directory. 2014-12-10 12:00:12 +01:00
aliaspider
ad485d434a implement retro_serialize/unserialize 2014-12-10 11:06:17 +01:00
twinaphex
7252c226bf Cleanups - main.c 2014-12-09 21:48:21 +01:00
twinaphex
35b71ff223 Clean up some unused stuff 2014-12-09 21:32:00 +01:00
twinaphex
92812a1213 Remove unused clock_speed variable 2014-12-09 17:34:37 +01:00
twinaphex
4b4a78878b Remove set_clock_speed 2014-12-09 17:32:51 +01:00
twinaphex
5c949f38e4 Assume PC_BUILD 2014-12-09 17:18:45 +01:00
twinaphex
a39ed082f7 Remove useless GUI font code 2014-12-09 16:45:14 +01:00
twinaphex
a4a7f66364 Remove gui.c 2014-12-09 16:40:21 +01:00
twinaphex
4a2c77bcc9 Remove zip.c/zip.h 2014-12-09 15:33:14 +01:00
aliaspider
b69fee8b31 video output now works in statically linked builds.
core can't be used as a shared library yet due to the dynarec not
working when compiled with -fPIC
2014-12-09 05:16:09 +01:00
aliaspider
3510bfb528 hide some warnings 2014-12-09 02:11:22 +01:00
aliaspider
50df6df600 fix undefined referances. 2014-12-09 01:59:02 +01:00
aliaspider
8f9b841f72 can compile 2014-12-09 00:17:28 +01:00
twinaphex
3af92d87a1 Take out Windows CE code 2014-07-14 04:54:52 +02:00
twinaphex
093a70482f Get rid of PND_BUILD/RPI_BUILD/POLLUX_BUILD/GIZ_BUILD 2014-07-14 04:50:52 +02:00
Dave
ffa573f880 raspberry pi port 2013-03-07 23:16:38 +02:00
notaz
108c704a36 initial Caanoo port
plus some random tweaks
2012-10-06 19:15:06 +03:00
notaz
40a392b00d make sound reinitable
this will be used for Caanoo overclocking workaround
2012-10-05 02:00:26 +03:00
notaz
ffc30d2567 u7/pandora release 2011-09-08 03:08:42 +03:00
notaz
d40aa461c5 make romdir saving not GP2X specific
not using config as it's binary, this is intended to be user editable.
2011-09-08 00:48:33 +03:00
notaz
d0944fc942 store saves and configs in gpsp dir
Don't like ROM dir littering.
Still looking there for .sav and .cht files though.
2011-09-08 00:48:33 +03:00
notaz
bbba320911 enable -Wall and fix warnings reported by it 2011-09-06 00:18:06 +03:00
notaz
eb3668fc5d initial pandora port, with hardware scaling and stuff 2011-09-06 00:18:01 +03:00
notaz
43c24b301d refactor GP2X stuff for pandora reuse 2011-09-04 20:19:13 +03:00