diff --git a/desmume/src/GPU.cpp b/desmume/src/GPU.cpp index c61f4394a..33935284f 100644 --- a/desmume/src/GPU.cpp +++ b/desmume/src/GPU.cpp @@ -2200,10 +2200,20 @@ template static void GPU_RenderLine_DispCapture(u16 l) case 0: // Capture screen (BG + OBJ + 3D) { //INFO("Capture screen (BG + OBJ + 3D)\n"); - - u8 *src; - src = (u8*)(gpu->tempScanline); + u8 *src = (u8*)(gpu->tempScanline); +#ifdef LOCAL_BE + static u16 swapSrc[256]; + const size_t swapSrcSize = (gpu->dispCapCnt.capx == DISPCAPCNT::_128) ? 128 : 256; + + for(size_t i = 0; i < swapSrcSize; i++) + { + swapSrc[i] = LE_TO_LOCAL_16(((u16 *)src)[i]); + } + + CAPCOPY((u8 *)swapSrc,cap_dst,true); +#else CAPCOPY(src,cap_dst,true); +#endif } break; case 1: // Capture 3D @@ -2571,7 +2581,14 @@ void GPU_RenderLine(NDS_Screen * screen, u16 l, bool skip) { u8 * dst = GPU_screen + (screen->offset + l) * 512; u8 * src = gpu->VRAMaddr + (l*512); +#ifdef LOCAL_BE + for(size_t i = 0; i < 256; i++) + { + ((u16 *)dst)[i] = LE_TO_LOCAL_16(((u16 *)src)[i]); + } +#else memcpy (dst, src, 512); +#endif } break; case 3: // Display memory FIFO diff --git a/desmume/src/emufile.cpp b/desmume/src/emufile.cpp index 4e9f02642..6105b9967 100644 --- a/desmume/src/emufile.cpp +++ b/desmume/src/emufile.cpp @@ -95,20 +95,8 @@ void EMUFILE::write64le(u64* val) void EMUFILE::write64le(u64 val) { -#ifdef LOCAL_BE - u8 s[8]; - s[0]=(u8)val; - s[1]=(u8)(val>>8); - s[2]=(u8)(val>>16); - s[3]=(u8)(val>>24); - s[4]=(u8)(val>>32); - s[5]=(u8)(val>>40); - s[6]=(u8)(val>>48); - s[7]=(u8)(val>>56); - fwrite((char*)&s,8); -#else + val = LOCAL_TO_LE_64(val); fwrite(&val,8); -#endif } @@ -117,11 +105,9 @@ size_t EMUFILE::read64le(u64 *Bufo) u64 buf; if(fread((char*)&buf,8) != 8) return 0; -#ifndef LOCAL_BE - *Bufo=buf; -#else + *Bufo = LE_TO_LOCAL_64(buf); -#endif + return 1; } @@ -139,16 +125,8 @@ void EMUFILE::write32le(u32* val) void EMUFILE::write32le(u32 val) { -#ifdef LOCAL_BE - u8 s[4]; - s[0]=(u8)val; - s[1]=(u8)(val>>8); - s[2]=(u8)(val>>16); - s[3]=(u8)(val>>24); - fwrite(s,4); -#else + val = LOCAL_TO_LE_32(val); fwrite(&val,4); -#endif } size_t EMUFILE::read32le(s32* Bufo) { return read32le((u32*)Bufo); } @@ -158,11 +136,9 @@ size_t EMUFILE::read32le(u32* Bufo) u32 buf; if(fread(&buf,4)<4) return 0; -#ifndef LOCAL_BE - *(u32*)Bufo=buf; -#else - *(u32*)Bufo=((buf&0xFF)<<24)|((buf&0xFF00)<<8)|((buf&0xFF0000)>>8)|((buf&0xFF000000)>>24); -#endif + + *Bufo = LE_TO_LOCAL_32(buf); + return 1; } @@ -180,14 +156,8 @@ void EMUFILE::write16le(u16* val) void EMUFILE::write16le(u16 val) { -#ifdef LOCAL_BE - u8 s[2]; - s[0]=(u8)val; - s[1]=(u8)(val>>8); - fwrite(s,2); -#else + val = LOCAL_TO_LE_16(val); fwrite(&val,2); -#endif } size_t EMUFILE::read16le(s16* Bufo) { return read16le((u16*)Bufo); } @@ -197,11 +167,9 @@ size_t EMUFILE::read16le(u16* Bufo) u32 buf; if(fread(&buf,2)<2) return 0; -#ifndef LOCAL_BE - *(u16*)Bufo=buf; -#else + *Bufo = LE_TO_LOCAL_16(buf); -#endif + return 1; } diff --git a/desmume/src/emufile.h b/desmume/src/emufile.h index 0d188ee2e..52bdfa44f 100644 --- a/desmume/src/emufile.h +++ b/desmume/src/emufile.h @@ -172,7 +172,7 @@ public: return &(*vec)[0]; } - std::vector* get_vec() { return vec; }; + std::vector* get_vec() const { return vec; }; virtual FILE *get_fp() { return NULL; } diff --git a/desmume/src/readwrite.cpp b/desmume/src/readwrite.cpp index 9f4604601..7d3b9b106 100644 --- a/desmume/src/readwrite.cpp +++ b/desmume/src/readwrite.cpp @@ -79,11 +79,9 @@ int read32le(u32 *Bufo, EMUFILE *fp) u32 buf = 0; if(fp->_fread(&buf,4)<4) return 0; -#ifdef LOCAL_LE - *(u32*)Bufo=buf; -#else - *(u32*)Bufo=((buf&0xFF)<<24)|((buf&0xFF00)<<8)|((buf&0xFF0000)>>8)|((buf&0xFF000000)>>24); -#endif + + *Bufo = LE_TO_LOCAL_32(buf); + return 1; } @@ -92,11 +90,9 @@ int read16le(u16 *Bufo, EMUFILE *is) u16 buf; if(is->_fread((char*)&buf,2) != 2) return 0; -#ifdef LOCAL_LE - *Bufo=buf; -#else + *Bufo = LE_TO_LOCAL_16(buf); -#endif + return 1; } @@ -105,11 +101,9 @@ int read64le(u64 *Bufo, EMUFILE *is) u64 buf; if(is->_fread((char*)&buf,8) != 8) return 0; -#ifdef LOCAL_LE - *Bufo=buf; -#else + *Bufo = LE_TO_LOCAL_64(buf); -#endif + return 1; } @@ -118,11 +112,9 @@ static int read32le(u32 *Bufo, std::istream *is) u32 buf; if(is->read((char*)&buf,4).gcount() != 4) return 0; -#ifdef LOCAL_LE - *(u32*)Bufo=buf; -#else - *(u32*)Bufo=((buf&0xFF)<<24)|((buf&0xFF00)<<8)|((buf&0xFF0000)>>8)|((buf&0xFF000000)>>24); -#endif + + *Bufo = LE_TO_LOCAL_32(buf); + return 1; }