X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2FMemory.c;h=3c7b70c28e6ef5c24c29599b5a029007a94ce14f;hb=80db44425aa5b46185fb9a64520f4b6f5d494ba5;hp=b0aa7afa2806ff637164b2e92d75c425ec8959e5;hpb=70357ce52578dee0dd3b3663902cf872c3d34258;p=picodrive.git diff --git a/Pico/Memory.c b/Pico/Memory.c index b0aa7af..3c7b70c 100644 --- a/Pico/Memory.c +++ b/Pico/Memory.c @@ -69,11 +69,11 @@ static __inline int PicoMemBase(u32 pc) #endif -static u32 CPU_CALL PicoCheckPc(u32 pc) +static u32 PicoCheckPc(u32 pc) { u32 ret=0; #if defined(EMU_C68K) - pc-=PicoCpu.membase; // Get real pc + pc-=PicoCpuCM68k.membase; // Get real pc // pc&=0xfffffe; pc&=~1; if ((pc<<8) == 0) @@ -82,10 +82,10 @@ static u32 CPU_CALL PicoCheckPc(u32 pc) return (int)Pico.rom + Pico.romsize; // common crash condition, can happen if acc timing is off } - PicoCpu.membase=PicoMemBase(pc&0x00ffffff); - PicoCpu.membase-=pc&0xff000000; + PicoCpuCM68k.membase=PicoMemBase(pc&0x00ffffff); + PicoCpuCM68k.membase-=pc&0xff000000; - ret = PicoCpu.membase+pc; + ret = PicoCpuCM68k.membase+pc; #endif return ret; } @@ -315,7 +315,7 @@ static void OtherWrite8End(u32 a,u32 d,int realsize) // Read Rom and read Ram #ifndef _ASM_MEMORY_C -PICO_INTERNAL_ASM u32 CPU_CALL PicoRead8(u32 a) +PICO_INTERNAL_ASM u32 PicoRead8(u32 a) { u32 d=0; @@ -351,7 +351,7 @@ end: return d; } -PICO_INTERNAL_ASM u32 CPU_CALL PicoRead16(u32 a) +PICO_INTERNAL_ASM u32 PicoRead16(u32 a) { u32 d=0; @@ -387,7 +387,7 @@ end: return d; } -PICO_INTERNAL_ASM u32 CPU_CALL PicoRead32(u32 a) +PICO_INTERNAL_ASM u32 PicoRead32(u32 a) { u32 d=0; @@ -426,7 +426,7 @@ end: // Write Ram #ifndef _ASM_MEMORY_C -PICO_INTERNAL_ASM void CPU_CALL PicoWrite8(u32 a,u8 d) +PICO_INTERNAL_ASM void PicoWrite8(u32 a,u8 d) { #ifdef __debug_io dprintf("w8 : %06x, %02x @%06x", a&0xffffff, d, SekPc); @@ -446,7 +446,7 @@ PICO_INTERNAL_ASM void CPU_CALL PicoWrite8(u32 a,u8 d) } #endif -void CPU_CALL PicoWrite16(u32 a,u16 d) +void PicoWrite16(u32 a,u16 d) { #ifdef __debug_io dprintf("w16: %06x, %04x", a&0xffffff, d); @@ -462,7 +462,7 @@ void CPU_CALL PicoWrite16(u32 a,u16 d) OtherWrite16(a,d); } -static void CPU_CALL PicoWrite32(u32 a,u32 d) +static void PicoWrite32(u32 a,u32 d) { #ifdef __debug_io dprintf("w32: %06x, %08x", a&0xffffff, d); @@ -491,21 +491,35 @@ PICO_INTERNAL void PicoMemSetup(void) { // Setup memory callbacks: #ifdef EMU_C68K - PicoCpu.checkpc=PicoCheckPc; - PicoCpu.fetch8 =PicoCpu.read8 =PicoRead8; - PicoCpu.fetch16=PicoCpu.read16=PicoRead16; - PicoCpu.fetch32=PicoCpu.read32=PicoRead32; - PicoCpu.write8 =PicoWrite8; - PicoCpu.write16=PicoWrite16; - PicoCpu.write32=PicoWrite32; + PicoCpuCM68k.checkpc=PicoCheckPc; + PicoCpuCM68k.fetch8 =PicoCpuCM68k.read8 =PicoRead8; + PicoCpuCM68k.fetch16=PicoCpuCM68k.read16=PicoRead16; + PicoCpuCM68k.fetch32=PicoCpuCM68k.read32=PicoRead32; + PicoCpuCM68k.write8 =PicoWrite8; + PicoCpuCM68k.write16=PicoWrite16; + PicoCpuCM68k.write32=PicoWrite32; #endif #ifdef EMU_F68K - PicoCpuM68k.read_byte =PicoRead8; - PicoCpuM68k.read_word =PicoRead16; - PicoCpuM68k.read_long =PicoRead32; - PicoCpuM68k.write_byte=PicoWrite8; - PicoCpuM68k.write_word=PicoWrite16; - PicoCpuM68k.write_long=PicoWrite32; + PicoCpuFM68k.read_byte =PicoRead8; + PicoCpuFM68k.read_word =PicoRead16; + PicoCpuFM68k.read_long =PicoRead32; + PicoCpuFM68k.write_byte=PicoWrite8; + PicoCpuFM68k.write_word=PicoWrite16; + PicoCpuFM68k.write_long=PicoWrite32; + + // setup FAME fetchmap + { + int i; + // by default, point everything to fitst 64k of ROM + for (i = 0; i < M68K_FETCHBANK1; i++) + PicoCpuFM68k.Fetch[i] = (unsigned int)Pico.rom - (i<<(24-FAMEC_FETCHBITS)); + // now real ROM + for (i = 0; i < M68K_FETCHBANK1 && (i<<(24-FAMEC_FETCHBITS)) < Pico.romsize; i++) + PicoCpuFM68k.Fetch[i] = (unsigned int)Pico.rom; + // .. and RAM + for (i = M68K_FETCHBANK1*14/16; i < M68K_FETCHBANK1; i++) + PicoCpuFM68k.Fetch[i] = (unsigned int)Pico.ram - (i<<(24-FAMEC_FETCHBITS)); + } #endif } @@ -670,14 +684,11 @@ end: return ret; } -PICO_INTERNAL unsigned short z80_read16(unsigned short a) -{ - //dprintf("z80_read16"); - - return (u16) ( (u16)z80_read(a) | ((u16)z80_read((u16)(a+1))<<8) ); -} - +#ifndef _USE_CZ80 PICO_INTERNAL_ASM void z80_write(unsigned char data, unsigned short a) +#else +PICO_INTERNAL_ASM void z80_write(unsigned int a, unsigned char data) +#endif { //if (a<0x4000) // dprintf("z80 w8 : %06x, %02x @%04x", a, data, mz80GetRegisterValue(NULL, 0)); @@ -718,6 +729,14 @@ PICO_INTERNAL_ASM void z80_write(unsigned char data, unsigned short a) elprintf(EL_ANOMALY, "z80 invalid w8 [%06x] %02x", a, data); } +#ifndef _USE_CZ80 +PICO_INTERNAL unsigned short z80_read16(unsigned short a) +{ + //dprintf("z80_read16"); + + return (u16) ( (u16)z80_read(a) | ((u16)z80_read((u16)(a+1))<<8) ); +} + PICO_INTERNAL void z80_write16(unsigned short data, unsigned short a) { //dprintf("z80_write16"); @@ -725,4 +744,5 @@ PICO_INTERNAL void z80_write16(unsigned short data, unsigned short a) z80_write((unsigned char) data,a); z80_write((unsigned char)(data>>8),(u16)(a+1)); } +#endif