X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2FPicoInt.h;h=5c71f8a7ead1fe0efe27d21f1e3130c5ea4b838b;hb=89fa852dce08d9aab0f19458a4afa246e9839e9e;hp=694952e22fb72706b5364869c247dbbeb14822d1;hpb=4ff2d52753e46bce5622a5935f3d3750b5848f8f;p=picodrive.git diff --git a/Pico/PicoInt.h b/Pico/PicoInt.h index 694952e..5c71f8a 100644 --- a/Pico/PicoInt.h +++ b/Pico/PicoInt.h @@ -12,6 +12,9 @@ #include #include "Pico.h" +// +#define USE_POLL_DETECT + // to select core, define EMU_C68K, EMU_M68K or EMU_A68K in your makefile or project @@ -27,12 +30,16 @@ extern struct Cyclone PicoCpu, PicoCpuS68k; #define SekCyclesLeftNoMCD PicoCpu.cycles // cycles left for this run #define SekCyclesLeft \ (((PicoMCD&1) && (PicoOpt & 0x2000)) ? (SekCycleAim-SekCycleCnt) : SekCyclesLeftNoMCD) +#define SekCyclesLeftS68k \ + ((PicoOpt & 0x2000) ? (SekCycleAimS68k-SekCycleCntS68k) : PicoCpuS68k.cycles) #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) +#define SekSetStop(x) { PicoCpu.stopped=x; if (x) PicoCpu.cycles=0; } +#define SekSetStopS68k(x) { PicoCpuS68k.stopped=x; if (x) PicoCpuS68k.cycles=0; } #endif #ifdef EMU_A68K @@ -60,15 +67,25 @@ extern int m68k_ICount; extern m68ki_cpu_core PicoM68kCPU; // MD's CPU extern m68ki_cpu_core PicoS68kCPU; // Mega CD's CPU #ifndef SekCyclesLeft -#define SekCyclesLeftNoMCD m68k_cycles_remaining() +#define SekCyclesLeftNoMCD PicoM68kCPU.cyc_remaining_cycles #define SekCyclesLeft \ (((PicoMCD&1) && (PicoOpt & 0x2000)) ? (SekCycleAim-SekCycleCnt) : SekCyclesLeftNoMCD) +#define SekCyclesLeftS68k \ + ((PicoOpt & 0x2000) ? (SekCycleAimS68k-SekCycleCntS68k) : PicoS68kCPU.cyc_remaining_cycles) #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) +#define SekSetStop(x) { \ + if(x) { SET_CYCLES(0); PicoM68kCPU.stopped=STOP_LEVEL_STOP; } \ + else PicoM68kCPU.stopped=0; \ +} +#define SekSetStopS68k(x) { \ + if(x) { SET_CYCLES(0); PicoS68kCPU.stopped=STOP_LEVEL_STOP; } \ + else PicoS68kCPU.stopped=0; \ +} #endif #endif @@ -91,6 +108,7 @@ extern int SekCycleCntS68k; extern int SekCycleAimS68k; #define SekCyclesResetS68k() {SekCycleCntS68k=SekCycleAimS68k=0;} +#define SekCyclesDoneS68k() (SekCycleAimS68k-SekCyclesLeftS68k) // does not work as expected //extern int z80ExtraCycles; // extra z80 cycles, used when z80 is [en|dis]abled @@ -195,7 +213,7 @@ struct mcd_misc unsigned short hint_vector; unsigned char busreq; unsigned char s68k_pend_ints; - unsigned int state_flags; // 04: emu state: reset_pending, + unsigned int state_flags; // 04: emu state: reset_pending, dmna_pending unsigned int counter75hz; unsigned short audio_offset; // 0c: for savestates: play pointer offset (0-1023) unsigned char audio_track; // playing audio track # (zero based) @@ -269,6 +287,7 @@ void z80_write16(unsigned short data, unsigned short a); // cd/Memory.c void PicoMemSetupCD(void); void PicoMemResetCD(int r3); +void PicoMemResetCDdecode(int r3); unsigned char PicoReadCD8 (unsigned int a); unsigned short PicoReadCD16(unsigned int a); unsigned int PicoReadCD32(unsigned int a);