#include "pico_int.h"
#include "sound/ym2612.h"
+#include "memory.h"
#include "debug.h"
#define bit(r, x) ((r>>x)&1)
{
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)
+ for (i = 0; Pico.est.HighPreSpr[i] != 0; i+=2)
+ if (Pico.est.HighPreSpr[i+1] & 0x8000)
sprites_hi++;
else sprites_lo++;
!!(SRam.flags & SRF_ENABLED), !!(SRam.flags & SRF_EEPROM), SRam.eeprom_type); MVP;
sprintf(dstrp, "sram range: %06x-%06x, reg: %02x\n", SRam.start, SRam.end, Pico.m.sram_reg); MVP;
sprintf(dstrp, "pend int: v:%i, h:%i, vdp status: %04x\n", bit(pv->pending_ints,5), bit(pv->pending_ints,4), pv->status); MVP;
- sprintf(dstrp, "pal: %i, hw: %02x, frame#: %i, cycles: %i\n", Pico.m.pal, Pico.m.hardware, Pico.m.frame_count, SekCyclesDone()); MVP;
+ sprintf(dstrp, "pal: %i, hw: %02x, frame#: %i, cycles: %u\n", Pico.m.pal, Pico.m.hardware, Pico.m.frame_count, SekCyclesDone()); MVP;
sprintf(dstrp, "M68k: PC: %06x, SR: %04x, irql: %i\n", SekPc, SekSr, SekIrqLevel); MVP;
for (r = 0; r < 8; r++) {
sprintf(dstrp, "d%i=%08x, a%i=%08x\n", r, SekDar(r), r, SekDar(r+8)); MVP;
void PDebugShowPalette(unsigned short *screen, int stride)
{
+ struct PicoEState *est = &Pico.est;
int x, y;
Pico.m.dirtyPal = 1;
if (PicoAHW & PAHW_SMS)
PicoDoHighPal555M4();
else
- PicoDoHighPal555(1);
+ PicoDoHighPal555(1, 0, est);
Pico.m.dirtyPal = 1;
screen += 16*stride+8;
for (y = 0; y < 8*4; y++)
for (x = 0; x < 8*16; x++)
- screen[x + y*stride] = HighPal[x/8 + (y/8)*16];
+ screen[x + y*stride] = est->HighPal[x/8 + (y/8)*16];
screen += 160;
for (y = 0; y < 8*4; y++)
for (x = 0; x < 8*16; x++)
- screen[x + y*stride] = HighPal[(x/8 + (y/8)*16) | 0x40];
+ screen[x + y*stride] = est->HighPal[(x/8 + (y/8)*16) | 0x40];
screen += stride*48;
for (y = 0; y < 8*4; y++)
for (x = 0; x < 8*16; x++)
- screen[x + y*stride] = HighPal[(x/8 + (y/8)*16) | 0x80];
+ screen[x + y*stride] = est->HighPal[(x/8 + (y/8)*16) | 0x80];
}
#if defined(DRAW2_OVERRIDE_LINE_WIDTH)
struct PicoVideo *pvid=&Pico.video;
int table=0,u,link=0,*sprite=0,*fsprite,oldsprite[2];
int x,y,max_sprites = 80, oldcol, oldreg;
+ unsigned char olddbg;
if (!(pvid->reg[12]&1))
max_sprites = 64;
fsprite[1] = (sprite[1] & ~0x01ff8000) | 0x800000;
oldreg = pvid->reg[7];
oldcol = Pico.cram[0];
+ olddbg = pvid->debug_p;
pvid->reg[7] = 0;
Pico.cram[0] = 0;
- PicoDrawMask = PDRAW_SPRITES_LOW_ON;
+ pvid->debug_p = PVD_KILL_A | PVD_KILL_B;
PicoFrameFull();
for (y = 0; y < 8*4; y++)
{
- unsigned char *ps = PicoDraw2FB + DRAW2_LINE_WIDTH*y + 8;
+ unsigned char *ps = Pico.est.Draw2FB + DRAW2_LINE_WIDTH*y + 8;
for (x = 0; x < 8*4; x++)
- if (ps[x]) screen[x] = HighPal[ps[x]], ps[x] = 0;
+ if (ps[x]) screen[x] = Pico.est.HighPal[ps[x]], ps[x] = 0;
screen += stride;
}
fsprite[1] = oldsprite[1];
pvid->reg[7] = oldreg;
Pico.cram[0] = oldcol;
- PicoDrawMask = -1;
+ pvid->debug_p = olddbg;
}
-#define dump_ram(ram,fname) \
+#define dump_ram_m(ram,fname,mode) \
{ \
unsigned short *sram = (unsigned short *) ram; \
FILE *f; \
\
for (i = 0; i < sizeof(ram)/2; i++) \
sram[i] = (sram[i]<<8) | (sram[i]>>8); \
- f = fopen(fname, "wb"); \
+ f = fopen(fname, mode); \
if (f) { \
fwrite(ram, 1, sizeof(ram), f); \
fclose(f); \
sram[i] = (sram[i]<<8) | (sram[i]>>8); \
}
+#define dump_ram(ram,fname) \
+ dump_ram_m(ram,fname,"wb")
+
#define dump_ram_noswab(ram,fname) \
{ \
FILE *f; \
void PDebugDumpMem(void)
{
+#if 0
+ char buf[1 << M68K_MEM_SHIFT];
+ unsigned int a;
+ for (a = 0; ; a++) {
+ uptr v = m68k_read16_map[a];
+ if (map_flag_set(v))
+ break;
+ v <<= 1;
+ v += a << M68K_MEM_SHIFT;
+ memcpy(buf, (void *)v, sizeof(buf));
+ dump_ram_m(buf, "dumps/cart.bin", a ? "ab" : "wb");
+ }
+#endif
dump_ram_noswab(Pico.zram, "dumps/zram.bin");
dump_ram(Pico.cram, "dumps/cram.bin");
return;
if (Pico.m.pal) {
- lines = 312;
+ lines = 313;
line_sample = 68;
} else {
lines = 262;
}
z80_resetCycles();
- emustatus &= ~1;
+ PsndStartFrame();
- if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80))
- PicoSyncZ80(line_sample*488);
- if (ym2612.dacen && PsndDacLine <= line_sample)
- PsndDoDAC(line_sample);
+ if (/*Pico.m.z80Run &&*/ !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80))
+ PicoSyncZ80(SekCycleCnt + line_sample * 488);
if (PsndOut)
PsndGetSamples(line_sample);
- if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80)) {
- PicoSyncZ80(224*488);
+ if (/*Pico.m.z80Run &&*/ !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80)) {
+ PicoSyncZ80(SekCycleCnt + 224 * 488);
z80_int();
}
- if (ym2612.dacen && PsndDacLine <= 224)
- PsndDoDAC(224);
if (PsndOut)
PsndGetSamples(224);
// sync z80
- if (Pico.m.z80Run && !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80))
- PicoSyncZ80(Pico.m.pal ? 151809 : 127671); // cycles adjusted for converter
- if (PsndOut && ym2612.dacen && PsndDacLine <= lines-1)
- PsndDoDAC(lines-1);
+ if (/*Pico.m.z80Run &&*/ !Pico.m.z80_reset && (PicoOpt&POPT_EN_Z80)) {
+ SekCycleCnt += Pico.m.pal ? 151809 : 127671; // cycles adjusted for converter
+ PicoSyncZ80(SekCycleCnt);
+ }
+ if (PsndOut && ym2612.dacen && PsndDacLine < lines)
+ PsndDoDAC(lines - 1);
+ PsndDoPSG(lines - 1);
timers_cycle();
+ SekCycleAim = SekCycleCnt;
}
void PDebugCPUStep(void)