mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-12-27 04:41:23 +00:00
62 lines
1.8 KiB
ArmAsm
62 lines
1.8 KiB
ArmAsm
|
// SONIC ROBO BLAST 2
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
||
|
// Copyright (C) 1999-2014 by Sonic Team Junior.
|
||
|
//
|
||
|
// This program is free software distributed under the
|
||
|
// terms of the GNU General Public License, version 2.
|
||
|
// See the 'LICENSE' file for more details.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
/// \file vid_copy.s
|
||
|
/// \brief code for updating the linear frame buffer screen.
|
||
|
|
||
|
#include "asm_defs.inc" // structures, must match the C structures!
|
||
|
|
||
|
// DJGPPv2 is as fast as this one, but then someone may compile with a less
|
||
|
// good version of DJGPP than mine, so this little asm will do the trick!
|
||
|
|
||
|
#define srcptr 4+16
|
||
|
#define destptr 8+16
|
||
|
#define width 12+16
|
||
|
#define height 16+16
|
||
|
#define srcrowbytes 20+16
|
||
|
#define destrowbytes 24+16
|
||
|
|
||
|
// VID_BlitLinearScreen( src, dest, width, height, srcwidth, destwidth );
|
||
|
// width is given as BYTES
|
||
|
|
||
|
#ifdef __i386__
|
||
|
|
||
|
.globl C(VID_BlitLinearScreen_ASM)
|
||
|
C(VID_BlitLinearScreen_ASM):
|
||
|
pushl %ebp // preserve caller's stack frame
|
||
|
pushl %edi
|
||
|
pushl %esi // preserve register variables
|
||
|
pushl %ebx
|
||
|
|
||
|
cld
|
||
|
movl srcptr(%esp),%esi
|
||
|
movl destptr(%esp),%edi
|
||
|
movl width(%esp),%ebx
|
||
|
movl srcrowbytes(%esp),%eax
|
||
|
subl %ebx,%eax
|
||
|
movl destrowbytes(%esp),%edx
|
||
|
subl %ebx,%edx
|
||
|
shrl $2,%ebx
|
||
|
movl height(%esp),%ebp
|
||
|
LLRowLoop:
|
||
|
movl %ebx,%ecx
|
||
|
rep/movsl (%esi),(%edi)
|
||
|
addl %eax,%esi
|
||
|
addl %edx,%edi
|
||
|
decl %ebp
|
||
|
jnz LLRowLoop
|
||
|
|
||
|
popl %ebx // restore register variables
|
||
|
popl %esi
|
||
|
popl %edi
|
||
|
popl %ebp // restore the caller's stack frame
|
||
|
|
||
|
ret
|
||
|
#endif
|