1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
@ ScummVM - Graphic Adventure Engine
@
@ ScummVM is the legal property of its developers, whose names
@ are too numerous to list here. Please refer to the COPYRIGHT
@ file distributed with this source distribution.
@
@ This program is free software@ you can redistribute it and/or
@ modify it under the terms of the GNU General Public License
@ as published by the Free Software Foundation@ either version 2
@ of the License, or (at your option) any later version.
@
@ This program is distributed in the hope that it will be useful,
@ but WITHOUT ANY WARRANTY@ without even the implied warranty of
@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
@ GNU General Public License for more details.
@
@ You should have received a copy of the GNU General Public License
@ along with this program@ if not, write to the Free Software
@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
@
@ @author Robin Watts (robin@wss.co.uk)
.text
.global _blitLandscapeScreenRect16bpp
.global _blitLandscapeScreenRect8bpp
_blitLandscapeScreenRect16bpp:
@ r0 = dst
@ r1 = src
@ r2 = w
@ r3 = h
@ <> = _screenWidth
@ <> = _screenHeight
mov r12,r13
stmfd r13!,{r4-r11,r14}
ldmfd r12,{r12,r14} @ r12 = _screenWidth
@ r14 = _screenHeight
add r14,r14,r3 @ r14 = _screenHeight + h
mvn r11,#0
mla r11,r3,r12,r11 @ r11= _screenWidth*h-1
add r12,r12,r12
xloop:
subs r4,r3,#5 @ r4 = y = h
ble thin
yloop:
ldrh r5, [r1],r12 @ r5 = *src src += _screenWidth
ldrh r6, [r1],r12 @ r6 = *src src += _screenWidth
ldrh r7, [r1],r12 @ r7 = *src src += _screenWidth
ldrh r8, [r1],r12 @ r8 = *src src += _screenWidth
ldrh r9, [r1],r12 @ r9 = *src src += _screenWidth
ldrh r10,[r1],r12 @ r10= *src src += _screenWidth
subs r4,r4,#6
strh r5, [r0],#2 @ *dst++ = r5
strh r6, [r0],#2 @ *dst++ = r6
strh r7, [r0],#2 @ *dst++ = r7
strh r8, [r0],#2 @ *dst++ = r8
strh r9, [r0],#2 @ *dst++ = r9
strh r10,[r0],#2 @ *dst++ = r10
bgt yloop
thin:
adds r4,r4,#5
beq lineend
thin_loop:
ldrh r5,[r1],r12 @ r5 = *src src += _screenWidth
subs r4,r4,#1
strh r5,[r0],#2 @ *dst++ = r5
bgt thin_loop
lineend:
sub r0,r0,r14,LSL #1 @ dst -= _screenHeight + h
sub r1,r1,r11,LSL #1 @ src += 1-_screenWidth*h
subs r2,r2,#1
bgt xloop
ldmfd r13!,{r4-r11,PC}
_blitLandscapeScreenRect8bpp:
@ r0 = dst
@ r1 = src
@ r2 = w
@ r3 = h
@ <> = _palette
@ <> = _screenWidth
@ <> = _screenHeight
mov r12,r13
stmfd r13!,{r4-r11,r14}
ldmfd r12,{r11,r12,r14} @ r11 = _palette
@ r12 = _screenWidth
@ r14 = _screenHeight
add r14,r14,r3 @ r14 = _screenHeight + h
mvn r6,#0
mla r6,r3,r12,r6 @ r6 = _screenWidth*h-1
xloop8:
mov r4,r3 @ r4 = y = h
subs r4,r3,#4 @ r4 = y = h
ble thin8
yloop8:
ldrb r5, [r1],r12 @ r5 = *src src += _screenWidth
ldrb r7, [r1],r12 @ r7 = *src src += _screenWidth
ldrb r8, [r1],r12 @ r8 = *src src += _screenWidth
ldrb r9, [r1],r12 @ r9 = *src src += _screenWidth
ldrb r10,[r1],r12 @ r10= *src src += _screenWidth
add r5, r5, r5
add r7, r7, r7
add r8, r8, r8
add r9, r9, r9
add r10,r10,r10
ldrh r5, [r11,r5]
ldrh r7, [r11,r7]
ldrh r8, [r11,r8]
ldrh r9, [r11,r9]
ldrh r10,[r11,r10]
subs r4,r4,#5
strh r5, [r0],#2 @ *dst++ = r5
strh r7, [r0],#2 @ *dst++ = r7
strh r8, [r0],#2 @ *dst++ = r8
strh r9, [r0],#2 @ *dst++ = r9
strh r10,[r0],#2 @ *dst++ = r10
bgt yloop8
thin8:
adds r4,r4,#4
beq lineend8
thin_loop8:
ldrb r5,[r1],r12 @ r5 = *src src += _screenWidth
add r5,r5,r5
ldrh r5,[r11,r5]
subs r4,r4,#1
strh r5,[r0],#2 @ *dst++ = r5
bgt thin_loop8
lineend8:
sub r0,r0,r14,LSL #1 @ dst -= _screenHeight + h
sub r1,r1,r6 @ src += 1-_screenWidth*h
subs r2,r2,#1
bgt xloop8
ldmfd r13!,{r4-r11,PC}
|