117 lines
3.5 KiB
ArmAsm
117 lines
3.5 KiB
ArmAsm
;
|
|
; SDL - Simple DirectMedia Layer
|
|
; Copyright (C) 1997-2004 Sam Lantinga
|
|
;
|
|
; This library is free software; you can redistribute it and/or
|
|
; modify it under the terms of the GNU Library General Public
|
|
; License as published by the Free Software Foundation; either
|
|
; version 2 of the License, or (at your option) any later version.
|
|
;
|
|
; This library 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
|
|
; Library General Public License for more details.
|
|
;
|
|
; You should have received a copy of the GNU Library General Public
|
|
; License along with this library; if not, write to the Free
|
|
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
;
|
|
; Sam Lantinga
|
|
; slouken@libsdl.org
|
|
;
|
|
; Assembler routines for RISC OS display
|
|
;
|
|
|
|
AREA |C$$CODE|
|
|
|
|
EXPORT |RISCOS_Put32|
|
|
|
|
; Display 32bpp to 32bpp, 1:1
|
|
;
|
|
; Code provided by Adrain Lees
|
|
;
|
|
; entry a1 -> destination
|
|
; a2 = dest width in pixels
|
|
; a3 = dest line length in bytes
|
|
; a4 = dest height in scanlines
|
|
; arg5 -> source
|
|
; arg6 = byte offset from end of source line to start of next
|
|
|
|
Arg5 * 10*4
|
|
Arg6 * Arg5+4
|
|
|
|
RISCOS_Put32 ROUT
|
|
STMFD sp!,{a2,v1-v6,sl,fp,lr}
|
|
LDR ip,[sp,#Arg5]
|
|
MOV lr,a1
|
|
B ucp64lp
|
|
|
|
00 ;tail strip of 1-15 pixels
|
|
|
|
LDR v1,[ip],#4
|
|
01 SUBS a2,a2,#1
|
|
STR v1,[lr],#4
|
|
LDRHI v1,[ip],#4
|
|
BHI %01
|
|
B %02
|
|
|
|
ucp64end ADDS a2,a2,#16
|
|
BNE %00
|
|
|
|
02 SUBS a4,a4,#1 ;height--
|
|
LDRHI v1,[sp,#Arg6]
|
|
LDRHI a2,[sp] ;reload width
|
|
BLS %03
|
|
|
|
;move to start of next scanline
|
|
|
|
ADD lr,a1,a3
|
|
ADD a1,a1,a3
|
|
ADD ip,ip,v1
|
|
|
|
ucp64lp SUBS a2,a2,#16
|
|
BLO ucp64end
|
|
|
|
PLD [ip,#64]
|
|
|
|
LDR v1,[ip],#4
|
|
LDR v2,[ip],#4
|
|
LDR v3,[ip],#4
|
|
LDR v4,[ip],#4
|
|
LDR v5,[ip],#4
|
|
LDR v6,[ip],#4
|
|
LDR sl,[ip],#4
|
|
LDR fp,[ip],#4
|
|
STR v1,[lr],#4
|
|
STR v2,[lr],#4
|
|
STR v3,[lr],#4
|
|
STR v4,[lr],#4
|
|
STR v5,[lr],#4
|
|
STR v6,[lr],#4
|
|
STR sl,[lr],#4
|
|
STR fp,[lr],#4
|
|
|
|
PLD [ip,#64]
|
|
|
|
LDR v1,[ip],#4
|
|
LDR v2,[ip],#4
|
|
LDR v3,[ip],#4
|
|
LDR v4,[ip],#4
|
|
LDR v5,[ip],#4
|
|
LDR v6,[ip],#4
|
|
LDR sl,[ip],#4
|
|
LDR fp,[ip],#4
|
|
STR v1,[lr],#4
|
|
STR v2,[lr],#4
|
|
STR v3,[lr],#4
|
|
STR v4,[lr],#4
|
|
STR v5,[lr],#4
|
|
STR v6,[lr],#4
|
|
STR sl,[lr],#4
|
|
STR fp,[lr],#4
|
|
|
|
B ucp64lp
|
|
|
|
03 LDMFD sp!,{a2,v1-v6,sl,fp,pc}
|
|
|