\r
extern const unsigned char hcounts_32[];\r
extern const unsigned char hcounts_40[];\r
-extern const unsigned short vcounts[];\r
\r
#ifndef UTYPES_DEFINED\r
typedef unsigned char u8;\r
//default:elprintf(EL_ANOMALY, "VDP write %04x with bad type %i", d, Pico.video.type); break;\r
}\r
\r
- //dprintf("w[%i] @ %04x, inc=%i [%i|%i]", Pico.video.type, a, Pico.video.reg[0xf], Pico.m.scanline, SekCyclesDone());\r
AutoIncrement();\r
}\r
\r
Pico.video.type, source, a, len, inc, (Pico.video.status&8)||!(Pico.video.reg[1]&0x40),\r
SekCyclesDone(), SekPc);\r
\r
- if (Pico.m.scanline != -1) {\r
- Pico.m.dma_xfers += len;\r
- if ((PicoAHW & PAHW_MCD) && (PicoOpt & POPT_EN_MCD_PSYNC)) SekCyclesBurn(CheckDMA());\r
- else SekSetCyclesLeftNoMCD(SekCyclesLeftNoMCD - CheckDMA());\r
- } else {\r
- // be approximate in non-accurate mode\r
- SekSetCyclesLeft(SekCyclesLeft - (len*(((488<<8)/167))>>8));\r
- }\r
+ Pico.m.dma_xfers += len;\r
+ if ((PicoAHW & PAHW_MCD) && (PicoOpt & POPT_EN_MCD_PSYNC)) SekCyclesBurn(CheckDMA());\r
+ else SekSetCyclesLeftNoMCD(SekCyclesLeftNoMCD - CheckDMA());\r
\r
if ((source&0xe00000)==0xe00000) { // Ram\r
pd=(u16 *)(Pico.ram+(source&0xfffe));\r
elprintf(EL_VDPDMA, "DmaCopy len %i [%i]", len, SekCyclesDone());\r
\r
Pico.m.dma_xfers += len;\r
- if(Pico.m.scanline != -1)\r
- Pico.video.status|=2; // dma busy\r
+ Pico.video.status |= 2; // dma busy\r
\r
source =Pico.video.reg[0x15];\r
source|=Pico.video.reg[0x16]<<8;\r
vrs=vr+source;\r
\r
- if(source+len > 0x10000) len=0x10000-source; // clip??\r
+ if (source+len > 0x10000) len=0x10000-source; // clip??\r
\r
- for(;len;len--)\r
+ for (; len; len--)\r
{\r
vr[a] = *vrs++;\r
// AutoIncrement\r
elprintf(EL_VDPDMA, "DmaFill len %i inc %i [%i]", len, inc, SekCyclesDone());\r
\r
Pico.m.dma_xfers += len;\r
- if(Pico.m.scanline != -1)\r
- Pico.video.status|=2; // dma busy (in accurate mode)\r
+ Pico.video.status |= 2; // dma busy\r
\r
// from Charles MacDonald's genvdp.txt:\r
// Write lower byte to address specified\r
vr[a] = (unsigned char) data;\r
a=(u16)(a+inc);\r
\r
- if(!inc) len=1;\r
+ if (!inc) len=1;\r
\r
- for(;len;len--) {\r
+ for (; len; len--) {\r
// Write upper byte to adjacent address\r
// (here we are byteswapped, so address is already 'adjacent')\r
vr[a] = high;\r
{\r
if (Pico.m.scanline < 224 && !(PicoOpt & POPT_ALT_RENDERER) &&\r
!PicoSkipFrame && DrawScanline <= Pico.m.scanline) {\r
- elprintf(EL_ANOMALY, "sync");\r
+ //elprintf(EL_ANOMALY, "sync");\r
PicoDrawSync(Pico.m.scanline, blank_on);\r
}\r
}\r
{\r
struct PicoVideo *pvid=&Pico.video;\r
\r
- if (Pico.m.scanline < 224)\r
- elprintf(EL_STATUS, "PicoVideoWrite [%06x] %04x", a, d);\r
+ //if (Pico.m.scanline < 224)\r
+ // elprintf(EL_STATUS, "PicoVideoWrite [%06x] %04x", a, d);\r
a&=0x1c;\r
\r
if (a==0x00) // Data port 0 or 2\r
else\r
{\r
// preliminary FIFO emulation for Chaos Engine, The (E)\r
- if (!(pvid->status&8) && (pvid->reg[1]&0x40) && Pico.m.scanline!=-1 && !(PicoOpt&POPT_DIS_VDP_FIFO)) // active display, accurate mode?\r
+ if (!(pvid->status&8) && (pvid->reg[1]&0x40) && !(PicoOpt&POPT_DIS_VDP_FIFO)) // active display?\r
{\r
pvid->status&=~0x200; // FIFO no longer empty\r
pvid->lwrite_cnt++;\r
else if (pints & 0x10) irq = 4;\r
SekInterrupt(irq); // update line\r
\r
- if (irq && Pico.m.scanline!=-1) SekEndRun(24); // make it delayed\r
+ if (irq) SekEndRun(24); // make it delayed\r
}\r
#endif\r
}\r
if ((a&0x1c)==0x08)\r
{\r
unsigned int hc, d;\r
+ int lineCycles;\r
+ \r
+ lineCycles = (488-SekCyclesLeft)&0x1ff;\r
+ d = Pico.m.scanline; // V-Counter\r
\r
- if (Pico.m.scanline != -1)\r
- {\r
- int lineCycles=(488-SekCyclesLeft)&0x1ff;\r
- d=Pico.m.scanline; // V-Counter\r
-\r
- if(Pico.video.reg[12]&1)\r
- hc=hcounts_40[lineCycles];\r
- else hc=hcounts_32[lineCycles];\r
-\r
- //if(lineCycles > 488-12) d++; // Wheel of Fortune\r
- } else {\r
- // get approximate V-Counter\r
- d=vcounts[SekCyclesDone()>>8];\r
- hc = Pico.m.rotate&0xff;\r
- }\r
+ if (Pico.video.reg[12]&1)\r
+ hc=hcounts_40[lineCycles];\r
+ else hc=hcounts_32[lineCycles];\r
\r
- if(Pico.m.pal) {\r
+ if (Pico.m.pal) {\r
if (d >= 0x103) d-=56; // based on Gens\r
} else {\r
if (d >= 0xEB) d-=6;\r
}\r
\r
- if((Pico.video.reg[12]&6) == 6) {\r
+ if ((Pico.video.reg[12]&6) == 6) {\r
// interlace mode 2 (Combat Cars (UE) [!])\r
d <<= 1;\r
if (d&0xf00) d|= 1;\r