--- np2/vram/scrndraw.c 2004/01/13 05:30:59 1.3 +++ np2/vram/scrndraw.c 2011/01/15 18:04:43 1.10 @@ -8,9 +8,9 @@ #include "palettes.h" - BYTE renewal_line[SURFACE_HEIGHT]; - BYTE np2_tram[SURFACE_SIZE]; - BYTE np2_vram[2][SURFACE_SIZE]; + UINT8 renewal_line[SURFACE_HEIGHT]; + UINT8 np2_tram[SURFACE_SIZE]; + UINT8 np2_vram[2][SURFACE_SIZE]; static void updateallline(UINT32 update) { @@ -44,22 +44,23 @@ void scrndraw_changepalette(void) { updateallline(0x80808080); } -static BYTE rasterdraw(SDRAWFN sdrawfn, SDRAW sdraw, int maxy) { +static UINT8 rasterdraw(SDRAWFN sdrawfn, SDRAW sdraw, int maxy) { RGB32 pal[16]; - SINT32 clock; + SINT32 clk; PAL1EVENT *event; PAL1EVENT *eventterm; 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 *= pccore.raster; + clk = maxy; + clk += 2; + clk += np2cfg.realpal; + clk -= 32; + clk += (gdc.m.para[GDC_SYNC + 5] >> 2) & 0x3f; + clk *= gdc.rasterclock; event = palevent.event; eventterm = event + palevent.events; nextupdate = 0; @@ -68,7 +69,7 @@ static BYTE rasterdraw(SDRAWFN sdrawfn, break; } // お弁当はあった? - if (clock < event->clock) { + if (clk < event->clock) { if (!(np2cfg.LCD_MODE & 1)) { pal_makeanalog(pal, 0xffff); } @@ -84,17 +85,17 @@ static BYTE rasterdraw(SDRAWFN sdrawfn, (*sdrawfn)(sdraw, y); nextupdate = y; // お弁当を食べる - while(clock < event->clock) { - ((BYTE *)pal)[event->color] = event->value; + while(clk < event->clock) { + ((UINT8 *)pal)[event->color] = event->value; event++; if (event >= eventterm) { break; } } } - clock -= 2 * pccore.raster; + clk -= 2 * gdc.rasterclock; } - if (y < maxy) { + if (nextupdate < maxy) { if (!(np2cfg.LCD_MODE & 1)) { pal_makeanalog(pal, 0xffff); } @@ -123,14 +124,15 @@ static BYTE rasterdraw(SDRAWFN sdrawfn, } } -BYTE scrndraw_draw(BYTE redraw) { +UINT8 scrndraw_draw(UINT8 redraw) { - BYTE ret; + UINT8 ret; const SCRNSURF *surf; const SDRAWFN *sdrawfn; _SDRAW sdraw; - BYTE bit; + UINT8 bit; int i; + int height; if (redraw) { updateallline(0x80808080); @@ -141,6 +143,12 @@ const SDRAWFN *sdrawfn; if (surf == NULL) { goto sddr_exit1; } +#if defined(SUPPORT_PC9821) + if (gdc.analog & 2) { + sdrawfn = sdraw_getproctblex(surf); + } + else +#endif sdrawfn = sdraw_getproctbl(surf); if (sdrawfn == NULL) { goto sddr_exit2; @@ -149,6 +157,12 @@ const SDRAWFN *sdrawfn; bit = 0; if (gdc.mode1 & 0x80) { // ver0.28 if (gdcs.grphdisp & 0x80) { +#if defined(SUPPORT_PC9821) + if ((gdc.analog & 6) == 6) { + bit |= 0x01; + } + else +#endif bit |= (1 << gdcs.disp); } if (gdcs.textdisp & 0x80) { @@ -165,12 +179,27 @@ const SDRAWFN *sdrawfn; renewal_line[i] &= ~bit; } } - if (gdc.mode1 & 0x10) { - sdrawfn += 4; - if (np2cfg.skipline) { + height = surf->height; + 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; @@ -205,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: