12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /*
- THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
- SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
- END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
- ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
- IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
- SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
- FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
- CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
- AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
- COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
- */
- // From linear to SVGA
- void gr_bm_ubitblt02_2x(int w, int h, int dx, int dy, int sx, int sy, grs_bitmap * src, grs_bitmap * dest)
- {
- unsigned char * sbits;
- unsigned int offset, EndingOffset, VideoLocation;
- int sbpr, dbpr, y1, page, BytesToMove;
- sbpr = src->bm_rowsize;
- dbpr = dest->bm_rowsize << gr_bitblt_dest_step_shift;
- VideoLocation = (unsigned int)dest->bm_data + (dest->bm_rowsize * dy) + dx;
- sbits = src->bm_data + ( sbpr*sy ) + sx;
- for (y1=0; y1 < h; y1++ ) {
- page = VideoLocation >> 16;
- offset = VideoLocation & 0xFFFF;
- gr_vesa_setpage( page );
- EndingOffset = offset+w-1;
- if ( EndingOffset <= 0xFFFF )
- {
- gr_linear_rep_movsd_2x( (void *)sbits, (void *)(offset+0xA0000), w );
- VideoLocation += dbpr;
- sbits += sbpr;
- }
- else
- {
- BytesToMove = 0xFFFF-offset+1;
- gr_linear_rep_movsd_2x( (void *)sbits, (void *)(offset+0xA0000), BytesToMove );
- page++;
- gr_vesa_setpage(page);
- gr_linear_rep_movsd_2x( (void *)(sbits+BytesToMove/2), (void *)0xA0000, EndingOffset - 0xFFFF );
- VideoLocation += dbpr;
- sbits += sbpr;
- }
- }
- }
|