diff --git a/Assets/dll/virtualjaguar.wbx.zst b/Assets/dll/virtualjaguar.wbx.zst index 73defff61a..ad5f66ef33 100644 Binary files a/Assets/dll/virtualjaguar.wbx.zst and b/Assets/dll/virtualjaguar.wbx.zst differ diff --git a/waterbox/virtualjaguar/src/cdhle.cpp b/waterbox/virtualjaguar/src/cdhle.cpp index ae04f40c61..7964326ac4 100644 --- a/waterbox/virtualjaguar/src/cdhle.cpp +++ b/waterbox/virtualjaguar/src/cdhle.cpp @@ -239,7 +239,8 @@ void CDHLEReset(void) } } - cd_read_addr_start = dstStart; + //eh not sure why I did this? + //cd_read_addr_start = dstStart; SET32(jaguarMainRAM, 4, cd_boot_addr); SET16(jaguarMainRAM, 0x3004, 0x0403); // BIOS VER @@ -642,6 +643,24 @@ static void CD_uread(void) static void CD_setup(void) { // probaby don't really care about this + // but to be safe, let's just reset everything + cd_initm = false; + cd_muted = false; + cd_paused = false; + cd_jerry = false; + cd_mode = 0; + cd_osamp = 0; + + cd_is_reading = false; + cd_read_orig_addr_start = 0; + cd_read_addr_start = 0; + cd_read_addr_end = 0; + cd_read_lba = 0; + memset(cd_buf2352, 0, sizeof(cd_buf2352)); + cd_buf_pos = 0; + cd_buf_rm = 0; + cd_buf_circular_size = 0; + cd_setup = true; } @@ -660,6 +679,12 @@ static void CD_osamp(void) static void CD_getoc(void) { // this is for debugging only, retail games will not call this + // although some homebrew games seem to call it? + uint32_t addr = m68k_get_reg(M68K_REG_A0); + for (uint32_t i = 0; i < sizeof(TOC); i++) + { + JaguarWriteByte(addr + i, ((uint8_t*)&toc)[i], M68K); + } } static void CD_initm(void) diff --git a/waterbox/virtualjaguar/src/m68000/m68kinterface.c b/waterbox/virtualjaguar/src/m68000/m68kinterface.c index d51fc37b39..7690f8bad5 100644 --- a/waterbox/virtualjaguar/src/m68000/m68kinterface.c +++ b/waterbox/virtualjaguar/src/m68000/m68kinterface.c @@ -187,7 +187,13 @@ STATIC_INLINE uint32_t m68ki_init_exception(void) { MakeSR(); uint32_t sr = regs.sr; - regs.s = 1; + + if (!regs.s) + { + regs.usp = m68k_areg(regs, 7); + m68k_areg(regs, 7) = regs.isp; + regs.s = 1; + } return sr; }