notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
32x: built-in BIOS; reset handling; 68k memhandler split
[picodrive.git]
/
pico
/
cart.c
diff --git
a/pico/cart.c
b/pico/cart.c
index
cbd4bb6
..
26fb59b
100644
(file)
--- a/
pico/cart.c
+++ b/
pico/cart.c
@@
-378,23
+378,21
@@
int pm_close(pm_file *fp)
return ret;
\r
}
\r
\r
return ret;
\r
}
\r
\r
-
\r
-
static void Byteswap(unsigned char *data,
int len)
\r
+// byteswap, data needs to be int aligned, src can match dst
\r
+
void Byteswap(void *dst, const void *src,
int len)
\r
{
\r
{
\r
-
int i=0
;
\r
-
\r
- i
f (len<2) return; // Too short
\r
+
const unsigned int *ps = src
;
\r
+ unsigned int *pd = dst;
\r
+ i
nt i, m;
\r
\r
\r
- do
\r
- {
\r
- unsigned short *pd=(unsigned short *)(data+i);
\r
- int value=*pd; // Get 2 bytes
\r
+ if (len < 2)
\r
+ return;
\r
\r
\r
- value=(value<<8)|(value>>8); // Byteswap it
\r
- *pd=(unsigned short)value; // Put 2b ytes
\r
- i+=2;
\r
+ m = 0x00ff00ff;
\r
+ for (i = 0; i < len / 4; i++) {
\r
+ unsigned int t = ps[i];
\r
+ pd[i] = ((t & m) << 8) | ((t & ~m) >> 8);
\r
}
\r
}
\r
- while (i+2<=len);
\r
}
\r
\r
// Interleve a 16k block and byteswap
\r
}
\r
\r
// Interleve a 16k block and byteswap
\r
@@
-524,7
+522,7
@@
int PicoCartLoad(pm_file *f,unsigned char **prom,unsigned int *psize,int is_sms)
elprintf(EL_STATUS, "SMD format detected.");
\r
DecodeSmd(rom,size); size-=0x200; // Decode and byteswap SMD
\r
}
\r
elprintf(EL_STATUS, "SMD format detected.");
\r
DecodeSmd(rom,size); size-=0x200; // Decode and byteswap SMD
\r
}
\r
- else Byteswap(rom,size); // Just byteswap
\r
+ else Byteswap(rom,
rom,
size); // Just byteswap
\r
}
\r
else
\r
{
\r
}
\r
else
\r
{
\r
@@
-621,9
+619,9
@@
static unsigned int rom_crc32(void)
elprintf(EL_STATUS, "caclulating CRC32..");
\r
\r
// have to unbyteswap for calculation..
\r
elprintf(EL_STATUS, "caclulating CRC32..");
\r
\r
// have to unbyteswap for calculation..
\r
- Byteswap(Pico.rom, Pico.romsize);
\r
+ Byteswap(Pico.rom, Pico.rom
, Pico.rom
size);
\r
crc = crc32(0, Pico.rom, Pico.romsize);
\r
crc = crc32(0, Pico.rom, Pico.romsize);
\r
- Byteswap(Pico.rom, Pico.romsize);
\r
+ Byteswap(Pico.rom, Pico.rom
, Pico.rom
size);
\r
return crc;
\r
}
\r
\r
return crc;
\r
}
\r
\r