diff options
author | Robin Watts | 2008-11-23 11:14:02 +0000 |
---|---|---|
committer | Robin Watts | 2008-11-23 11:14:02 +0000 |
commit | fc507e98748681761e5d31bab8b4c13210b74a11 (patch) | |
tree | f6ad74ad8de978b1fe003c7ddfb565107bbf1524 /backends | |
parent | db0c951a0d180a36e7d1ffd5612890159ea49afc (diff) | |
download | scummvm-rg350-fc507e98748681761e5d31bab8b4c13210b74a11.tar.gz scummvm-rg350-fc507e98748681761e5d31bab8b4c13210b74a11.tar.bz2 scummvm-rg350-fc507e98748681761e5d31bab8b4c13210b74a11.zip |
Remove NDS blitters.s, as it's unused - we now have blitters_arm.s instead.
svn-id: r35156
Diffstat (limited to 'backends')
-rw-r--r-- | backends/platform/ds/arm9/source/blitters.s | 339 |
1 files changed, 0 insertions, 339 deletions
diff --git a/backends/platform/ds/arm9/source/blitters.s b/backends/platform/ds/arm9/source/blitters.s deleted file mode 100644 index 2f14c5a140..0000000000 --- a/backends/platform/ds/arm9/source/blitters.s +++ /dev/null @@ -1,339 +0,0 @@ -@ ScummVM Scumm Interpreter -@ Copyright (C) 2007 The ScummVM project -@ -@ 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. -@ -@ $URL: $ -@ $Id: $ -@ -@ @author Robin Watts (robin@wss.co.uk) - - .text - - .global asmDrawStripToScreen - .global asmCopy8Col - .global Rescale_320x256xPAL8_To_256x256x1555 - .global Rescale_320x256x1555_To_256x256x1555 - - @ ARM implementation of asmDrawStripToScreen. - @ - @ C prototype would be: - @ - @ extern "C" void asmDrawStripToScreen(int height, - @ int width, - @ byte const *text, - @ byte const *src, - @ byte *dst, - @ int vsPitch, - @ int vsScreenWidth, - @ int textSurfacePitch); - @ - @ In addition, we assume that text, src and dst are all word (4 byte) - @ aligned. This is the same assumption that the old 'inline' version - @ made. -asmDrawStripToScreen: - @ r0 = height - @ r1 = width - @ r2 = text - @ r3 = src - MOV r12,r13 - STMFD r13!,{r4-r7,r9-r11,R14} - LDMIA r12,{r4,r5,r6,r7} - @ r4 = dst - @ r5 = vsPitch - @ r6 = vmScreenWidth - @ r7 = textSurfacePitch - - CMP r0,#0 @ If height<=0 - MOVLE r0,#1 @ height=1 - CMP r1,#4 @ If width<4 - BLT end @ return - - @ Width &= ~4 ? What's that about then? Width &= ~3 I could have - @ understood... - BIC r1,r1,#4 - - SUB r5,r5,r1 @ vsPitch -= width - SUB r6,r6,r1 @ vmScreenWidth -= width - SUB r7,r7,r1 @ textSurfacePitch -= width - MOV r10,#253 - ORR r10,r10,r10,LSL #8 - ORR r10,r10,r10,LSL #16 @ r10 = mask -yLoop: - MOV r14,r1 @ r14 = width -xLoop: - LDR r12,[r2],#4 @ r12 = [text] - LDR r11,[r3],#4 @ r11 = [src] - CMP r12,r10 - BNE singleByteCompare - SUBS r14,r14,#4 - STR r11,[r4], #4 @ r4 = [dst] - BGT xLoop - - ADD r2,r2,r7 @ text += textSurfacePitch - ADD r3,r3,r5 @ src += vsPitch - ADD r4,r4,r6 @ dst += vmScreenWidth - SUBS r0,r0,#1 - BGT yLoop - LDMFD r13!,{r4-r7,r9-r11,PC} - -singleByteCompare: - MOV r9,r12,LSR #24 @ r9 = 1st byte of [text] - CMP r9,r10,LSR #24 @ if (r9 == mask) - MOVEQ r9,r11,LSR #24 @ r9 = 1st byte of [src] - ORR r12,r9,r12,LSL #8 @ r12 = combine r9 and r12 - - MOV r9,r12,LSR #24 @ r9 = 1st byte of [text] - CMP r9,r10,LSR #24 @ if (r9 == mask) - MOVEQ r9,r11,LSR #24 @ r9 = 1st byte of [src] - ORR r12,r9,r12,LSL #8 @ r12 = combine r9 and r12 - - MOV r9,r12,LSR #24 @ r9 = 1st byte of [text] - CMP r9,r10,LSR #24 @ if (r9 == mask) - MOVEQ r9,r11,LSR #24 @ r9 = 1st byte of [src] - ORR r12,r9,r12,LSL #8 @ r12 = combine r9 and r12 - - MOV r9,r12,LSR #24 @ r9 = 1st byte of [text] - CMP r9,r10,LSR #24 @ if (r9 == mask) - MOVEQ r9,r11,LSR #24 @ r9 = 1st byte of [src] - ORR r12,r9,r12,LSL #8 @ r12 = combine r9 and r12 - - STR r12,[r4],#4 - SUBS r14,r14,#4 - BGT xLoop - - ADD r2,r2,r7 @ text += textSurfacePitch - ADD r3,r3,r5 @ src += vsPitch - ADD r4,r4,r6 @ dst += vmScreenWidth - SUBS r0,r0,#1 - BGT yLoop -end: - LDMFD r13!,{r4-r7,r9-r11,PC} - - - @ ARM implementation of asmCopy8Col - @ - @ C prototype would be: - @ - @ extern "C" void asmCopy8Col(byte *dst, - @ int dstPitch, - @ const byte *src, - @ int height); - @ - @ In addition, we assume that src and dst are both word (4 byte) - @ aligned. This is the same assumption that the old 'inline' version - @ made. -asmCopy8Col: - @ r0 = dst - @ r1 = dstPitch - @ r2 = src - @ r3 = height - STMFD r13!,{r14} - SUB r1,r1,#4 - - TST r3,#1 - ADDNE r3,r3,#1 - BNE roll2 -yLoop2: - LDR r12,[r2],#4 - LDR r14,[r2],r1 - STR r12,[r0],#4 - STR r14,[r0],r1 -roll2: - LDR r12,[r2],#4 - LDR r14,[r2],r1 - SUBS r3,r3,#2 - STR r12,[r0],#4 - STR r14,[r0],r1 - BNE yLoop2 - - LDMFD r13!,{PC} - - - @ ARM implementation of Rescale_320x256x1555_To_256x256x1555 - @ - @ C prototype would be: - @ - @ extern "C" void Rescale_320x256x1555_To_256x256x1555( - @ u16 *dst, - @ const u16 *src, - @ int dstStride, - @ int srcStride); -Rescale_320x256x1555_To_256x256x1555: - @ r0 = dst - @ r1 = src - @ r2 = dstStride - @ r3 = srcStride - STMFD r13!,{r4-r5,r8-r11,r14} - - SUB r2,r2,#64*5 @ srcStride -= line length - SUB r3,r3,#64*4 @ dstStride -= line length - - MOV r8, #0x0000001F - ORR r8, r8,#0x00007C00 - ORR r8, r8,#0x03E00000 @ r8 = mask - MOV r5, #200 @ r5 = y -yLoop3: - MOV r4, #64 @ r4 = x -xLoop3: - LDRH r9, [r0],#2 @ r9 = src0 - LDRH r10,[r0],#2 @ r10= src1 - LDRH r11,[r0],#2 @ r11= src2 - LDRH r12,[r0],#2 @ r12= src3 - LDRH r14,[r0],#2 @ r14= src4 - - ORR r9, r9, r9, LSL #16 @ r9 = src0 | src0 - ORR r10,r10,r10,LSL #16 @ r10= src1 | src1 - ORR r11,r11,r11,LSL #16 @ r11= src2 | src2 - ORR r12,r12,r12,LSL #16 @ r12= src3 | src3 - ORR r14,r14,r14,LSL #16 @ r13= src4 | src4 - - AND r9, r9, r8 @ r9 = 0 | G0 | 0 | B0 | 0 | R0 - AND r10,r10,r8 @ r10= 0 | G1 | 0 | B1 | 0 | R1 - AND r11,r11,r8 @ r11= 0 | G2 | 0 | B2 | 0 | R2 - AND r12,r12,r8 @ r12= 0 | G3 | 0 | B3 | 0 | R3 - AND r14,r14,r8 @ r14= 0 | G4 | 0 | B4 | 0 | R4 - - ADD r9, r9, r9, LSL #1 @ r9 = 3*src0 - ADD r9, r9, r10 @ r9 = dst0<<2 - ADD r10,r10,r11 @ r10= dst1 - ADD r11,r11,r12 @ r11= dst2 - ADD r12,r12,r14 @ r12= src3 + src4 - ADD r12,r12,r14,LSL #1 @ r12= src3 + src4*3 = dst3<<2 - - AND r9, r8, r9, LSR #2 @ r9 = dst0 (split) - AND r10,r8, r10,LSR #1 @ r10= dst1 (split) - AND r11,r8, r11,LSR #1 @ r11= dst2 (split) - AND r12,r8, r12,LSR #2 @ r12= dst3 (split) - - ORR r9, r9, r9, LSR #16 @ r9 = dst0 - ORR r10,r10,r10,LSR #16 @ r10= dst1 - ORR r11,r11,r11,LSR #16 @ r11= dst2 - ORR r12,r12,r12,LSR #16 @ r12= dst3 - - ORR r9, r9, #0x8000 - ORR r10,r10,#0x8000 - ORR r11,r11,#0x8000 - ORR r12,r12,#0x8000 - - STRH r9, [r1],#2 - STRH r10,[r1],#2 - STRH r11,[r1],#2 - STRH r12,[r1],#2 - - SUBS r4,r4,#1 - BGT xLoop3 - - ADD r0,r0,r2,LSL #1 - ADD r1,r2,r3,LSL #1 - SUBS r5,r5,#1 - BGT yLoop3 - - LDMFD r13!,{r4-r5,r8-r11,PC} - - @ ARM implementation of Rescale_320x256xPAL8_To_256x256x1555 - @ - @ C prototype would be: - @ - @ extern "C" void Rescale_320x256xPAL8_To_256x256x1555( - @ u16 *dst, - @ const u8 *src, - @ int dstStride, - @ int srcStride, - @ const u16 *pal); - @ - @ This is a slight reordering of the params from the existing C one. - @ Sorry, but it makes the code easier. -Rescale_320x256xPAL8_To_256x256x1555: - @ r0 = dst - @ r1 = src - @ r2 = dstStride - @ r3 = srcStride - STMFD r13!,{r4-r5,r8-r11,r14} - MOV r8, #0x0000001F - ORR r8, r8,#0x00007C00 - ORR r8, r8,#0x03E00000 @ r8 = mask - LDR r9, [r13,#7*4] @ r9 = palette - - SUB r13,r13,#256*4 @ r13 = 1K of space on the stack. - MOV r5, r13 @ r5 points to this space - MOV r14,#256 -palLoop: - LDRH r10,[r9],#2 @ r10 = palette entry - SUBS r14,r14,#1 - ORR r10,r10,r10,LSL #16 - AND r10,r10,r8 @ r10 = separated palette entry - STR r10,[r5], #4 - BGT palLoop - - SUB r2,r2,#64*5 @ srcStride -= line length - SUB r3,r3,#64*4 @ dstStride -= line length - - MOV r5,#200 @ r5 = y -yLoop4: - MOV r4,#64 @ r4 = x -xLoop4: - LDRB r9, [r0],#1 @ r9 = src0 - LDRB r10,[r0],#1 @ r10= src1 - LDRB r11,[r0],#1 @ r11= src2 - LDRB r12,[r0],#1 @ r12= src3 - LDRB r14,[r0],#1 @ r14= src4 - - LDR r9, [r13,r9, LSL #2] @ r9 = pal[src0] - LDR r10,[r13,r10,LSL #2] @ r10= pal[src1] - LDR r11,[r13,r11,LSL #2] @ r11= pal[src2] - LDR r12,[r13,r12,LSL #2] @ r12= pal[src3] - LDR r14,[r13,r14,LSL #2] @ r13= pal[src4] - - ADD r9, r9, r9, LSL #1 @ r9 = 3*src0 - ADD r9, r9, r10 @ r9 = dst0<<2 - ADD r10,r10,r11 @ r10= dst1 - ADD r11,r11,r12 @ r11= dst2 - ADD r12,r12,r14 @ r12= src3 + src4 - ADD r12,r12,r14,LSL #1 @ r12= src3 + src4*3 = dst3<<2 - - AND r9, r8, r9, LSR #2 @ r9 = dst0 (split) - AND r10,r8, r10,LSR #1 @ r10= dst1 (split) - AND r11,r8, r11,LSR #1 @ r11= dst2 (split) - AND r12,r8, r12,LSR #2 @ r12= dst3 (split) - - ORR r9, r9, r9, LSR #16 @ r9 = dst0 - ORR r10,r10,r10,LSR #16 @ r10= dst1 - ORR r11,r11,r11,LSR #16 @ r11= dst2 - ORR r12,r12,r12,LSR #16 @ r12= dst3 - - ORR r9, r9, #0x8000 - ORR r10,r10,#0x8000 - ORR r11,r11,#0x8000 - ORR r12,r12,#0x8000 - - STRH r9, [r1],#2 - STRH r10,[r1],#2 - STRH r11,[r1],#2 - STRH r12,[r1],#2 - - SUBS r4,r4,#1 - BGT xLoop4 - - ADD r0,r0,r2 - ADD r1,r2,r3,LSL #1 - SUBS r5,r5,#1 - BGT yLoop4 - - ADD r13,r13,#256*4 - - LDMFD r13!,{r4-r5,r8-r11,PC} - - |