Initial revision
[ssr] / StraySrc / Dynamite / apcs / s / dyn_apcs
1 ;
2 ; dyn_apcs.s
3 ;
4 ; APCS interface to Dynamite SWIs
5 ;
6 ; © 1994-1998 Straylight
7 ;
8
9 ;----- Licensing note -------------------------------------------------------
10 ;
11 ; This file is part of Straylight's Dynamite
12 ;
13 ; Dynamite is free software; you can redistribute it and/or modify
14 ; it under the terms of the GNU General Public License as published by
15 ; the Free Software Foundation; either version 2, or (at your option)
16 ; any later version.
17 ;
18 ; Dynamite is distributed in the hope that it will be useful,
19 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 ; GNU General Public License for more details.
22 ;
23 ; You should have received a copy of the GNU General Public License
24 ; along with Dynamite. If not, write to the Free Software Foundation,
25 ; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
27 ;----- Standard header ------------------------------------------------------
28
29 GET libs:header
30 GET libs:swis
31
32 GET libs:stream
33
34 ;----- Main code ------------------------------------------------------------
35
36 AREA |C$$Code|,CODE,READONLY
37
38 ; --- dynamite_alloc ---
39 ;
40 ; On entry: a1 == address of anchor
41 ; a2 == size of block, in bytes
42 ; a3 == block ID
43 ;
44 ; On exit: a1 == 0 or pointer to error
45
46 EXPORT dynamite_alloc
47 dynamite_alloc
48 MOV ip,lr
49 SWI XDynamite_Alloc
50 MOVVC a1,#0
51 MOVS pc,ip
52
53 ; --- dynamite_free ---
54 ;
55 ; On entry: a1 == address of anchor
56 ;
57 ; On exit: a1 == 0 or pointer to error
58
59 EXPORT dynamite_free
60 dynamite_free
61 MOV ip,lr
62 SWI XDynamite_Free
63 MOVVC a1,#0
64 MOVS pc,ip
65
66 ; --- dynamite_freeWithID ---
67 ;
68 ; On entry: a1 == block ID (must be non-zero)
69 ;
70 ; On exit: a1 == 0 or pointer to error
71
72 EXPORT dynamite_freeWithID
73 dynamite_freeWithID
74 MOV ip,lr
75 SWI XDynamite_FreeWithID
76 MOVVC a1,#0
77 MOVS pc,ip
78
79 ; --- dynamite_blockInfo ---
80 ;
81 ; On entry: a1 == address of block anchor
82 ; a2 == address of structure to fill in
83 ;
84 ; On exit: a1 == 0 or pointer to error
85
86 EXPORT dynamite_blockInfo
87 dynamite_blockInfo
88 STMFD sp!,{lr}
89 MOV ip,a2
90 SWI XDynamite_BlockInfo
91 STMVCIA ip,{a3,a4}
92 MOVVC a1,#0
93 LDMFD sp!,{pc}^
94
95 ; --- dynamite_changeID ---
96 ;
97 ; On entry: a1 == address of anchor, or 0
98 ; a2 == new ID
99 ; a3 == (optional) old ID
100 ;
101 ; On exit: a1 == 0 or pointer to error
102
103 EXPORT dynamite_changeID
104 dynamite_changeID
105 MOV ip,lr
106 SWI XDynamite_ChangeID
107 MOVVC a1,#0
108 MOVS pc,ip
109
110 ; --- dynamite_resize ---
111 ;
112 ; On entry: a1 == address of anchor
113 ; a2 == new size, in bytes
114 ;
115 ; On exit: a1 == 0 or pointer to error
116
117 EXPORT dynamite_resize
118 dynamite_resize
119 MOV ip,lr
120 SWI XDynamite_Resize
121 MOVVC a1,#0
122 MOVS pc,ip
123
124 ; --- dynamite_midExtend ---
125 ;
126 ; On entry: a1 == address of anchor
127 ; a2 == offset at which to extend
128 ; a3 == number of bytes to add
129 ;
130 ; On exit: a1 == 0 or pointer to error
131
132 EXPORT dynamite_midExtend
133 dynamite_midExtend
134 MOV ip,lr
135 SWI XDynamite_MidExtend
136 MOVVC a1,#0
137 MOVS pc,ip
138
139 ; --- dynamite_save ---
140 ;
141 ; On entry: a1 == value to save
142 ;
143 ; On exit: a1 == 0 or pointer to error
144
145 EXPORT dynamite_save
146 dynamite_save
147 MOV ip,lr
148 MOV a2,a1
149 MOV a1,#2
150 SWI XDynamite_Save
151 MOVVC a1,#0
152 MOVS pc,ip
153
154 ; --- dynamite_load ---
155 ;
156 ; On entry: --
157 ;
158 ; On exit: a1 == value loaded from relocation stack
159
160 EXPORT dynamite_load
161 dynamite_load
162 MOV ip,lr
163 MOV a1,#1
164 SWI XDynamite_Load
165 MOVS pc,ip
166
167 ; --- dynamite_reduce ---
168 ;
169 ; On entry: --
170 ;
171 ; On exit: a1 == 0 if compaction not performed, nonzero otherwise
172
173 EXPORT dynamite_reduce
174 dynamite_reduce
175 MOV ip,lr
176 SWI XDynamite_Reduce
177 MOVCC a1,#1
178 MOVCS a1,#0
179 MOVS pc,ip
180
181 ; --- dynamite_compact ---
182 ;
183 ; On entry: --
184 ;
185 ; On exit: a1 == 0 or pointer to error
186
187 EXPORT dynamite_compact
188 dynamite_compact
189 MOV ip,lr
190 SWI XDynamite_Compact
191 MOVVC a1,#0
192 MOVS pc,ip
193
194 ; --- dynamite_lock ---
195 ;
196 ; On entry: --
197 ;
198 ; On exit: a1 == 0 or pointer to error
199
200 EXPORT dynamite_lock
201 dynamite_lock
202 MOV ip,lr
203 SWI XDynamite_Lock
204 MOVVC a1,#0
205 MOVS pc,ip
206
207 ; --- dynamite_unlock ---
208 ;
209 ; On entry: --
210 ;
211 ; On exit: a1 == 0 or pointer to error
212
213 EXPORT dynamite_unlock
214 dynamite_unlock
215 MOV ip,lr
216 SWI XDynamite_Unlock
217 MOVVC a1,#0
218 MOVS pc,ip
219
220 ; --- dynamite_claimAnchor ---
221 ;
222 ; On entry: a1 == address of where to store anchor
223 ;
224 ; On exit: a1 == 0 or pointer to error
225
226 EXPORT dynamite_claimAnchor
227 dynamite_claimAnchor
228 MOV ip,lr
229 MOV a2,a1
230 SWI XDynamite_ClaimAnchor
231 STRVC a1,[a2,#0]
232 MOVVC a1,#0
233 MOVS pc,ip
234
235 ; --- dynamite_releaseAnchor ---
236 ;
237 ; On entry: a1 == address of anchor
238 ;
239 ; On exit: a1 == 0 or pointer to error
240
241 EXPORT dynamite_releaseAnchor
242 dynamite_releaseAnchor
243 MOV ip,lr
244 SWI XDynamite_ReleaseAnchor
245 MOVVC a1,#0
246 MOVS pc,ip
247
248 ; --- dynamite_readSpriteSize ---
249 ;
250 ; On entry: a1 == where to store the sprite size
251 ;
252 ; On exit: a1 == 0 or pointer to error
253
254 EXPORT dynamite_readSpriteSize
255 dynamite_readSpriteSize
256 MOV ip,lr
257 MOV a2,a1
258 SWI XDynamite_ReadSpriteSize
259 STRVC a1,[a2,#0]
260 MOVVC a1,#0
261 MOVS pc,ip
262
263 ; --- dynamite_describe ---
264 ;
265 ; On entry: a1 == address of a structure to fill in
266 ;
267 ; On exit: a1 == 0 or pointer to error
268
269 EXPORT dynamite_describe
270 dynamite_describe
271 MOV ip,lr
272 MOV a4,a1
273 SWI XDynamite_Describe
274 MOVVS pc,ip
275 CMP a4,#0
276 STMNEIA a4,{a1-a3}
277 MOV a1,#0
278 MOVS pc,ip
279
280 ;----- That's all, folks ----------------------------------------------------
281
282 END