diff --git a/Assets/dll/virtualjaguar.wbx.zst b/Assets/dll/virtualjaguar.wbx.zst index c90e92e404..7b2d90225f 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 f064ecaa07..4593ec8211 100644 --- a/waterbox/virtualjaguar/src/cdhle.cpp +++ b/waterbox/virtualjaguar/src/cdhle.cpp @@ -319,13 +319,20 @@ bool CDHLEJerryCallback(void) DACWriteWord(0xF1A14A, GET16(cd_buf2352, cd_buf_pos + 0)); DACWriteWord(0xF1A14E, GET16(cd_buf2352, cd_buf_pos + 2)); + //cd_read_addr_start += 4; cd_buf_pos += 4; cd_buf_rm -= 4; + // don't think this is right + /*if (cd_read_addr_start > cd_read_addr_end && !((cd_read_addr_start - cd_read_orig_addr_start) & 0x3F)) + { + cd_is_reading = false; + }*/ + return true; } -static void ResetCallbacks(void) +static void ResetCallback(void) { RemoveCallback(CDHLECallback); if (!cd_jerry) @@ -431,7 +438,7 @@ static void CD_jeri(void) { fprintf(stderr, "changing jerry mode %d -> %d\n", cd_jerry, njerry); cd_jerry = njerry; - ResetCallbacks(); + ResetCallback(); } } @@ -573,7 +580,7 @@ static void CD_read(void) cd_buf_pos = 0; cd_buf_rm = bufRm; cd_buf_circular_size = circBufSz ? (1 << circBufSz) : 0; - ResetCallbacks(); + ResetCallback(); JERRYWriteWord(0xF10020, 0, M68K); //GPUWriteLong(0xF02100, GPUReadLong(0xF02100, M68K) | 0x20, M68K); break; @@ -594,7 +601,7 @@ static void CD_read(void) cd_buf_pos = 0; cd_buf_rm = 0; cd_buf_circular_size = 0; - ResetCallbacks(); + ResetCallback(); JERRYWriteWord(0xF10020, 0, M68K); //GPUWriteLong(0xF02100, GPUReadLong(0xF02100, M68K) | 0x20, M68K); } diff --git a/waterbox/virtualjaguar/src/tom.cpp b/waterbox/virtualjaguar/src/tom.cpp index 937c7cc476..8e2998522d 100644 --- a/waterbox/virtualjaguar/src/tom.cpp +++ b/waterbox/virtualjaguar/src/tom.cpp @@ -555,8 +555,6 @@ uint16_t TOMReadWord(uint32_t offset, uint32_t who) // void TOMWriteByte(uint32_t offset, uint8_t data, uint32_t who) { - tomRam8[offset & 0x3FFF] = data; - if ((offset >= 0xF08000) && (offset <= 0xF0BFFF)) offset &= 0xFF7FFF; @@ -601,6 +599,10 @@ void TOMWriteByte(uint32_t offset, uint8_t data, uint32_t who) offset &= 0x5FF; tomRam8[offset] = data, tomRam8[offset + 0x200] = data; } + else + { + tomRam8[offset & 0x3FFF] = data; + } } // @@ -608,9 +610,6 @@ void TOMWriteByte(uint32_t offset, uint8_t data, uint32_t who) // void TOMWriteWord(uint32_t offset, uint16_t data, uint32_t who) { - tomRam8[(offset + 0) & 0x3FFF] = data >> 8; - tomRam8[(offset + 1) & 0x3FFF] = data & 0xFF; - if ((offset >= 0xF08000) && (offset <= 0xF0BFFF)) offset &= 0xFF7FFF; @@ -680,6 +679,9 @@ void TOMWriteWord(uint32_t offset, uint16_t data, uint32_t who) tomWidth = width, tomHeight = height; } } + + tomRam8[(offset + 0) & 0x3FFF] = data >> 8; + tomRam8[(offset + 1) & 0x3FFF] = data & 0xFF; } int TOMIRQEnabled(int irq)