Previously, the code used a lot of "bitwise AND" to get specific bitfields of the interrupt mask control register, which makes the code look a bit hacky, also it's even more hard for normal people to calculate the value when hexadecimal values are used for the bitwise operations where the register is totally binary. Instead of dealing with all those mess, let's just get the bitfield values from the already implemented nice union of the IMR register. FWIW it also makes the code more readable.
CID 168623 (#1 of 1): Missing break in switch
(MISSING_BREAK)unterminated_case: The case for value
GS_VideoMode::Unknown is not terminated by a 'break' statement.
* More accurate to PS2 behavior and avoids an useless SMODE write function, it makes sense to also move this as video mode specific colorburst detection was already moved to SetGsCrt.
No functional changes done, the current commit helps us to pass vertical frequency values of individual video modes to GUI code for accurate percentage calculation on titlebar. (which is done on the succeeding commit)
* Fixes a bug where NTSC VideoMode was automatically used when videomode is uninitialized. the bug was only temporary till the SMODE register was written.
Technically there's no term called "RegionMode" and the values obtained through the SMODE1 register is actually used for identifying the video mode of the game not any region modes.
* Convert "GS_VideoMode" into an enum class
* The detected values using the SMODE registers were for the video modes and not the region of the game, changed the variable naming to video modes to prevent any confusions.
* Fix a bug where 1080I was reported as progressive
* Convert GS_VideMode into an enum class
* Move VideoMode init code from _gsSMODEwrite to SYSCALL
* PCSX2 will now correctly report whether the video mode is NTSC/PAL/VESA/480p/576p/720p/1080i/1080p
No one knows how any games even started in the broken state and we prefer code being sane('ish) over one game miraculously working. The change is pretty big so it needs some good testing!
-Fix up Vsync again, broken back in google code days, broke Fatal Fury, matches PS2 test again.
-Corrected the Vsync Gate 0, which was the wrong way around, Causing Legendz Gekitou not to work unless Vsync was wrong
In order to flush data with some delay after save-to-memory-card, the code was
calling sioNextFrame() on each frames (60 times/s) continuously as long as the
emulation is active, regardless if FMC is in use or if memory cards in general
are in use.
Further to that, each call to sioNextFrame calls 8 times into the memory card
plugin even if FMC is not in use, resulting in overall ~500 calls/sec with the
sole goal of facilitating delayed flush after MCD save with folder memory cards.
This patch is a hack to call it once per second instead of 60 per second, but we
need to remove this call completely.
The delayed flush will now happen after 60-120 frames instead of exactly 60.
When a custom PAL/NTSC frame rate is used, PCSX2 respects it for PAL and NTSC,
but disrespected it for NTSC-progressive mode (used hardcoded 30/60). Fixed.
Also, when a custom rate was used, the console message displayed half the rate
which was configured. Now print the actual rate.
FileMemoryCard: Log reads and writes so I know what kind of commands I have to deal with.
FolderMemoryCard: Create basic class/method outline based on FileMemoryCard.
FolderMemoryCard: Add a FolderMemoryCardAggregator so I don't have to write every method in a way that has to handle more than one memory ca
Also shuffle around the location of code because C++ cares about stuff
needing to be defined before they're usable.
FolderMemoryCard: Implement Open().
FolderMemoryCard: Implement GetSizeInfo().
FolderMemoryCard: Implement some basic structure of Read()
FolderMemoryCard: Implement parts of Read() and Save().
Shouldn't it be Write() or Load()? Anyway, this doesn't work yet, but it
gets part of the formatting procedure done which is at least something!
FolderMemoryCard: Add method to calculate ECC.
FolderMemoryCard: Start implementing the FAT.
MemoryCard: More logging.
FolderMemoryCard: Formatting works now!
Formatted memory card isn't actually recognized as formatted yet because I don't store folder metadata yet, but we're getting there!
FolderMemoryCard: Recognize when it's trying to access a data cluster.
FolderMemoryCard: Add directory/file entry support.
On further inspection this might not a be a good way to handle erasing.
FolderMemoryCard: Method to get a file entry and file path from a file's data cluster.
FolderMemoryCard: wxDirName is garbage, let's just use wxFileName for the folder too...
FolderMemoryCard: Fix Erase method.
FolderMemoryCard: Start implementing file writes.
This is still quite broken but we're getting somewhere here!
FolderMemoryCard: Load the data from the host file system into the memory card on emulation start.
Also store superblock to host file system on end.
FolderMemoryCard: Fix a few warnings.
FolderMemoryCard: Implement file reads.
FolderMemoryCard: Proper ECC reads.
FolderMemoryCard: Reads to unmapped locations should return all 0xFF.
FolderMemoryCard: Some sort of working WriteToFile.
(Note: Doesn't always work depending on what order data gets written...)
FolderMemoryCard: Forgot a 'b' for reading files in binary mode. Whoops.
FolderMemoryCard: Load timestamps from the host filesystem.
FolderMemoryCard: r+b needs the file to exist so create if it doesn't.
FolderMemoryCard: Failsafe to allow non-sequential writes.
FolderMemoryCard: Use a cache for writes. Does not flush to host FS yet!
FolderMemoryCard: Flush the data written to the cache to the host file system on exit.
FolderMemoryCard: Since we have a cache now, remove code related to formatting, it's no longer needed.
FolderMemoryCard: More binary file mode mistakes...
FolderMemoryCard: Make it actually possible to disable/eject cards.
FileMemoryCard: Revert changes made for logging data.
FolderMemoryCard: Remove excessive logging.
MemoryCard: Note that the superblock struct is no longer unused.
FolderMemoryCard: A disabled card shouldn't try writing data on exit.
FolderMemoryCard: Log when flushing data.
FolderMemoryCard: Replace plain constants with const variables.
Should make it easier in the future to change the memory card size, if
needed.
FolderMemoryCard: Sort of handle the case when the total size of files in the memory card folder exceed the size of the card.
Not elegant but prevents ugly errors. The file that caused the card to
"overflow" will be seen as corrupted data by the PS2 browser.
FolderMemoryCard: Some sanity checks.
FolderMemoryCard: superBlock member really should have that m_ too to be consistent.
MemoryCard: Switch back to FileMemoryCard for merging.
FolderMemoryCard: Implement GetCRC() via a timestamp of the last memory card write.
Reasoning:
Regarding auto-ejecting on save load, I see that the current
implementation checks that by comparing memory card CRC and reinserting
if it mismatches. Since it's actually just about seeing if the memory
card state of the savestate and the current state match, my GetCRC() now
returns a millisecond timestamp of the last time the card was written
to. This should work out to the intended result, though I had to use
wxGetLocalTimeMillis() instead of wxGetUTCTimeMillis() since the latter
isn't available for some reason.
Fix GCC warnings and error.
MemoryCard: Switch implementations via a #define.
FolderMemoryCard: Add a NextFrame() method that should be called once per frame. Flushes written data to the host file system after a certain amout of frames have passed without any writes (currently 60).
MemoryCard: Add the NextFrame() method to the plugin API.
Counters: If the FolderMemoryCard is selected, inform it every frame in VSyncEnd() that a frame has passed.
VSyncEnd: Probably better to inform the memory card before the frame limiting.
Fix error when using wxWidgets >= 3.0.
FolderMemoryCard: Extract into its own .h/.cpp files.
FolderMemoryCard: Change cache to a map to reduce memory usage.
FolderMemoryCard: More gracefully handle lack of space when adding files.
The detection is based on a quickly reversed smode1 flag and needs to be done properly.
The timing itself also needs reversing and has only been tested on the VP2 intro video.
(That video now runs without audio / video desync when progressive scan is enabled :) )
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5179 96395faa-99c1-11dd-bbfe-3dabce05a288
* Writes via 16 and 8 bit ops now use 32-bit read/modify/write operations by default; which should enable nearly complete support for all such operations (instead of the formerly spotty coverage before).
* Eliminated almost all former 8/16-bit specific register operations. All code shares the same 32 bit handlers now.
* Completely revamped the developer trace logs for hardware registers! *ALL* registers are logged now, complete with address, name, and value being read/written (and nicely formatted!).
* Handlers are now fully page-based using templated functions (minor speedup)
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3704 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
DevNote: I could have left the code for the freezes in, except I *really* don't want us to ever have to resort to using such a system ever again in the future. For anything. (its just not safe on modern optimizing compilers)
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3392 96395faa-99c1-11dd-bbfe-3dabce05a288
* Make the new MTGS register packet during vsync not upload 0xf0->0x100. This is technically GS internal register space that the GS plugin may update or modify as it processes GIFtags. Thus, PCSX2 shouldn't touch it.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3331 96395faa-99c1-11dd-bbfe-3dabce05a288
* Added versioning info to savestates! (along with some other bugfixes)
* Simplified the Boot and System menus -- removed the old Skip BIOS hack and replaced it with the new BOOT2 injection method (which is considered hack-free at this time).
* Removed lots of UI deadlock gotchas.
* Some new confirmation dialogs and better error handling.
* Implemented an exclusive SysExecutor thread, which serves the purpose of executing system/VM commands and events in uninterrupted order (including suspend, resume, savestates, etc.)
* ... and probably broke linux!
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2911 96395faa-99c1-11dd-bbfe-3dabce05a288
* Configuration panels are all modal-less now, so that you can open the config panel and leave it open while running games.
* Handful of thread sync improvements.
* Fixed on-the-fly interpreter/recompiler configuration.
* Fixed plugin hotswapping (mostly works, but still a little funny at times)
* All new assertion dialogs and popup message handlers.
* RecentIsoList defaults to 12 instead of 6
Dev Notes:
* I had to create a new set of assertion functions called pxAssume*. Originally I hoped to avoid that complexity, and just use a single one-assert-fits-all case, but turned out blanketly using __assume() for all assertion cases wasn't reliable.
* wxGuiTools: Replaced the operator, with operator& -- the latter has proper order of precedence, the former required () to scope correctly. >_<
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2339 96395faa-99c1-11dd-bbfe-3dabce05a288
* Better error handling for when sVU fails allocating memory at a specific location (should fail less).
* Partial support for detecting and handling non-SSE2 machines with some grace.
* Improved sVU's allocation chances with a second try at another randomish address (and removed alloc fail spam from the console -- only logs on complete fail now).
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2321 96395faa-99c1-11dd-bbfe-3dabce05a288
* Added more colors!
* VM's EE/IOP logs (the ones that come from the emulated games themselves) are colored accordingly: EE are faint cyan, IOP are faint yellow. They're intentionally "hard to read" because 99% of the time they're meaningless trivia (but still cool since it's what the actual devs would have used for developing the games!).
Dev Notes:
* Removed Console.Status (specify blue/green colors manually if you want them).
* Renamed Console.Notice to Console.Warning.
* I changed the overloads so that both char* and wxChar* versions work like printf now (no need to use wxsFormat when working with unicode strings). I also removed wxString& versions of the overloads. This should (I hope) also be an easier port to wx2.9 or 3.0, when that time comes.
* Default log color is now black instead of gray; typically you'll want to manually specify Color_Gray when doing high volume logging (like the EErec's block tracking in debug builds).
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2091 96395faa-99c1-11dd-bbfe-3dabce05a288