notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
port to updated Cyclone, debug menu
[picodrive.git]
/
Pico
/
Memory.c
diff --git
a/Pico/Memory.c
b/Pico/Memory.c
index
48f1fed
..
2b253d8
100644
(file)
--- a/
Pico/Memory.c
+++ b/
Pico/Memory.c
@@
-22,8
+22,8
@@
typedef unsigned int u32;
extern unsigned int lastSSRamWrite; // used by serial SRAM code
\r
\r
#ifdef _ASM_MEMORY_C
\r
extern unsigned int lastSSRamWrite; // used by serial SRAM code
\r
\r
#ifdef _ASM_MEMORY_C
\r
-u
8
PicoRead8(u32 a);
\r
-u
16
PicoRead16(u32 a);
\r
+u
32
PicoRead8(u32 a);
\r
+u
32
PicoRead16(u32 a);
\r
void PicoWriteRomHW_SSF2(u32 a,u32 d);
\r
void PicoWriteRomHW_in1 (u32 a,u32 d);
\r
#endif
\r
void PicoWriteRomHW_SSF2(u32 a,u32 d);
\r
void PicoWriteRomHW_in1 (u32 a,u32 d);
\r
#endif
\r
@@
-69,11
+69,13
@@
static u32 CPU_CALL PicoCheckPc(u32 pc)
u32 ret=0;
\r
#if defined(EMU_C68K)
\r
pc-=PicoCpu.membase; // Get real pc
\r
u32 ret=0;
\r
#if defined(EMU_C68K)
\r
pc-=PicoCpu.membase; // Get real pc
\r
- pc&=0xfffffe;
\r
- if (pc == 0)
\r
+// pc&=0xfffffe;
\r
+ pc&=~1;
\r
+ if ((pc<<8) == 0)
\r
return (int)Pico.rom + Pico.romsize; // common crash condition, can happen if acc timing is off
\r
\r
return (int)Pico.rom + Pico.romsize; // common crash condition, can happen if acc timing is off
\r
\r
- PicoCpu.membase=PicoMemBase(pc);
\r
+ PicoCpu.membase=PicoMemBase(pc&0x00ffffff);
\r
+ PicoCpu.membase-=pc&0xff000000;
\r
\r
ret = PicoCpu.membase+pc;
\r
#elif defined(EMU_A68K)
\r
\r
ret = PicoCpu.membase+pc;
\r
#elif defined(EMU_A68K)
\r
@@
-264,7
+266,7
@@
static void OtherWrite8End(u32 a,u32 d,int realsize)
// Read Rom and read Ram
\r
\r
#ifndef _ASM_MEMORY_C
\r
// Read Rom and read Ram
\r
\r
#ifndef _ASM_MEMORY_C
\r
-u
8
CPU_CALL PicoRead8(u32 a)
\r
+u
32
CPU_CALL PicoRead8(u32 a)
\r
{
\r
u32 d=0;
\r
\r
{
\r
u32 d=0;
\r
\r
@@
-312,12
+314,12
@@
u8 CPU_CALL PicoRead8(u32 a)
lastread_d[lrp_cyc++&15] = (u8)d;
\r
}
\r
#endif
\r
lastread_d[lrp_cyc++&15] = (u8)d;
\r
}
\r
#endif
\r
- return
(u8)
d;
\r
+ return d;
\r
}
\r
\r
}
\r
\r
-u
16
CPU_CALL PicoRead16(u32 a)
\r
+u
32
CPU_CALL PicoRead16(u32 a)
\r
{
\r
{
\r
- u
16
d=0;
\r
+ u
32
d=0;
\r
\r
if ((a&0xe00000)==0xe00000) { d=*(u16 *)(Pico.ram+(a&0xfffe)); goto end; } // Ram
\r
\r
\r
if ((a&0xe00000)==0xe00000) { d=*(u16 *)(Pico.ram+(a&0xfffe)); goto end; } // Ram
\r
\r
@@
-326,14
+328,14
@@
u16 CPU_CALL PicoRead16(u32 a)
#if !(defined(EMU_C68K) && defined(EMU_M68K))
\r
// sram
\r
if(a >= SRam.start && a <= SRam.end && (Pico.m.sram_reg & 1)) {
\r
#if !(defined(EMU_C68K) && defined(EMU_M68K))
\r
// sram
\r
if(a >= SRam.start && a <= SRam.end && (Pico.m.sram_reg & 1)) {
\r
- d =
(u16)
SRAMRead(a);
\r
+ d = SRAMRead(a);
\r
goto end;
\r
}
\r
#endif
\r
\r
if (a<Pico.romsize) { d = *(u16 *)(Pico.rom+a); goto end; } // Rom
\r
\r
goto end;
\r
}
\r
#endif
\r
\r
if (a<Pico.romsize) { d = *(u16 *)(Pico.rom+a); goto end; } // Rom
\r
\r
- d =
(u16)
OtherRead16(a, 16);
\r
+ d = OtherRead16(a, 16);
\r
\r
end:
\r
//if ((a&0xe0ffff)==0xe0AF0E+0x69c||(a&0xe0ffff)==0xe0A9A8+0x69c||(a&0xe0ffff)==0xe0A9AA+0x69c||(a&0xe0ffff)==0xe0A9AC+0x69c)
\r
\r
end:
\r
//if ((a&0xe0ffff)==0xe0AF0E+0x69c||(a&0xe0ffff)==0xe0A9A8+0x69c||(a&0xe0ffff)==0xe0A9AA+0x69c||(a&0xe0ffff)==0xe0A9AC+0x69c)
\r
@@
-504,7
+506,9
@@
static unsigned int m68k_read_8 (unsigned int a, int do_fake) {
a&=0xffffff;
\r
if(PicoMCD&1) return m68k_read_pcrelative_CD8(a);
\r
if(a<Pico.romsize) return *(u8 *)(Pico.rom+(a^1)); // Rom
\r
a&=0xffffff;
\r
if(PicoMCD&1) return m68k_read_pcrelative_CD8(a);
\r
if(a<Pico.romsize) return *(u8 *)(Pico.rom+(a^1)); // Rom
\r
+#ifdef EMU_C68K
\r
if(do_fake&&((ppop&0x3f)==0x3a||(ppop&0x3f)==0x3b)) return lastread_d[lrp_mus++&15];
\r
if(do_fake&&((ppop&0x3f)==0x3a||(ppop&0x3f)==0x3b)) return lastread_d[lrp_mus++&15];
\r
+#endif
\r
if((a&0xe00000)==0xe00000) return *(u8 *)(Pico.ram+((a^1)&0xffff)); // Ram
\r
return 0;
\r
}
\r
if((a&0xe00000)==0xe00000) return *(u8 *)(Pico.ram+((a^1)&0xffff)); // Ram
\r
return 0;
\r
}
\r
@@
-512,7
+516,9
@@
static unsigned int m68k_read_16(unsigned int a, int do_fake) {
a&=0xffffff;
\r
if(PicoMCD&1) return m68k_read_pcrelative_CD16(a);
\r
if(a<Pico.romsize) return *(u16 *)(Pico.rom+(a&~1)); // Rom
\r
a&=0xffffff;
\r
if(PicoMCD&1) return m68k_read_pcrelative_CD16(a);
\r
if(a<Pico.romsize) return *(u16 *)(Pico.rom+(a&~1)); // Rom
\r
+#ifdef EMU_C68K
\r
if(do_fake&&((ppop&0x3f)==0x3a||(ppop&0x3f)==0x3b)) return lastread_d[lrp_mus++&15];
\r
if(do_fake&&((ppop&0x3f)==0x3a||(ppop&0x3f)==0x3b)) return lastread_d[lrp_mus++&15];
\r
+#endif
\r
if((a&0xe00000)==0xe00000) return *(u16 *)(Pico.ram+(a&0xfffe)); // Ram
\r
return 0;
\r
}
\r
if((a&0xe00000)==0xe00000) return *(u16 *)(Pico.ram+(a&0xfffe)); // Ram
\r
return 0;
\r
}
\r
@@
-520,7
+526,9
@@
static unsigned int m68k_read_32(unsigned int a, int do_fake) {
a&=0xffffff;
\r
if(PicoMCD&1) return m68k_read_pcrelative_CD32(a);
\r
if(a<Pico.romsize) { u16 *pm=(u16 *)(Pico.rom+(a&~1)); return (pm[0]<<16)|pm[1]; }
\r
a&=0xffffff;
\r
if(PicoMCD&1) return m68k_read_pcrelative_CD32(a);
\r
if(a<Pico.romsize) { u16 *pm=(u16 *)(Pico.rom+(a&~1)); return (pm[0]<<16)|pm[1]; }
\r
+#ifdef EMU_C68K
\r
if(do_fake&&((ppop&0x3f)==0x3a||(ppop&0x3f)==0x3b)) return lastread_d[lrp_mus++&15];
\r
if(do_fake&&((ppop&0x3f)==0x3a||(ppop&0x3f)==0x3b)) return lastread_d[lrp_mus++&15];
\r
+#endif
\r
if((a&0xe00000)==0xe00000) { u16 *pm=(u16 *)(Pico.ram+(a&0xfffe)); return (pm[0]<<16)|pm[1]; } // Ram
\r
return 0;
\r
}
\r
if((a&0xe00000)==0xe00000) { u16 *pm=(u16 *)(Pico.ram+(a&0xfffe)); return (pm[0]<<16)|pm[1]; } // Ram
\r
return 0;
\r
}
\r