home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1998 #6 / amigaacscoverdisc1998-061998.iso / games / descent / source / 2d / l.c < prev    next >
Text File  |  1998-06-08  |  2KB  |  67 lines

  1. /*
  2. THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  3. SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
  4. END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  5. ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  6. IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  7. SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  8. FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  9. CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
  10. AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
  11. COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
  12. */
  13.  
  14. // From linear to SVGA
  15. void gr_bm_ubitblt02_2x(int w, int h, int dx, int dy, int sx, int sy, grs_bitmap * src, grs_bitmap * dest)
  16. {
  17.     unsigned char * sbits;
  18.  
  19.     unsigned int offset, EndingOffset, VideoLocation;
  20.  
  21.     int sbpr, dbpr, y1, page, BytesToMove;
  22.  
  23.     sbpr = src->bm_rowsize;
  24.  
  25.     dbpr = dest->bm_rowsize << gr_bitblt_dest_step_shift;
  26.  
  27.     VideoLocation = (unsigned int)dest->bm_data + (dest->bm_rowsize * dy) + dx;
  28.  
  29.     sbits = src->bm_data + ( sbpr*sy ) + sx;
  30.  
  31.     for (y1=0; y1 < h; y1++ )    {
  32.  
  33.         page    = VideoLocation >> 16;
  34.         offset  = VideoLocation & 0xFFFF;
  35.  
  36.         gr_vesa_setpage( page );
  37.  
  38.         EndingOffset = offset+w-1;
  39.  
  40.         if ( EndingOffset <= 0xFFFF )
  41.         {
  42.             gr_linear_rep_movsd_2x( (void *)sbits, (void *)(offset+0xA0000), w );
  43.  
  44.             VideoLocation += dbpr;
  45.             sbits += sbpr;
  46.         }
  47.         else
  48.         {
  49.             BytesToMove = 0xFFFF-offset+1;
  50.  
  51.             gr_linear_rep_movsd_2x( (void *)sbits, (void *)(offset+0xA0000), BytesToMove );
  52.  
  53.             page++;
  54.             gr_vesa_setpage(page);
  55.  
  56.             gr_linear_rep_movsd_2x( (void *)(sbits+BytesToMove/2), (void *)0xA0000, EndingOffset - 0xFFFF );
  57.  
  58.             VideoLocation += dbpr;
  59.             sbits += sbpr;
  60.         }
  61.  
  62.  
  63.     }
  64. }
  65.  
  66. 
  67.