Diff for /xmil/vram/scrndraw.c between versions 1.1 and 1.10

version 1.1, 2004/08/01 05:31:31 version 1.10, 2004/08/18 08:08:13
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        "scrnmng.h"  #include        "scrnmng.h"
 #include        "sysmng.h"  #include        "pccore.h"
   #include        "iocore.h"
 #include        "scrndraw.h"  #include        "scrndraw.h"
 #include        "sdraw.h"  #include        "sdraw.h"
 #include        "draw.h"  
 #include        "palettes.h"  #include        "palettes.h"
   #include        "makescrn.h"
   
   
         SCRN    scrn;          UINT8   renewalline[SURFACE_HEIGHT+4];
         UINT8   renewalline[SCREEN_HEIGHT+4];          UINT8   screenmap[SURFACE_SIZE];
         UINT8   screenmap[SCREEN_WIDTH * SCREEN_HEIGHT];  
   
   
 static void updateallline(UINT32 update) {  static void updateallline(UINT32 update) {
Line 27  static void updateallline(UINT32 update) Line 27  static void updateallline(UINT32 update)
 void scrndraw_initialize(void) {                                        // ddraws_init  void scrndraw_initialize(void) {                                        // ddraws_init
   
         ZeroMemory(screenmap, sizeof(screenmap));          ZeroMemory(screenmap, sizeof(screenmap));
         ZeroMemory(x1n_pal32, sizeof(x1n_pal32));          ZeroMemory(xmil_pal32, sizeof(xmil_pal32));
           xmil_palettes = 0;
   
         scrn.widthmode = SCRNWIDTHMODE_WIDTH40;  
   
         xm_palettes = 0;  
         updateallline(0x03030303);                      // updateallline(0x01010101);          updateallline(0x03030303);                      // updateallline(0x01010101);
         scrnmng_allflash();          scrnmng_allflash();
         sysmng_scrnwidth(scrn.widthmode);  
 }  
   
 void scrndraw_changewidth(REG8 widthmode) {  
   
         if (scrn.widthmode != widthmode) {  
                 scrn.widthmode = widthmode;  
                 sysmng_scrnwidth(widthmode);  
                 updateallline(0x01010101);                              // fillrenewalline(0x03030303)  
         }  
 }  }
   
 void scrndraw_changepalette(void) {  void scrndraw_changepalette(void) {
Line 55  void scrndraw_changepalette(void) { Line 43  void scrndraw_changepalette(void) {
                 return;                  return;
         }          }
 #endif  #endif
 #if defined(SUPPORT_16BPP)  
         if (scrnmng_getbpp() == 16) {  
                 pals_cnv16pal(x1n_pal16, x1n_pal32, xm_palettes);  
         }  
 #endif  
         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;
         _SDRAW          sdraw;          _SDRAW          sdraw;
         UINT            i;          UINT            i;
   
           if (redraw) {
                   updateallline(0x01010101);
           }
   
           ret = 0;
         surf = scrnmng_surflock();          surf = scrnmng_surflock();
         if (surf == NULL) {          if (surf == NULL) {
                 goto sddr_exit1;                  goto sddr_exit1;
Line 79  const SDRAWFN *sdrawfn; Line 134  const SDRAWFN *sdrawfn;
         if (sdrawfn == NULL) {          if (sdrawfn == NULL) {
                 goto sddr_exit2;                  goto sddr_exit2;
         }          }
         switch(scrn.widthmode) {          sdrawfn += makescrn.drawmode;
                 case SCRNWIDTHMODE_WIDTH80:  
                 default:  
                         break;  
   
                 case SCRNWIDTHMODE_WIDTH40:  
                         sdrawfn += 1;  
                         break;  
   
                 case SCRNWIDTHMODE_4096:  
                         sdrawfn += 2;  
                         break;  
         }  
         fn = *sdrawfn;          fn = *sdrawfn;
         if (fn == NULL) {          if (fn == NULL) {
                 goto sddr_exit2;                  goto sddr_exit2;
Line 111  const SDRAWFN *sdrawfn; Line 154  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_ENABLE) ||
                   (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) {
   
         scrnmng_allflash();          scrnmng_allflash();
         scrnmng_palchanged();                                           // ?          pal_update();
         updateallline(0x01010101);                                      // fillrenewalline(0x03030303)          scrndraw_draw(TRUE);
         palettes();  
         scrndraw_draw(FALSE);  
 }  }
   

Removed from v.1.1  
changed lines
  Added in v.1.10


RetroPC.NET-CVS <cvs@retropc.net>