X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2FPicoInt.h;h=47ba2c9a3e500a54cad21280c20487166e1973f7;hb=66fdc0f0d590809fb0040d08fd57607bf80b1abc;hp=6168a7b1a73cbfd3681d4b0b5444f825eec61de4;hpb=cea6590346640236914eeff840401c55db8a77ce;p=picodrive.git diff --git a/Pico/PicoInt.h b/Pico/PicoInt.h index 6168a7b..47ba2c9 100644 --- a/Pico/PicoInt.h +++ b/Pico/PicoInt.h @@ -24,8 +24,13 @@ extern "C" { #ifdef EMU_C68K #include "../cpu/Cyclone/Cyclone.h" extern struct Cyclone PicoCpu, PicoCpuS68k; -#define SekCyclesLeft PicoCpu.cycles // cycles left for this run -#define SekSetCyclesLeft(c) PicoCpu.cycles=c +#define SekCyclesLeftNoMCD PicoCpu.cycles // cycles left for this run +#define SekCyclesLeft \ + (((PicoMCD&1) && (PicoOpt & 0x2000)) ? (SekCycleAim-SekCycleCnt) : SekCyclesLeftNoMCD) +#define SekSetCyclesLeftNoMCD(c) PicoCpu.cycles=c +#define SekSetCyclesLeft(c) { \ + if ((PicoMCD&1) && (PicoOpt & 0x2000)) SekCycleCnt=SekCycleAim-(c); else SekSetCyclesLeftNoMCD(c); \ +} #define SekPc (PicoCpu.pc-PicoCpu.membase) #define SekPcS68k (PicoCpuS68k.pc-PicoCpuS68k.membase) #endif @@ -55,8 +60,13 @@ extern int m68k_ICount; extern m68ki_cpu_core PicoM68kCPU; // MD's CPU extern m68ki_cpu_core PicoS68kCPU; // Mega CD's CPU #ifndef SekCyclesLeft -#define SekCyclesLeft m68k_cycles_remaining() -#define SekSetCyclesLeft(c) SET_CYCLES(c) +#define SekCyclesLeftNoMCD m68k_cycles_remaining() +#define SekCyclesLeft \ + (((PicoMCD&1) && (PicoOpt & 0x2000)) ? (SekCycleAim-SekCycleCnt) : SekCyclesLeftNoMCD) +#define SekSetCyclesLeftNoMCD(c) SET_CYCLES(c) +#define SekSetCyclesLeft(c) { \ + if ((PicoMCD&1) && (PicoOpt & 0x2000)) SekCycleCnt=SekCycleAim-(c); else SET_CYCLES(c); \ +} #define SekPc m68k_get_reg(&PicoM68kCPU, M68K_REG_PC) #define SekPcS68k m68k_get_reg(&PicoS68kCPU, M68K_REG_PC) #endif @@ -198,13 +208,22 @@ struct mcd_misc typedef struct { unsigned char bios[0x20000]; // 128K - union { - unsigned char prg_ram[0x80000]; // 512K + union { // 512K + unsigned char prg_ram[0x80000]; unsigned char prg_ram_b[4][0x20000]; }; - unsigned char word_ram[0x40000]; // 256K - union { - unsigned char pcm_ram[0x10000]; // 64K + union { // 256K + struct { + unsigned char word_ram2M[0x40000]; + unsigned char unused[0x20000]; + }; + struct { + unsigned char unused[0x20000]; + unsigned char word_ram1M[2][0x20000]; + }; + }; + union { // 64K + unsigned char pcm_ram[0x10000]; unsigned char pcm_ram_b[0x10][0x1000]; }; unsigned char bram[0x2000]; // 8K @@ -227,6 +246,7 @@ int PicoAreaUnpackCpu(unsigned char *cpu, int is_sub); // cd/Area.c int PicoCdSaveState(void *file); int PicoCdLoadState(void *file); +int PicoCdLoadStateGfx(void *file); // Draw.c int PicoLine(int scan); @@ -247,7 +267,7 @@ void z80_write(unsigned char data, unsigned short a); void z80_write16(unsigned short data, unsigned short a); // cd/Memory.c -void PicoMemSetupCD(); +void PicoMemSetupCD(void); unsigned char PicoReadCD8 (unsigned int a); unsigned short PicoReadCD16(unsigned int a); unsigned int PicoReadCD32(unsigned int a); @@ -290,9 +310,14 @@ void SRAMWriteEEPROM(unsigned int d); unsigned int SRAMReadEEPROM(); void SRAMUpdPending(unsigned int a, unsigned int d); void memcpy16(unsigned short *dest, unsigned short *src, int count); +void memcpy16bswap(unsigned short *dest, void *src, int count); void memcpy32(int *dest, int *src, int count); void memset32(int *dest, int c, int count); +// cd/Misc.c +void wram_2M_to_1M(unsigned char *m); +void wram_1M_to_2M(unsigned char *m); + #ifdef __cplusplus } // End of extern "C"