aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/ds/arm9/source
diff options
context:
space:
mode:
authorRobin Watts2008-11-23 11:14:02 +0000
committerRobin Watts2008-11-23 11:14:02 +0000
commitfc507e98748681761e5d31bab8b4c13210b74a11 (patch)
treef6ad74ad8de978b1fe003c7ddfb565107bbf1524 /backends/platform/ds/arm9/source
parentdb0c951a0d180a36e7d1ffd5612890159ea49afc (diff)
downloadscummvm-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/platform/ds/arm9/source')
-rw-r--r--backends/platform/ds/arm9/source/blitters.s339
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}
-
-