X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fvideoport.c;h=9def819deb4a4b86bf7e251db61e403cf80a4afa;hb=fda2f31020bf0d6cf7b5dd70ec01cf390b7e1483;hp=b5e3f86ceaa791da564c35e6398c6dec8dd6750e;hpb=0e4bde9b2d981c264343aa66809f2f26ce7843c8;p=picodrive.git diff --git a/pico/videoport.c b/pico/videoport.c index b5e3f86..9def819 100644 --- a/pico/videoport.c +++ b/pico/videoport.c @@ -100,7 +100,7 @@ static void DmaSlow(int len, unsigned int source) Pico.video.type, source, a, len, inc, (Pico.video.status&8)||!(Pico.video.reg[1]&0x40), SekCyclesDone(), SekPc); - Pico.m.dma_xfers += len; + Pico.m.dma_xfers = len; if (Pico.m.dma_xfers < len) // lame 16bit var Pico.m.dma_xfers = ~0; SekCyclesBurnRun(CheckDMA()); @@ -109,7 +109,7 @@ static void DmaSlow(int len, unsigned int source) base = (u16 *)PicoMem.ram; mask = 0xffff; } - else if (PicoAHW & PAHW_MCD) + else if (PicoIn.AHW & PAHW_MCD) { u8 r3 = Pico_mcd->s68k_regs[3]; elprintf(EL_VDPDMA, "DmaSlow CD, r3=%02x", r3); @@ -225,10 +225,10 @@ static void DmaCopy(int len) int source; elprintf(EL_VDPDMA, "DmaCopy len %i [%u]", len, SekCyclesDone()); - Pico.m.dma_xfers += len; + Pico.m.dma_xfers = len; if (Pico.m.dma_xfers < len) Pico.m.dma_xfers = ~0; - Pico.video.status |= 2; // dma busy + Pico.video.status |= SR_DMA; source =Pico.video.reg[0x15]; source|=Pico.video.reg[0x16]<<8; @@ -256,10 +256,10 @@ static NOINLINE void DmaFill(int data) len = GetDmaLength(); elprintf(EL_VDPDMA, "DmaFill len %i inc %i [%u]", len, inc, SekCyclesDone()); - Pico.m.dma_xfers += len; + Pico.m.dma_xfers = len; if (Pico.m.dma_xfers < len) // lame 16bit var Pico.m.dma_xfers = ~0; - Pico.video.status |= 2; // dma busy + Pico.video.status |= SR_DMA; switch (Pico.video.type) { @@ -306,6 +306,10 @@ static NOINLINE void CommandDma(void) if ((pvid->reg[1]&0x10)==0) return; // DMA not enabled + if (Pico.m.dma_xfers) + elprintf(EL_VDPDMA|EL_ANOMALY, "Dma overlap, left=%d @ %06x", + Pico.m.dma_xfers, SekPc); + len = GetDmaLength(); source =Pico.video.reg[0x15]; source|=Pico.video.reg[0x16] << 8; @@ -346,8 +350,8 @@ static NOINLINE void CommandChange(void) static void DrawSync(int blank_on) { - if (Pico.m.scanline < 224 && !(PicoOpt & POPT_ALT_RENDERER) && - !PicoSkipFrame && Pico.est.DrawScanline <= Pico.m.scanline) { + if (Pico.m.scanline < 224 && !(PicoIn.opt & POPT_ALT_RENDERER) && + !PicoIn.skipFrame && Pico.est.DrawScanline <= Pico.m.scanline) { //elprintf(EL_ANOMALY, "sync"); PicoDrawSync(Pico.m.scanline, blank_on); } @@ -376,7 +380,7 @@ PICO_INTERNAL_ASM void PicoVideoWrite(unsigned int a,unsigned short d) pvid->pending=0; } - if (!(pvid->status & SR_VB) && !(PicoOpt&POPT_DIS_VDP_FIFO)) + if (!(pvid->status & SR_VB) && !(PicoIn.opt&POPT_DIS_VDP_FIFO)) { int use = pvid->type == 1 ? 2 : 1; pvid->lwrite_cnt -= use;