Add GoemonUnloadTlb function that invalidate TLB cache.
Currently the function is only used on the interpreter. It fixes TLB error after a reload of data.
Next step: porting to the recompiler
When a tlb miss is detected current instruction must be skipped. We need
to immediately switch to the handler
Typical instruction bug case:
lw a0, 0x8(a0)
a0 mustn't be loaded if we have a miss
v2: create a dedicated exception for tlb miss
v3:
* rename exception to CancelInstruction
* add a basic state machine on the exec loop so we keep same behavior
for eeloadReplaceOSDSYS and eeGameStarting
v4: remove assert
VTLB does some nonsense with signed integers for the pointers.
We've got to make sure to set the signed bit in the correct bit on 64bit pointers so it works.
This has no functional change on x86_32, it's mostly just changing a few pointer to u32 conversions to uptr and sptr.
I can not yet confirm if this runs on x86_64, but compiling is enough of an issue currently.
Tlb mapping is stored @0x3d5580 (GoemonTlb[150])
The function that will populate the tlb is around pc = 0x356250, ra = 0x33ad48
The idea is to add a callback on 0x33ad48 block that will populate the tlb based on
ee mem content.
Note: The hack is based on previous Virtual PS2 => Physical PS2 LUT
note: automatic gamefixes are done after done after the init that why code was splitted.
note2: The LUT is 4MB and only used for only 1 game. So I only allocate it when the gamefix is
enabled
* Fix some issue with the new debugger on linux
* Enable the previous tlb miss fix on the interpreter
* disable the building of po by default. It pollute too much my env.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5914 96395faa-99c1-11dd-bbfe-3dabce05a288
Currenty code isn't activated because it will crash any game that do a tlb miss (with the recompiler)
However if you activate the code with the interpreter, the exception will be fired and new tlb setting
will be loaded => got nice picture with "Bouken Jidai Katsugeki"
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5911 96395faa-99c1-11dd-bbfe-3dabce05a288
Translators note: I save previous translation but a careful review is mandatory
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5366 96395faa-99c1-11dd-bbfe-3dabce05a288
Threading VU1 took a lot of rewrites and new code to make possible (MTGS, microVU, gifUnit...), but we finally got to the point where it was feasible, and now we've done it! (so now everyone can stop complaining that pcsx2 only takes advantages of 2 cores :p).
The speedups in the games that benefit from it are great if you have a cpu with 3+ cores (generally a 10~45% speedup), however games that are GS limited can be a slowdown (especially on dual core cpu's).
The option can be found in the speedhacks section as "MTVU (Multi-Threaded microVU1)". And when enabled it should should show the VU thread-time percentage on the title bar window (Like we currently do for EE/GS/UI threads).
It is listed as a speedhack because in order for threading VU1 to have been a speedup, we need to assume that games will not send gif packets containing Signal/Finish/Label commands from path 1 (vu1's xgkick). The good news is very-few games ever do this, so the compatibility of MTVU is very high (a game that does do this will likely hang).
Note: vs2010 builds and Linux builds need to be updated to include "MTVU.h" and "MTVU.cpp".
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4865 96395faa-99c1-11dd-bbfe-3dabce05a288
Note: Once DoA2 is ingame (start of fight), you can switch to the EE Rec until the fight is over with good speed! Hopefully one day someone will be brave enough to implement it on the rec side so you dont have to mess about :P
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4309 96395faa-99c1-11dd-bbfe-3dabce05a288
* Added some bounds checking to debug builds for VTLB mappings.
* Fixed a VU mapping bug that caused boot crashing
* Fixed some startup, shutdown, and reset resource management.
git-svn-id: http://pcsx2.googlecode.com/svn/branches/newHostVM@4021 96395faa-99c1-11dd-bbfe-3dabce05a288
* Includes a minor tweak to DMAC.h - removed tDMA_TADR / tDMA_MADR / etc. and replaced them with a single tDMAC_ADDR class.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3644 96395faa-99c1-11dd-bbfe-3dabce05a288
* Now using SSE for all hardware register reads and writes (mainly MFIFO stuff) [don't expect a speedup, really -- its more of a code simplification in this case].
* [refactoring] Changed the EE Memory (vtlb) to use the u128 type instead of u64 for the 128-bit loads/stores (see mem128_t typedef)
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3626 96395faa-99c1-11dd-bbfe-3dabce05a288
* Added __fi and __ri, which are abbreviations for __forceinline and __releaseinline.
* Added some static qualifiers to functions in mVU, MMI ops, and others where appropriate.
* Removed some unnecessary __fastcall qualifiers (since GCC gets funny sometimes when you combine __fastcall and inlining).
* Made _1mb, _16mb, _1gb values common to all emulation code (moved from newVif/mvu to Common.h) -- they're useful! :)
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3624 96395faa-99c1-11dd-bbfe-3dabce05a288
* Some minor exception/error handling fixes and improvements.
DevNote: the BOOT2 elf loader fix is still a hackfix. I documented the proper fix for mimicking PS2 BOOT2 parsing, but not in a mood to do the full proper implementation right now.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3442 96395faa-99c1-11dd-bbfe-3dabce05a288
I also re-implemented R5900 runtime exception handling for TLB Miss and such (devbuilds only, for now).
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3335 96395faa-99c1-11dd-bbfe-3dabce05a288
* Added DX11 support. DX11 enabled cards now give a +~40% speedup
* New SSE-X instructions we invented for PCSX2. Give a +200% speedup even on old CPUs.
* Full 64bit support. If you have 64 bit windows, be prepared for a 300% speed up.
* Implemented new DMAC, so far we have ~15 games that show improvements.
* Added support for USB-enabled vibrators. Feel the full pleasure of gaming, now also with PCSX2!
* SPU2-X now decodes Dolby Digital 7.1!
* Please test to find any bugs in the 24-thread code, it's a bit complex so some tiny bugs might have crept in.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3000 96395faa-99c1-11dd-bbfe-3dabce05a288
In some rare cases this makes games continue when they'd crash otherwise.
We'll have to see if proper exception handling fixes it in a better way.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2801 96395faa-99c1-11dd-bbfe-3dabce05a288
Fixed Console spam in MGS3, made the MTGS startup timeout longer (as per request), re-added the vtlb miss warnings.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2682 96395faa-99c1-11dd-bbfe-3dabce05a288
* Switched the SysCoreThread to a static (fully persistent) thread.
* Added some listeners for when the CoreThread status changes
* fixed some slowness in savestates, and the emu will now stall until savestates complete, if you try to exit too quick (avoids savestate corruption)
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1993 96395faa-99c1-11dd-bbfe-3dabce05a288
* Completely new assertion macros: pxAssert, pxAssertMsg, and pxFail, pxAssertDev (both which default to using a message). These replace *all* wxASSERT, DevAssert, and jASSUME varieties of macros. New macros borrow the best of all assertion worlds: MSVCRT, wxASSERT, and AtlAssume. :)
* Rewrote the Console namespace as a structure called IConsoleWriter, and created several varieties of ConsoleWriters for handling different states of log and console availability (should help reduce overhead of console logging nicely).
* More improvements to the PersistentThread model, using safely interlocked "Do*" style callbacks for starting and cleaning up threads.
* Fixed console logs so that they're readable in Win32 notepad again (the log writer adds CRs to naked LFs).
* Added AppInit.cpp -- contains constructor, destructor, OnInit, and command line parsing mess.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1950 96395faa-99c1-11dd-bbfe-3dabce05a288
* Moved the x86 emitter to /common, so that plugins can link against it if they wish.
* Created a new "utility" class in /common which houses string utils, fast memcpy, common exception classes, and other handy dandies.
* Removed old-style linux automake files from the pcsx2 dir since they were hopelessly out of date (and their multi-file-per-line format makes svn merging impossible >_<)
git-svn-id: http://pcsx2.googlecode.com/svn/branches/wxgui@1454 96395faa-99c1-11dd-bbfe-3dabce05a288