#ifdef EMU_C68K\r
#include "../cpu/Cyclone/Cyclone.h"\r
extern struct Cyclone PicoCpu, PicoCpuS68k;\r
-#define SekCyclesLeft PicoCpu.cycles // cycles left for this run\r
-#define SekSetCyclesLeft(c) PicoCpu.cycles=c\r
+#define SekCyclesLeftNoMCD PicoCpu.cycles // cycles left for this run\r
+#define SekCyclesLeft \\r
+ (((PicoMCD&1) && (PicoOpt & 0x2000)) ? (SekCycleAim-SekCycleCnt) : SekCyclesLeftNoMCD)\r
+#define SekSetCyclesLeftNoMCD(c) PicoCpu.cycles=c\r
+#define SekSetCyclesLeft(c) { \\r
+ if ((PicoMCD&1) && (PicoOpt & 0x2000)) SekCycleCnt=SekCycleAim-(c); else SekSetCyclesLeftNoMCD(c); \\r
+}\r
#define SekPc (PicoCpu.pc-PicoCpu.membase)\r
#define SekPcS68k (PicoCpuS68k.pc-PicoCpuS68k.membase)\r
#endif\r
extern m68ki_cpu_core PicoM68kCPU; // MD's CPU\r
extern m68ki_cpu_core PicoS68kCPU; // Mega CD's CPU\r
#ifndef SekCyclesLeft\r
-#define SekCyclesLeft m68k_cycles_remaining()\r
-#define SekSetCyclesLeft(c) SET_CYCLES(c)\r
+#define SekCyclesLeftNoMCD m68k_cycles_remaining()\r
+#define SekCyclesLeft \\r
+ (((PicoMCD&1) && (PicoOpt & 0x2000)) ? (SekCycleAim-SekCycleCnt) : SekCyclesLeftNoMCD)\r
+#define SekSetCyclesLeftNoMCD(c) SET_CYCLES(c)\r
+#define SekSetCyclesLeft(c) { \\r
+ if ((PicoMCD&1) && (PicoOpt & 0x2000)) SekCycleCnt=SekCycleAim-(c); else SET_CYCLES(c); \\r
+}\r
#define SekPc m68k_get_reg(&PicoM68kCPU, M68K_REG_PC)\r
#define SekPcS68k m68k_get_reg(&PicoS68kCPU, M68K_REG_PC)\r
#endif\r
// sram\r
struct PicoSRAM\r
{\r
- unsigned char *data; // actual data\r
- unsigned int start; // start address in 68k address space\r
+ unsigned char *data; // actual data\r
+ unsigned int start; // start address in 68k address space\r
unsigned int end;\r
- unsigned char resize; // 1=SRAM size changed and needs to be reallocated on PicoReset\r
- unsigned char reg_back; // copy of Pico.m.sram_reg to set after reset\r
+ unsigned char resize; // 0c: 1=SRAM size changed and needs to be reallocated on PicoReset\r
+ unsigned char reg_back; // copy of Pico.m.sram_reg to set after reset\r
unsigned char changed;\r
unsigned char pad;\r
};\r
unsigned char bank;\r
int pad1;\r
\r
- struct pcm_chan\r
+ struct pcm_chan // 08, size 0x10\r
{\r
unsigned char regs[8];\r
- unsigned int addr; // played sample address\r
+ unsigned int addr; // .08: played sample address\r
int pad;\r
} ch[8];\r
};\r
unsigned short hint_vector;\r
unsigned char busreq;\r
unsigned char s68k_pend_ints;\r
- unsigned int state_flags; // emu state: reset_pending,\r
+ unsigned int state_flags; // 04: emu state: reset_pending,\r
unsigned int counter75hz;\r
- unsigned short audio_offset; // for savestates: play pointer offset (0-1023)\r
+ unsigned short audio_offset; // 0c: for savestates: play pointer offset (0-1023)\r
unsigned char audio_track; // playing audio track # (zero based)\r
char pad1;\r
- int timer_int3;\r
+ int timer_int3; // 10\r
unsigned int timer_stopwatch;\r
int pad[10];\r
};\r
\r
typedef struct\r
{\r
- unsigned char bios[0x20000]; // 128K\r
- union {\r
- unsigned char prg_ram[0x80000]; // 512K\r
+ unsigned char bios[0x20000]; // 000000: 128K\r
+ union { // 020000: 512K\r
+ unsigned char prg_ram[0x80000];\r
unsigned char prg_ram_b[4][0x20000];\r
};\r
- unsigned char word_ram[0x40000]; // 256K\r
- union {\r
- unsigned char pcm_ram[0x10000]; // 64K\r
+ union { // 0a0000: 256K\r
+ struct {\r
+ unsigned char word_ram2M[0x40000];\r
+ unsigned char unused[0x20000];\r
+ };\r
+ struct {\r
+ unsigned char unused[0x20000];\r
+ unsigned char word_ram1M[2][0x20000];\r
+ };\r
+ };\r
+ union { // 100000: 64K\r
+ unsigned char pcm_ram[0x10000];\r
unsigned char pcm_ram_b[0x10][0x1000];\r
};\r
- unsigned char bram[0x2000]; // 8K\r
- unsigned char s68k_regs[0x200]; // GA, not CPU regs\r
- struct mcd_pcm pcm;\r
+ unsigned char s68k_regs[0x200]; // 110000: GA, not CPU regs\r
+ unsigned char bram[0x2000]; // 110200: 8K\r
+ struct mcd_misc m; // 112200: misc\r
+ struct mcd_pcm pcm; // 112240:\r
_scd_toc TOC; // not to be saved\r
CDD cdd;\r
CDC cdc;\r
_scd scd;\r
Rot_Comp rot_comp;\r
- struct mcd_misc m;\r
} mcd_state;\r
\r
#define Pico_mcd ((mcd_state *)Pico.rom)\r
// cd/Area.c\r
int PicoCdSaveState(void *file);\r
int PicoCdLoadState(void *file);\r
+int PicoCdLoadStateGfx(void *file);\r
\r
// Draw.c\r
int PicoLine(int scan);\r
void z80_write16(unsigned short data, unsigned short a);\r
\r
// cd/Memory.c\r
-void PicoMemSetupCD();\r
+void PicoMemSetupCD(void);\r
+void PicoMemResetCD(int r3);\r
+void PicoMemResetCDdecode(int r3);\r
unsigned char PicoReadCD8 (unsigned int a);\r
unsigned short PicoReadCD16(unsigned int a);\r
unsigned int PicoReadCD32(unsigned int a);\r
int SekResetS68k(void);\r
int SekInterruptS68k(int irq);\r
\r
+// sound/sound.c\r
+extern int PsndLen_exc_cnt;\r
+extern int PsndLen_exc_add;\r
+\r
// VideoPort.c\r
void PicoVideoWrite(unsigned int a,unsigned short d);\r
unsigned int PicoVideoRead(unsigned int a);\r
void SRAMWriteEEPROM(unsigned int d);\r
unsigned int SRAMReadEEPROM();\r
void SRAMUpdPending(unsigned int a, unsigned int d);\r
+void memcpy16(unsigned short *dest, unsigned short *src, int count);\r
+void memcpy16bswap(unsigned short *dest, void *src, int count);\r
+void memcpy32(int *dest, int *src, int count);\r
+void memset32(int *dest, int c, int count);\r
+\r
+// cd/Misc.c\r
+void wram_2M_to_1M(unsigned char *m);\r
+void wram_1M_to_2M(unsigned char *m);\r
\r
\r
#ifdef __cplusplus\r