X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fcdrom.c;h=3e31c0aeb63fe491bbb5613b13da395d01f6a2c9;hp=7b5cdf2ce065bd3a962814a7f688e02362e0aeca;hb=c2502333b2e56e520bb9ecc2f931a639eee415d7;hpb=55b8460a0e10da33133a98faeeb5b2375ef91dc0 diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index 7b5cdf2c..3e31c0ae 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -24,6 +24,7 @@ #include "cdrom.h" #include "ppf.h" #include "psxdma.h" +#include "arm_features.h" /* logging */ #if 0 @@ -126,7 +127,7 @@ unsigned char Test23[] = { 0x43, 0x58, 0x44, 0x32, 0x39 ,0x34, 0x30, 0x51 }; #define STATUS_ERROR (1<<0) // 0x01 /* Errors */ -#define ERROR_NOT_READY (1<<7) // 0x80 +#define ERROR_NOTREADY (1<<7) // 0x80 #define ERROR_INVALIDCMD (1<<6) // 0x40 #define ERROR_INVALIDARG (1<<5) // 0x20 @@ -205,7 +206,7 @@ static void sec2msf(unsigned int s, u8 *msf) { cdr.Reading = 0; \ psxRegs.interrupt &= ~(1 << PSXINT_CDREAD); \ } \ - cdr.StatP &= ~STATUS_READ;\ + cdr.StatP &= ~(STATUS_READ|STATUS_SEEK);\ } #define StopCdda() { \ @@ -984,7 +985,7 @@ void cdrInterrupt() { case DRIVESTATE_PREPARE_CD: SetResultSize(2); cdr.Result[0] = cdr.StatP | STATUS_ERROR; - cdr.Result[1] = ERROR_NOT_READY; + cdr.Result[1] = ERROR_NOTREADY; cdr.Stat = DiskError; break; } @@ -1006,7 +1007,7 @@ finish: #endif } -#ifdef __ARM_ARCH_7A__ +#ifdef HAVE_ARMV7 #define ssat32_to_16(v) \ asm("ssat %0,#16,%1" : "=r" (v) : "r" (v)) #else @@ -1413,13 +1414,15 @@ void psxDma3(u32 madr, u32 bcr, u32 chcr) { psxCpu->Clear(madr, cdsize / 4); pTransfer += cdsize; - - // burst vs normal if( chcr == 0x11400100 ) { + HW_DMA3_MADR = SWAPu32(madr + cdsize); CDRDMA_INT( (cdsize/4) / 4 ); } else if( chcr == 0x11000000 ) { - CDRDMA_INT( (cdsize/4) * 1 ); + // CDRDMA_INT( (cdsize/4) * 1 ); + // halted + psxRegs.cycle += (cdsize/4) * 24/2; + CDRDMA_INT(16); } return; @@ -1495,7 +1498,9 @@ int cdrFreeze(void *f, int Mode) { pTransfer = cdr.Transfer + tmp; // read right sub data - memcpy(tmpp, cdr.Prev, 3); + tmpp[0] = btoi(cdr.Prev[0]); + tmpp[1] = btoi(cdr.Prev[1]); + tmpp[2] = btoi(cdr.Prev[2]); cdr.Prev[0]++; ReadTrack(tmpp); @@ -1514,6 +1519,12 @@ int cdrFreeze(void *f, int Mode) { SysPrintf("cdrom: fixing up old savestate\n"); cdr.Reg2 = 7; } + // also did not save Attenuator.. + if ((cdr.AttenuatorLeftToLeft | cdr.AttenuatorLeftToRight + | cdr.AttenuatorRightToLeft | cdr.AttenuatorRightToRight) == 0) + { + cdr.AttenuatorLeftToLeft = cdr.AttenuatorRightToRight = 0x80; + } } }