|
|
| version 1.7, 2004/08/17 12:30:41 | version 1.9, 2004/08/17 16:52:46 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| #include "scrnmng.h" | #include "scrnmng.h" |
| #include "sysmng.h" | #include "sysmng.h" |
| #include "pccore.h" | |
| #include "iocore.h" | |
| #include "scrndraw.h" | #include "scrndraw.h" |
| #include "sdraw.h" | #include "sdraw.h" |
| #include "palettes.h" | #include "palettes.h" |
| Line 58 void scrndraw_changepalette(void) { | Line 60 void scrndraw_changepalette(void) { |
| updateallline(0x01010101); // fillrenewalline(0x03030303) | updateallline(0x01010101); // fillrenewalline(0x03030303) |
| } | } |
| // ---- | |
| #if defined(SUPPORT_PALEVENT) | |
| static REG8 rasterdraw(SDRAWFN sdrawfn, SDRAW sdraw, int maxy) { | |
| UINT8 rgbp[8]; | |
| SINT32 rasterclock; | |
| SINT32 clock; | |
| PAL1EVENT *event; | |
| PAL1EVENT *eventterm; | |
| int nextupdate; | |
| int y; | |
| CopyMemory(rgbp, palevent.rgbp, 8); | |
| rasterclock = crtc.e.rasterclock8; | |
| if (crtc.s.SCRN_BITS & SCRN_24KHZ) { | |
| rasterclock = rasterclock * 2; | |
| } | |
| clock = 0; | |
| event = palevent.event; | |
| eventterm = event + palevent.events; | |
| nextupdate = 0; | |
| for (y=2; y<maxy; y+=2) { | |
| if (event >= eventterm) { | |
| break; | |
| } | |
| clock += rasterclock; | |
| // お弁当はあった? | |
| if (clock > (event->clock << 8)) { | |
| pal_update1(rgbp); | |
| (*sdrawfn)(sdraw, y); | |
| nextupdate = y; | |
| // お弁当を食べる | |
| while(clock > (event->clock << 8)) { | |
| ((UINT8 *)rgbp)[event->rgbp] = event->value; | |
| event++; | |
| if (event >= eventterm) { | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| if (y < maxy) { | |
| pal_update1(rgbp); | |
| (*sdrawfn)(sdraw, maxy); | |
| } | |
| // 戻すすすす | |
| pal_update1(crtc.s.rgbp); | |
| if (nextupdate) { | |
| for (y=0; y<nextupdate; y+=2) { | |
| *(UINT16 *)(renewalline + y) |= 0x0101; | |
| } | |
| return(1); | |
| } | |
| else { | |
| return(0); | |
| } | |
| } | |
| #endif | |
| // ---- | |
| REG8 scrndraw_draw(REG8 redraw) { | REG8 scrndraw_draw(REG8 redraw) { |
| REG8 ret; | |
| const SCRNSURF *surf; | const SCRNSURF *surf; |
| const SDRAWFN *sdrawfn; | const SDRAWFN *sdrawfn; |
| SDRAWFN fn; | SDRAWFN fn; |
| Line 70 const SDRAWFN *sdrawfn; | Line 139 const SDRAWFN *sdrawfn; |
| updateallline(0x01010101); | updateallline(0x01010101); |
| } | } |
| ret = 0; | |
| surf = scrnmng_surflock(); | surf = scrnmng_surflock(); |
| if (surf == NULL) { | if (surf == NULL) { |
| goto sddr_exit1; | goto sddr_exit1; |
| Line 110 const SDRAWFN *sdrawfn; | Line 180 const SDRAWFN *sdrawfn; |
| sdraw.y = 0; | sdraw.y = 0; |
| sdraw.xalign = surf->xalign; | sdraw.xalign = surf->xalign; |
| sdraw.yalign = surf->yalign; | sdraw.yalign = surf->yalign; |
| #if !defined(SUPPORT_PALEVENT) | |
| (*fn)(&sdraw, 400); | (*fn)(&sdraw, 400); |
| #else | |
| if (((crtc.e.dispmode & SCRN64_MASK) != SCRN64_INVALID) || | |
| (palevent.events >= SUPPORT_PALEVENT)) { | |
| (*fn)(&sdraw, 400); | |
| } | |
| else { | |
| ret = rasterdraw(*sdrawfn, &sdraw, 400); | |
| } | |
| #endif | |
| sddr_exit2: | sddr_exit2: |
| scrnmng_surfunlock(surf); | scrnmng_surfunlock(surf); |
| sddr_exit1: | sddr_exit1: |
| return(0); | return(ret); |
| } | } |
| void scrndraw_redraw(void) { | void scrndraw_redraw(void) { |