--- np2/vram/scrndraw.c 2003/10/16 17:58:13 1.1.1.1 +++ np2/vram/scrndraw.c 2005/02/04 05:32:24 1.7 @@ -53,13 +53,14 @@ static BYTE rasterdraw(SDRAWFN sdrawfn, int nextupdate; int y; + TRACEOUT(("rasterdraw: maxy = %d", maxy)); CopyMemory(pal, palevent.pal, sizeof(pal)); clock = maxy; clock += 2; clock += np2cfg.realpal; clock -= 32; clock += (gdc.m.para[GDC_SYNC + 5] >> 2) & 0x3f; - clock *= pc.raster; + clock *= gdc.rasterclock; event = palevent.event; eventterm = event + palevent.events; nextupdate = 0; @@ -92,9 +93,9 @@ static BYTE rasterdraw(SDRAWFN sdrawfn, } } } - clock -= 2 * pc.raster; // ver0.28 + clock -= 2 * gdc.rasterclock; } - if (y < maxy) { + if (nextupdate < maxy) { if (!(np2cfg.LCD_MODE & 1)) { pal_makeanalog(pal, 0xffff); } @@ -109,7 +110,10 @@ static BYTE rasterdraw(SDRAWFN sdrawfn, } (*sdrawfn)(sdraw, maxy); } - if (nextupdate) { + if (palevent.vsyncpal) { + return(2); + } + else if (nextupdate) { for (y=0; yheight; + do { +#if defined(SUPPORT_PC9821) + if (gdc.analog & 2) { + break; + } +#endif +#if defined(SUPPORT_CRT15KHZ) + if (gdc.crt15khz & 2) { + sdrawfn += 12; + height >>= 1; + break; + } +#endif + if (gdc.mode1 & 0x10) { sdrawfn += 4; + if (np2cfg.skipline) { + sdrawfn += 4; + } } - } + } while(0); switch(bit & 7) { case 1: // grph1 sdrawfn += 2; @@ -202,11 +234,11 @@ const SDRAWFN *sdrawfn; sdraw.y = 0; sdraw.xalign = surf->xalign; sdraw.yalign = surf->yalign; - if ((!gdc.analog) || (palevent.events >= PALEVENTMAX)) { - (*(*sdrawfn))(&sdraw, surf->height); + if (((gdc.analog & 3) != 1) || (palevent.events >= PALEVENTMAX)) { + (*(*sdrawfn))(&sdraw, height); } else { - ret = rasterdraw(*sdrawfn, &sdraw, surf->height); + ret = rasterdraw(*sdrawfn, &sdraw, height); } sddr_exit2: