X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2FPico.c;h=5684e999e5fc93460957aa3769bdc3dc6bc3e635;hb=1413b9a1185543e6fff7a3f67c5b8cdfec4b7eee;hp=da1129a63ce9f6329dbe82f149b43d6fc6bd6579;hpb=b06778874d140bd5187cb74444ddc40931b9bd1d;p=picodrive.git diff --git a/Pico/Pico.c b/Pico/Pico.c index da1129a..5684e99 100644 --- a/Pico/Pico.c +++ b/Pico/Pico.c @@ -16,6 +16,7 @@ int PicoOpt = 0; int PicoSkipFrame = 0; // skip rendering frame? int emustatus = 0; // rapid_ym2612, multi_ym_updates int PicoPad[2]; // Joypads, format is SACB RLDU +int PicoPadInt[2]; // internal copy int PicoAHW = 0; // active addon hardware: scd_active, 32x_active, svp_active, pico_active int PicoRegionOverride = 0; // override the region detection 0: Auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe int PicoAutoRgnOrder = 0; @@ -31,6 +32,7 @@ void PicoInit(void) // Blank space for state: memset(&Pico,0,sizeof(Pico)); memset(&PicoPad,0,sizeof(PicoPad)); + memset(&PicoPadInt,0,sizeof(PicoPadInt)); // Init CPUs: SekInit(); @@ -145,6 +147,7 @@ int PicoReset(void) PicoMemReset(); SekReset(); + memset(&PicoPadInt,0,sizeof(PicoPadInt)); // s68k doesn't have the TAS quirk, so we just globally set normal TAS handler in MCD mode (used by Batman games). SekSetRealTAS(PicoAHW & PAHW_MCD); SekCycleCntT=0; @@ -250,7 +253,7 @@ static __inline void SekRunM68k(int cyc) #elif defined(EMU_M68K) SekCycleCnt+=m68k_execute(cyc_do); #elif defined(EMU_F68K) - SekCycleCnt+=fm68k_emulate(cyc_do+1, 0); + SekCycleCnt+=fm68k_emulate(cyc_do+1, 0, 0); #endif } @@ -308,18 +311,8 @@ PICO_INTERNAL void PicoSyncZ80(int m68k_cycles_done) } -// TODO: rm from Sek.c+asm too -int idle_hit_counter = 0; - void PicoFrame(void) { -#if 0 - if ((Pico.m.frame_count&0x3f) == 0) { - elprintf(EL_STATUS, "ihits: %i", idle_hit_counter); - idle_hit_counter = 0; - } -#endif - Pico.m.frame_count++; if (PicoAHW & PAHW_MCD) { @@ -355,97 +348,3 @@ void PicoGetInternal(pint_t which, pint_ret_t *r) // callback to output message from emu void (*PicoMessage)(const char *msg)=NULL; -#if 1 // defined(__DEBUG_PRINT) -#define bit(r, x) ((r>>x)&1) -void z80_debug(char *dstr); -char *debugString(void) -{ -#if 1 - static char dstr[1024]; - struct PicoVideo *pv=&Pico.video; - unsigned char *reg=pv->reg, r; - extern int HighPreSpr[]; - int i, sprites_lo, sprites_hi; - char *dstrp; - - sprites_lo = sprites_hi = 0; - for (i = 0; HighPreSpr[i] != 0; i+=2) - if (HighPreSpr[i+1] & 0x8000) - sprites_hi++; - else sprites_lo++; - - dstrp = dstr; - sprintf(dstrp, "mode set 1: %02x spr lo: %2i, spr hi: %2i\n", (r=reg[0]), sprites_lo, sprites_hi); - dstrp+=strlen(dstrp); - sprintf(dstrp, "display_disable: %i, M3: %i, palette: %i, ?, hints: %i\n", bit(r,0), bit(r,1), bit(r,2), bit(r,4)); - dstrp+=strlen(dstrp); - sprintf(dstrp, "mode set 2: %02x hcnt: %i\n", (r=reg[1]), pv->reg[10]); dstrp+=strlen(dstrp); - sprintf(dstrp, "SMS/gen: %i, pal: %i, dma: %i, vints: %i, disp: %i, TMS: %i\n", bit(r,2), bit(r,3), bit(r,4), - bit(r,5), bit(r,6), bit(r,7)); dstrp+=strlen(dstrp); - sprintf(dstrp, "mode set 3: %02x\n", (r=reg[0xB])); dstrp+=strlen(dstrp); - sprintf(dstrp, "LSCR: %i, HSCR: %i, 2cell vscroll: %i, IE2: %i\n", bit(r,0), bit(r,1), bit(r,2), bit(r,3)); dstrp+=strlen(dstrp); - sprintf(dstrp, "mode set 4: %02x\n", (r=reg[0xC])); dstrp+=strlen(dstrp); - sprintf(dstrp, "interlace: %i%i, cells: %i, shadow: %i\n", bit(r,2), bit(r,1), (r&0x80) ? 40 : 32, bit(r,3)); - dstrp+=strlen(dstrp); - sprintf(dstrp, "scroll size: w: %i, h: %i SRAM: %i; eeprom: %i (%i)\n", reg[0x10]&3, (reg[0x10]&0x30)>>4, - bit(Pico.m.sram_reg, 4), bit(Pico.m.sram_reg, 2), SRam.eeprom_type); dstrp+=strlen(dstrp); - sprintf(dstrp, "sram range: %06x-%06x, reg: %02x\n", SRam.start, SRam.end, Pico.m.sram_reg); dstrp+=strlen(dstrp); - sprintf(dstrp, "pend int: v:%i, h:%i, vdp status: %04x\n", bit(pv->pending_ints,5), bit(pv->pending_ints,4), pv->status); - dstrp+=strlen(dstrp); -#if defined(EMU_C68K) - sprintf(dstrp, "M68k: PC: %06x, st_flg: %x, cycles: %u\n", SekPc, PicoCpuCM68k.state_flags, SekCyclesDoneT()); - dstrp+=strlen(dstrp); - sprintf(dstrp, "d0=%08x, a0=%08x, osp=%08x, irql=%i\n", PicoCpuCM68k.d[0], PicoCpuCM68k.a[0], PicoCpuCM68k.osp, PicoCpuCM68k.irq); dstrp+=strlen(dstrp); - sprintf(dstrp, "d1=%08x, a1=%08x, sr=%04x\n", PicoCpuCM68k.d[1], PicoCpuCM68k.a[1], CycloneGetSr(&PicoCpuCM68k)); dstrp+=strlen(dstrp); - for(r=2; r < 8; r++) { - sprintf(dstrp, "d%i=%08x, a%i=%08x\n", r, PicoCpuCM68k.d[r], r, PicoCpuCM68k.a[r]); dstrp+=strlen(dstrp); - } -#elif defined(EMU_M68K) - sprintf(dstrp, "M68k: PC: %06x, cycles: %u, irql: %i\n", SekPc, SekCyclesDoneT(), PicoCpuMM68k.int_level>>8); dstrp+=strlen(dstrp); -#elif defined(EMU_F68K) - sprintf(dstrp, "M68k: PC: %06x, cycles: %u, irql: %i\n", SekPc, SekCyclesDoneT(), PicoCpuFM68k.interrupts[0]); dstrp+=strlen(dstrp); -#endif - sprintf(dstrp, "z80Run: %i, pal: %i, frame#: %i\n", Pico.m.z80Run, Pico.m.pal, Pico.m.frame_count); dstrp+=strlen(dstrp); - z80_debug(dstrp); dstrp+=strlen(dstrp); - if (strlen(dstr) > sizeof(dstr)) - printf("warning: debug buffer overflow (%i/%i)\n", strlen(dstr), sizeof(dstr)); - -#else - struct PicoVideo *pvid=&Pico.video; - int table=0; - int i,u,n,link=0; - static char dstr[1024*8]; - dstr[0] = 0; - - table=pvid->reg[5]&0x7f; - if (pvid->reg[12]&1) table&=0x7e; // Lowest bit 0 in 40-cell mode - table<<=8; // Get sprite table address/2 - - for (i=u=n=0; u < 80 && n < 20; u++) - { - unsigned int *sprite; - int code, code2, sx, sy, height; - - sprite=(unsigned int *)(Pico.vram+((table+(link<<2))&0x7ffc)); // Find sprite - - // get sprite info - code = sprite[0]; - - // check if it is on this line - sy = (code&0x1ff);//-0x80; - height = ((code>>24)&3)+1; - - // masking sprite? - code2 = sprite[1]; - sx = (code2>>16)&0x1ff; - - printf("#%02i x: %03i y: %03i %ix%i\n", u, sx, sy, ((code>>26)&3)+1, height); - - link=(code>>16)&0x7f; - if(!link) break; // End of sprites - } -#endif - - return dstr; -} -#endif