notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
optimizations, fixes, hacks, psp, ...
[picodrive.git]
/
Pico
/
Memory.c
diff --git
a/Pico/Memory.c
b/Pico/Memory.c
index
ca92e81
..
1e6630d
100644
(file)
--- a/
Pico/Memory.c
+++ b/
Pico/Memory.c
@@
-334,9
+334,12
@@
PICO_INTERNAL_ASM u32 PicoRead8(u32 a)
log_io(a, 8, 0);
\r
if ((a&0xff4000)==0xa00000) { d=z80Read8(a); goto end; } // Z80 Ram
\r
\r
log_io(a, 8, 0);
\r
if ((a&0xff4000)==0xa00000) { d=z80Read8(a); goto end; } // Z80 Ram
\r
\r
- d=OtherRead16(a&~1, 8); if ((a&1)==0) d>>=8;
\r
+ if ((a&0xe700e0)==0xc00000) // VDP
\r
+ d=PicoVideoRead(a);
\r
+ else d=OtherRead16(a&~1, 8);
\r
+ if ((a&1)==0) d>>=8;
\r
+
\r
\r
\r
-end:
\r
#ifdef __debug_io
\r
dprintf("r8 : %06x, %02x @%06x", a&0xffffff, (u8)d, SekPc);
\r
#endif
\r
#ifdef __debug_io
\r
dprintf("r8 : %06x, %02x @%06x", a&0xffffff, (u8)d, SekPc);
\r
#endif
\r
@@
-370,7
+373,9
@@
PICO_INTERNAL_ASM u32 PicoRead16(u32 a)
if (a<Pico.romsize) { d = *(u16 *)(Pico.rom+a); goto end; } // Rom
\r
log_io(a, 16, 0);
\r
\r
if (a<Pico.romsize) { d = *(u16 *)(Pico.rom+a); goto end; } // Rom
\r
log_io(a, 16, 0);
\r
\r
- d = OtherRead16(a, 16);
\r
+ if ((a&0xe700e0)==0xc00000)
\r
+ d = PicoVideoRead(a);
\r
+ else d = OtherRead16(a, 16);
\r
\r
end:
\r
#ifdef __debug_io
\r
\r
end:
\r
#ifdef __debug_io
\r
@@
-404,7
+409,9
@@
PICO_INTERNAL_ASM u32 PicoRead32(u32 a)
if (a<Pico.romsize) { u16 *pm=(u16 *)(Pico.rom+a); d = (pm[0]<<16)|pm[1]; goto end; } // Rom
\r
log_io(a, 32, 0);
\r
\r
if (a<Pico.romsize) { u16 *pm=(u16 *)(Pico.rom+a); d = (pm[0]<<16)|pm[1]; goto end; } // Rom
\r
log_io(a, 32, 0);
\r
\r
- d = (OtherRead16(a, 32)<<16)|OtherRead16(a+2, 32);
\r
+ if ((a&0xe700e0)==0xc00000)
\r
+ d = (PicoVideoRead(a)<<16)|PicoVideoRead(a+2);
\r
+ else d = (OtherRead16(a, 32)<<16)|OtherRead16(a+2, 32);
\r
\r
end:
\r
#ifdef __debug_io
\r
\r
end:
\r
#ifdef __debug_io
\r
@@
-454,6
+461,7
@@
void PicoWrite16(u32 a,u16 d)
log_io(a, 16, 1);
\r
\r
a&=0xfffffe;
\r
log_io(a, 16, 1);
\r
\r
a&=0xfffffe;
\r
+ if ((a&0xe700e0)==0xc00000) { PicoVideoWrite(a,(u16)d); return; } // VDP
\r
OtherWrite16(a,d);
\r
}
\r
\r
OtherWrite16(a,d);
\r
}
\r
\r
@@
-476,6
+484,14
@@
static void PicoWrite32(u32 a,u32 d)
log_io(a, 32, 1);
\r
\r
a&=0xfffffe;
\r
log_io(a, 32, 1);
\r
\r
a&=0xfffffe;
\r
+ if ((a&0xe700e0)==0xc00000)
\r
+ {
\r
+ // VDP:
\r
+ PicoVideoWrite(a, (u16)(d>>16));
\r
+ PicoVideoWrite(a+2,(u16)d);
\r
+ return;
\r
+ }
\r
+
\r
OtherWrite16(a, (u16)(d>>16));
\r
OtherWrite16(a+2,(u16)d);
\r
}
\r
OtherWrite16(a, (u16)(d>>16));
\r
OtherWrite16(a+2,(u16)d);
\r
}
\r
@@
-660,10
+676,6
@@
PICO_INTERNAL unsigned char z80_read(unsigned short a)
{
\r
u8 ret = 0;
\r
\r
{
\r
u8 ret = 0;
\r
\r
-#ifndef _USE_DRZ80
\r
- if (a<0x4000) return Pico.zram[a&0x1fff];
\r
-#endif
\r
-
\r
if ((a>>13)==2) // 0x4000-0x5fff (Charles MacDonald)
\r
{
\r
if (PicoOpt&1) ret = (u8) YM2612Read();
\r
if ((a>>13)==2) // 0x4000-0x5fff (Charles MacDonald)
\r
{
\r
if (PicoOpt&1) ret = (u8) YM2612Read();
\r
@@
-681,10
+693,8
@@
PICO_INTERNAL unsigned char z80_read(unsigned short a)
return ret;
\r
}
\r
\r
return ret;
\r
}
\r
\r
-#ifdef _USE_DRZ80
\r
- // should not be needed || dprintf("z80_read RAM");
\r
+ // should not be needed, cores should be able to access RAM themselves
\r
if (a<0x4000) return Pico.zram[a&0x1fff];
\r
if (a<0x4000) return Pico.zram[a&0x1fff];
\r
-#endif
\r
\r
elprintf(EL_ANOMALY, "z80 invalid r8 [%06x] %02x", a, ret);
\r
return ret;
\r
\r
elprintf(EL_ANOMALY, "z80 invalid r8 [%06x] %02x", a, ret);
\r
return ret;
\r
@@
-696,10
+706,6
@@
PICO_INTERNAL_ASM void z80_write(unsigned char data, unsigned short a)
PICO_INTERNAL_ASM void z80_write(unsigned int a, unsigned char data)
\r
#endif
\r
{
\r
PICO_INTERNAL_ASM void z80_write(unsigned int a, unsigned char data)
\r
#endif
\r
{
\r
-#ifndef _USE_DRZ80
\r
- if (a<0x4000) { Pico.zram[a&0x1fff]=data; return; }
\r
-#endif
\r
-
\r
if ((a>>13)==2) // 0x4000-0x5fff (Charles MacDonald)
\r
{
\r
if(PicoOpt&1) emustatus|=YM2612Write(a, data) & 1;
\r
if ((a>>13)==2) // 0x4000-0x5fff (Charles MacDonald)
\r
{
\r
if(PicoOpt&1) emustatus|=YM2612Write(a, data) & 1;
\r
@@
-730,10
+736,8
@@
PICO_INTERNAL_ASM void z80_write(unsigned int a, unsigned char data)
return;
\r
}
\r
\r
return;
\r
}
\r
\r
-#ifdef _USE_DRZ80
\r
- // should not be needed, drZ80 knows how to access RAM itself || dprintf("z80_write RAM @ %08x", lr);
\r
+ // should not be needed
\r
if (a<0x4000) { Pico.zram[a&0x1fff]=data; return; }
\r
if (a<0x4000) { Pico.zram[a&0x1fff]=data; return; }
\r
-#endif
\r
\r
elprintf(EL_ANOMALY, "z80 invalid w8 [%06x] %02x", a, data);
\r
}
\r
\r
elprintf(EL_ANOMALY, "z80 invalid w8 [%06x] %02x", a, data);
\r
}
\r