aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2019-11-20Merge pull request #147 from senquack/cdrom_sstate_fixnotaz
cdrom: add missing BCD->int convert in cdrFreeze()
2019-11-12cdrom: add missing BCD->int convert in cdrFreeze()Daniel Silsby
For some Eboot .PBP game images, when loading a savestate, a zlib error like 'uncompress failed with -5 for block 5383, sector 86132' would be output to stdout/stderr. The savestate would still be playable, though. Traced it down to cdrFreeze() failing to convert cdr.Prev from BCD->int when calling ReadTrack(). Note that the odd 'cdr.Prev[0]++;' line seems to be someone's hacky way of forcing ReadTrack() to avoid skipping what it thinks is a duplicate sector read.
2019-11-11Merge pull request #146 from senquack/gpulib_fixnotaz
gpulib: fix out-of-bounds reads in do_cmd_buffer()
2019-11-08gpulib: fix out-of-bounds reads in do_cmd_buffer()Daniel Silsby
When gpu.cmd_buffer[] is filling up, and the last 1 or 2 words in it are the beginning of a new vram read/write cmd, do_cmd_buffer() would access out-of-bounds, reading garbage pos/size data. Fixes corrupted gfx in this PS1 .exe test utility: https://github.com/PeterLemon/PSX/tree/master/CPUTest/CPU/LOADSTORE/LW (This and all similar tests on Peter's site). Note that gfx access in this utility is done entirely through cmds given through GPUwriteData(), i.e. direct CPU->GP0 stores, not DMA.
2019-08-03Merge pull request #139 from retro-wertz/patch-3notaz
Fix corrupted memory card saves when using HLE
2019-08-03Fix corrupted memory card saves when using HLEretro-wertz
- This is fixed by adding the missing SaveMcd() to buwrite(). Tested on Wild Arms and Breath of Fire III
2019-07-24Merge pull request #137 from gameblabla/hlenotaz
HLE BIOS improvements (based on nocash doc, pcsx4all, upstream pcsxr etc...)
2019-07-22psxbios: Don't accept 400h as a valid sector.gameblabla
Notaz said this could corrupt the emulator (even though the console allowed this and it was a bug) so limit it to 0x3FF.
2019-07-22psxbios: Properly fix garbage area code.gameblabla
This should work as intended now.
2019-07-21psxbios: Fixup mistake in card_info function.gameblabla
This fixes Looney Tunes Sheep Raiders.
2019-07-21psxbios: Return value is always 1 for CloseTh and ChangeTh.gameblabla
According to nocash PSX doc, ChangeThread and CloseThread should always return 1. Fix it accordingly.
2019-07-21psxbios: Add checks for memchr.gameblabla
2019-07-21psxbios: Some games read from address 0, fix that.gameblabla
See Garbage Area at Address 00000000h in Nocash PSX Specifications for more inf> R-types will refuse to boot if psxM[0] is zero. Fade to Black can crash upon memory card access if psxM[5] is set to the wrong > Crash Team Racing will refuse to boot if psxM[2] and psxM[3] are not zero. (Previously, that region of memory would be overwritten above. No explanation why.) It's set as such according to nocash : [00000000h]=3C1A0000h ;<-- but overwritten by 00000003h after soon [00000004h]=275A0C80h ;<-- or 275A0C50h (in older BIOS) [00000008h]=03400008h [0000000Ch]=00000000h Note that setting 00000000h to 00000003h doesn't work for R-types.
2019-07-21psxbios: Implement get_cd_status stub according to nocash doc.gameblabla
2019-07-21psxbios: Make HLE bios start from block 1, not 2.gameblabla
I already fixed this for bufile : ptr = Mcd##mcd##Data + 128 * (nfile + 1); \ instead of ptr = Mcd##mcd##Data + 128 * nfile; \ But i forgot to also fix psxBios_firstfile accordingly. So nfile would still start from block 2 and it would cause all kinds of issues. This was the original comment on pcsxr codeplex as my patch was based on it : "The HLE-Bios start to read memory card blocks at block 2. You need to change ptr = Mcd##mcd##Data + 128 * nfile; \ to ptr = Mcd##mcd##Data + 128 * (nfile + 1); \ for #define bufile(mcd) { \ and changing nfile = 1; to nfile = 0; for psxBios_firstfile() { // 42 Starts numbering slots in the right position."
2019-07-21psxbios: Fix card_status function as to use card_active_chan.gameblabla
2019-07-21psxbios: Merge interrupt_r26 fix from PCSX4ALL.gameblabla
Thanks DmitrySmagin for the fix.
2019-07-21psxbios: Do the same for heap_size.gameblabla
2019-07-21psxbios : Use bfreezel for pad_stopped instead of setting it to 0.gameblabla
2019-07-21psxbios : Implement stub for wait_card.gameblabla
Pretty much identical to get_card_status except it's supposed to wait until a non-busy state occurs.
2019-07-21psxbios : Fix a few mistakes :gameblabla
- Remove extra ffile, pfile.. as it is declared elsewhere. - Remove extra condition as it's already being handled by pad_stopped. - Remove n variable from function (pcsx4all did this) as it's useless and documentation doesn't seem to specify it's needed.
2019-07-18psxbios: Add note and update copyright.gameblabla
2019-07-18psxbios: Merge heap fix from PCSX4ALL.gameblabla
2019-07-18psxbios: Init some vars just to be sure.gameblabla
2019-07-18psxbios: Merge PCSX4ALL pad_stopped fix.gameblabla
2019-07-18psxbios.cpp: Add psxBios_card_status(); doesn't seem to affect anythinggameblabla
2019-07-18psxbios: Fixes save issues on Parasite Eve II, Parasite Eve I and othersgameblabla
Merging never-merged fix by Solus for Parasite Eve. I also fixed some GCC warnings about dir->name going out of bounds too. We also make sure to only add '/0' if string is not full and right after the last character in the dir array. This fixes saving/loading in Parasite Eve II, Parasite Eve. It also fixed regressions for the LEGO Racers where other games would break, meaning this should be the proper fix for saves. We're also using our own strlen implementation to avoid any issues or relying on the libc's own strlen.
2019-07-18psxbios: Callback Events should not set event status to busy in TestEvent.gameblabla
We are already doing that in WaitEvent. According to nocash documentation, this also applies to TestEvent as well so let's implement it.
2019-07-18psxbios: Support other syscallsgameblabla
Since they don't do anything however, let's just add a default and break; instead. Interestingly, trying to implement SYS(04h+ can actually crash the HLE bios. Nocash documentation said that it should crash it but due to other reasons, it doesn't and returns to main program instead.
2019-07-18psxbios: Add checks for strlen.gameblabla
Per what Nocash documentation says.
2019-07-18psxbios: Add checks for strcpy & strncpy.gameblabla
This should be closer to documentation.
2019-07-18psxbios: Fixup free.gameblabla
This is needed for Burning Road. Fix comes from PCSX4ALL by dmitryssmagin.
2019-07-18psxbios: Add checks for strcmp & strncmp.gameblabla
Yes, it's supposed to have a lot of checks like these. Also merge some more fixes from PCSX4ALL. (upstream did not have these as far as i know)
2019-07-18psxbios: Stub for get_errorgameblabla
According to a user on PCSX-Reloaded codeplex (now dead), this fixed loading/saving in Final Fantasy Tactics.
2019-07-18psxbios : Several fixes to malloc.gameblabla
- Don't allow malloc to init memory if heap is invalid According to nocash documentation, malloc will not allocate if heap size is too small or invalid. - Also merge some fixes from PCSX4ALL fork by senquack in order to allow Burning Road to run.
2019-07-18psxbios: Add checks for memmove.gameblabla
Always returns dst per documentation.
2019-07-18psxbios : Add checks to memset.gameblabla
This now can be a tricky pony and an improper memset implementation means that you can't play Tomb Raider 4 properly. (Trying to put in the eye of horus will just result in Lara sidestepping) This should hopefully be fixed (and follows nocash doc).
2019-07-18psxbios: Add checks to memcpy.gameblabla
Always returns dst
2019-07-18psxbios: Add checks for bzero.gameblabla
Only return 0 if size is invalid. (0 or 0x7FFFFFFF), return dst if not.
2019-07-18psxbios: Add checks for bcopygameblabla
Nocash documentation say that function refuses to copy any data if dst is NULL or len greater than 0x7FFFFFFF. (In any cases, return value is always dst)
2019-07-18psxbios : Add checks to index and rindex callsgameblabla
Return 0 for index/rindex if src is 0x00.
2019-07-18psxbios: Merge upstream fix for Deliverevent in firstfilegameblabla
Looks like it is only executed for memory cards, that makes sense i guess.
2019-07-18psxbios: Should fix input issues in some games.gameblabla
Someone reported that this fixed Negcon controls in Ridge Racer Revolution and Grand Tour Racing. I doubt this will suffer from regressions ?
2019-07-18psxbios: Fix out-of-bounds issue.gameblabla
Make sure to return 0xff is no TCBs are available. Thanks senquack for the proper fix.
2019-07-18Only PCSX4ALL uses ResetIoCycle. Remove it for now.gameblabla
2019-07-18Fixup buread & buwrite being undefined.gameblabla
2019-07-18psxbios: Improve WaitEvent behaviour according to documentationgameblabla
Nocash says it should return 0 if Event is unused, which it already does so it might be safe to remove the warning about it. (see why below) Then, it says that it should return 1 if event is ready (EvStALREADY). When that happens, it should also set it to ready (EvStACTIVE), unless event mode is EvMdINTR. (aka Callback Events) If it is a callback event, then documentation says it should be stuck in a loop forever. It also says that it can sometime return 0 (a BUG according to nocash), especially if it switched from EvStALREADY to EvStACTIVE. Said return value was previously set to 1, for some reasons. Now that we are covering all the corner cases, we should be returning 0 instead by default to cover the BUG. This should cover how most games expects it to behave now and should make it more robust.
2019-07-18psxbios: Better realloc implementationgameblabla
This should be closer to the real behaviour as described by nocash. It doesn't do any bcopy though but it shouldn't be too much different other than that.
2019-07-18psxbios : Add checks for strncatgameblabla
Returns 0 if src or dst is 0x00.
2019-07-18psxbios: Add todigit implementationgameblabla
Based on CTRX's code : https://github.com/machinamentum/CTRX/blob/master/bios/source/libc.c#L152 I'm not aware of any games using it but it doesn't hurt to have it and it should work fine.