e14743d1 |
1 | ; |
2 | ; SDL - Simple DirectMedia Layer |
3 | ; Copyright (C) 1997-2009 Sam Lantinga |
4 | ; |
5 | ; This library is free software; you can redistribute it and/or |
6 | ; modify it under the terms of the GNU Library General Public |
7 | ; License as published by the Free Software Foundation; either |
8 | ; version 2 of the License, or (at your option) any later version. |
9 | ; |
10 | ; This library is distributed in the hope that it will be useful, |
11 | ; but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | ; Library General Public License for more details. |
14 | ; |
15 | ; You should have received a copy of the GNU Library General Public |
16 | ; License along with this library; if not, write to the Free |
17 | ; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
18 | ; |
19 | ; Sam Lantinga |
20 | ; slouken@libsdl.org |
21 | ; |
22 | ; Assembler routines for RISC OS display |
23 | ; |
24 | |
25 | AREA |C$$CODE| |
26 | |
27 | EXPORT |RISCOS_Put32| |
28 | |
29 | ; Display 32bpp to 32bpp, 1:1 |
30 | ; |
31 | ; Code provided by Adrain Lees |
32 | ; |
33 | ; entry a1 -> destination |
34 | ; a2 = dest width in pixels |
35 | ; a3 = dest line length in bytes |
36 | ; a4 = dest height in scanlines |
37 | ; arg5 -> source |
38 | ; arg6 = byte offset from end of source line to start of next |
39 | |
40 | Arg5 * 10*4 |
41 | Arg6 * Arg5+4 |
42 | |
43 | RISCOS_Put32 ROUT |
44 | STMFD sp!,{a2,v1-v6,sl,fp,lr} |
45 | LDR ip,[sp,#Arg5] |
46 | MOV lr,a1 |
47 | B ucp64lp |
48 | |
49 | 00 ;tail strip of 1-15 pixels |
50 | |
51 | LDR v1,[ip],#4 |
52 | 01 SUBS a2,a2,#1 |
53 | STR v1,[lr],#4 |
54 | LDRHI v1,[ip],#4 |
55 | BHI %01 |
56 | B %02 |
57 | |
58 | ucp64end ADDS a2,a2,#16 |
59 | BNE %00 |
60 | |
61 | 02 SUBS a4,a4,#1 ;height-- |
62 | LDRHI v1,[sp,#Arg6] |
63 | LDRHI a2,[sp] ;reload width |
64 | BLS %03 |
65 | |
66 | ;move to start of next scanline |
67 | |
68 | ADD lr,a1,a3 |
69 | ADD a1,a1,a3 |
70 | ADD ip,ip,v1 |
71 | |
72 | ucp64lp SUBS a2,a2,#16 |
73 | BLO ucp64end |
74 | |
75 | PLD [ip,#64] |
76 | |
77 | LDR v1,[ip],#4 |
78 | LDR v2,[ip],#4 |
79 | LDR v3,[ip],#4 |
80 | LDR v4,[ip],#4 |
81 | LDR v5,[ip],#4 |
82 | LDR v6,[ip],#4 |
83 | LDR sl,[ip],#4 |
84 | LDR fp,[ip],#4 |
85 | STR v1,[lr],#4 |
86 | STR v2,[lr],#4 |
87 | STR v3,[lr],#4 |
88 | STR v4,[lr],#4 |
89 | STR v5,[lr],#4 |
90 | STR v6,[lr],#4 |
91 | STR sl,[lr],#4 |
92 | STR fp,[lr],#4 |
93 | |
94 | PLD [ip,#64] |
95 | |
96 | LDR v1,[ip],#4 |
97 | LDR v2,[ip],#4 |
98 | LDR v3,[ip],#4 |
99 | LDR v4,[ip],#4 |
100 | LDR v5,[ip],#4 |
101 | LDR v6,[ip],#4 |
102 | LDR sl,[ip],#4 |
103 | LDR fp,[ip],#4 |
104 | STR v1,[lr],#4 |
105 | STR v2,[lr],#4 |
106 | STR v3,[lr],#4 |
107 | STR v4,[lr],#4 |
108 | STR v5,[lr],#4 |
109 | STR v6,[lr],#4 |
110 | STR sl,[lr],#4 |
111 | STR fp,[lr],#4 |
112 | |
113 | B ucp64lp |
114 | |
115 | 03 LDMFD sp!,{a2,v1-v6,sl,fp,pc} |
116 | |