riscoscalls.S revision 1.9 1 /* $NetBSD: riscoscalls.S,v 1.9 2006/07/20 23:35:20 bjh21 Exp $ */
2
3 /*-
4 * Copyright (c) 2001 Ben Harris
5 * Copyright (c) 2002 Reinoud Zandijk
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. The name of the author may not be used to endorse or promote products
17 * derived from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 #include <machine/asm.h>
32 #include <riscoscalls.h>
33
34 ENTRY(os_writec)
35 mov ip, sp
36 stmfd sp!, {fp, ip, lr, pc}
37 sub fp, ip, #4
38 swi OS_WriteC
39 ldmdb fp, {fp, sp, pc}
40
41 ENTRY(os_new_line)
42 mov ip, sp
43 stmfd sp!, {fp, ip, lr, pc}
44 sub fp, ip, #4
45 swi OS_NewLine
46 ldmdb fp, {fp, sp, pc}
47
48 ENTRY(os_readc)
49 mov ip, sp
50 stmfd sp!, {fp, ip, lr, pc}
51 sub fp, ip, #4
52 swi OS_ReadC
53 ldmdb fp, {fp, sp, pc}
54
55 ENTRY(os_cli)
56 mov ip, sp
57 stmfd sp!, {fp, ip, lr, pc}
58 sub fp, ip, #4
59 swi OS_CLI
60 ldmdb fp, {fp, sp, pc}
61
62 ENTRY(xos_cli)
63 mov ip, sp
64 stmfd sp!, {fp, ip, lr, pc}
65 sub fp, ip, #4
66 swi XOS_CLI
67 movvc r0, #0
68 ldmdb fp, {fp, sp, pc}
69
70 ENTRY(os_byte)
71 mov ip, sp
72 stmfd sp!, {fp, ip, lr, pc}
73 sub fp, ip, #4
74 swi OS_Byte
75 teq r3, #0
76 strne r1, [r3]
77 ldr r3, [fp, #4]
78 teq r3, #0
79 strne r2, [r3]
80 ldmdb fp, {fp, sp, pc}
81
82 ENTRY(os_word)
83 mov ip, sp
84 stmfd sp!, {fp, ip, lr, pc}
85 sub fp, ip, #4
86 swi OS_Word
87 ldmdb fp, {fp, sp, pc}
88
89 ENTRY(xosargs_read)
90 mov ip, sp
91 stmfd sp!, {fp, ip, lr, pc}
92 sub fp, ip, #4
93 mov r3, r2
94 swi XOS_Args
95 ldmvsdb fp, {fp, sp, pc}
96 teq r3, #0
97 strne r2, [r3]
98 mov r0, #0
99 ldmdb fp, {fp, sp, pc}
100
101 ENTRY(xosargs_set)
102 mov ip, sp
103 stmfd sp!, {fp, ip, lr, pc}
104 sub fp, ip, #4
105 swi XOS_Args
106 movvc r0, #0
107 ldmdb fp, {fp, sp, pc}
108
109 ENTRY(xosgbpb_write)
110 mov ip, sp
111 stmfd sp!, {r4, fp, ip, lr, pc}
112 sub fp, ip, #4
113 mov ip, r3
114 mov r3, r2
115 mov r2, r1
116 mov r1, r0
117 mov r0, #OSGBPB_Write
118 swi XOS_GBPB
119 teq ip, #0
120 strne r3, [ip]
121 movvc r0, #0
122 ldmdb fp, {r4, fp, sp, pc}
123
124 ENTRY(xosgbpb_read)
125 mov ip, sp
126 stmfd sp!, {r4, fp, ip, lr, pc}
127 sub fp, ip, #4
128 mov ip, r3
129 mov r3, r2
130 mov r2, r1
131 mov r1, r0
132 mov r0, #OSGBPB_Read
133 swi XOS_GBPB
134 teq ip, #0
135 strne r3, [ip]
136 movvc r0, #0
137 ldmdb fp, {r4, fp, sp, pc}
138
139 ENTRY(xosfind_close)
140 mov ip, sp
141 stmfd sp!, {fp, ip, lr, pc}
142 sub fp, ip, #4
143 mov r1, r0
144 mov r0, #OSFind_Close
145 swi XOS_Find
146 movvc r0, #0
147 ldmdb fp, {fp, sp, pc}
148
149 ENTRY(xosfind_open)
150 mov ip, sp
151 stmfd sp!, {fp, ip, lr, pc}
152 sub fp, ip, #4
153 swi XOS_Find
154 ldmvsdb fp, {fp, sp, pc}
155 teq r3, #0
156 strne r0, [r3]
157 mov r0, #0
158 ldmdb fp, {fp, sp, pc}
159
160 ENTRY(os_get_env)
161 mov ip, sp
162 stmfd sp!, {r4, fp, ip, lr, pc}
163 sub fp, ip, #4
164 mov r3, r0
165 mov r4, r1
166 swi OS_GetEnv
167 teq r3, #0
168 strne r1, [r3]
169 teq r4, #0
170 strne r2, [r4]
171 ldmdb fp, {r4, fp, sp, pc}
172
173 ENTRY(os_exit)
174 mov ip, sp
175 stmfd sp!, {fp, ip, lr, pc}
176 sub fp, ip, #4
177 mov r2, r1
178 ldr r1, Labex
179 swi OS_Exit
180 ldmdb fp, {fp, sp, pc}
181 Labex:
182 .ascii "ABEX"
183
184 ENTRY(os_int_off)
185 mov ip, sp
186 stmfd sp!, {fp, ip, lr, pc}
187 sub fp, ip, #4
188 swi OS_IntOff
189 ldmdb fp, {fp, sp, pc}
190
191 ENTRY(os_enter_os)
192 mov ip, sp
193 stmfd sp!, {fp, ip, lr, pc}
194 sub fp, ip, #4
195 swi OS_EnterOS
196 ldmdb fp, {fp, sp, pc}
197
198 ENTRY(xosmodule_alloc)
199 mov ip, sp
200 stmfd sp!, {fp, ip, lr, pc}
201 sub fp, ip, #4
202 mov r3, r0
203 mov r0, #OSModule_Alloc
204 swi XOS_Module
205 ldmvsdb fp, {fp, sp, pc}
206 teq r1, #0
207 strne r2, [r1]
208 mov r0, #0
209 ldmdb fp, {fp, sp, pc}
210
211 ENTRY(xosmodule_free)
212 mov ip, sp
213 stmfd sp!, {fp, ip, lr, pc}
214 sub fp, ip, #4
215 mov r2, r0
216 mov r0, #OSModule_Free
217 swi XOS_Module
218 movvc r0, #0
219 ldmdb fp, {fp, sp, pc}
220
221 ENTRY(xosmodule_lookup)
222 mov ip, sp
223 stmfd sp!, {r4-r8, fp, ip, lr, pc}
224 sub fp, ip, #4
225 mov r6, r1
226 mov r7, r2
227 mov r8, r3
228 mov r1, r0
229 mov r0, #OSModule_Lookup
230 swi XOS_Module
231 ldmvsdb fp, {r4-r8, fp, sp, pc}
232 teq r6, #0
233 strne r1, [r6]
234 teq r7, #0
235 strne r2, [r7]
236 teq r8, #0
237 strne r3, [r8]
238 ldr r8, [fp, #4]
239 teq r8, #0
240 strne r4, [r8]
241 ldr r8, [fp, #8]
242 teq r8, #0
243 strne r5, [r8]
244 mov r0, #0
245 ldmdb fp, {r4-r8, fp, sp, pc}
246
247 ENTRY(xosfscontrol_shutdown)
248 mov ip, sp
249 stmfd sp!, {fp, ip, lr, pc}
250 sub fp, ip, #4
251 mov r0, #OSFSControl_Shutdown
252 swi XOS_FSControl
253 movvc r0, #0
254 ldmdb fp, {fp, sp, pc}
255
256 ENTRY(service_pre_reset)
257 mov ip, sp
258 stmfd sp!, {fp, ip, lr, pc}
259 sub fp, ip, #4
260 mov r1, #Service_PreReset
261 swi OS_ServiceCall
262 ldmdb fp, {fp, sp, pc}
263
264 ENTRY(os_read_vdu_variables)
265 mov ip, sp
266 stmfd sp!, {fp, ip, lr, pc}
267 sub fp, ip, #4
268 swi OS_ReadVduVariables
269 ldmdb fp, {fp, sp, pc}
270
271 ENTRY(xos_swi_number_from_string)
272 mov ip, sp
273 stmfd sp!, {fp, ip, lr, pc}
274 sub fp, ip, #4
275 mov r2, r1
276 mov r1, r0
277 swi XOS_SWINumberFromString
278 ldmvsdb fp, {fp, sp, pc}
279 str r0, [r2]
280 mov r0, #0
281 ldmdb fp, {fp, sp, pc}
282
283 ENTRY(os_read_mem_map_info)
284 mov ip, sp
285 stmfd sp!, {fp, ip, lr, pc}
286 sub fp, ip, #4
287 mov r2, r0
288 mov r3, r1
289 swi OS_ReadMemMapInfo
290 teq r2, #0
291 strne r0, [r2]
292 teq r3, #0
293 strne r1, [r3]
294 ldmdb fp, {fp, sp, pc}
295
296 ENTRY(os_readsysinfo)
297 mov ip, sp
298 stmfd sp!, {r4-r9, fp, ip, lr, pc}
299 sub fp, ip, #4
300 mov r9, r5
301 mov r8, r4
302 mov r7, r3
303 mov r6, r2
304 mov r5, r1
305 swi OS_ReadSysInfo
306 teq r5, #0
307 strne r0, [r5]
308 teq r6, #0
309 strne r1, [r6]
310 teq r7, #0
311 strne r2, [r7]
312 ldr r1, [ip, #0]
313 teq r1, #0
314 strne r3, [r1]
315 ldr r1, [ip, #4]
316 teq r1, #0
317 strne r4, [r1]
318 ldmdb fp, {r4-r9, fp, sp, pc}
319
320 ENTRY(os_read_mem_map_entries)
321 mov ip, sp
322 stmfd sp!, {fp, ip, lr, pc}
323 sub fp, ip, #4
324 swi OS_ReadMemMapEntries
325 ldmdb fp, {fp, sp, pc}
326
327 ENTRY(osmemory_read_arrangement_table_size)
328 mov ip, sp
329 stmfd sp!, {r4, fp, ip, lr, pc}
330 sub fp, ip, #4
331 mov r3, r0
332 mov r4, r1
333 mov r0, #OSMemory_ReadArrangementTableSize
334 swi OS_Memory
335 cmp r3, #0
336 strne r1, [r3]
337 cmp r4, #0
338 strne r2, [r4]
339 ldmdb fp, {r4, fp, sp, pc}
340
341 ENTRY(xosmemory_read_arrangement_table_size)
342 mov ip, sp
343 stmfd sp!, {r4, fp, ip, lr, pc}
344 sub fp, ip, #4
345 mov r3, r0
346 mov r4, r1
347 mov r0, #OSMemory_ReadArrangementTableSize
348 swi XOS_Memory
349 ldmvsdb fp, {r4, fp, sp, pc}
350 cmp r3, #0
351 strne r1, [r3]
352 cmp r4, #0
353 strne r2, [r4]
354 mov r0, #0
355 ldmdb fp, {r4, fp, sp, pc}
356
357 ENTRY(osmemory_read_arrangement_table)
358 mov ip, sp
359 stmfd sp!, {fp, ip, lr, pc}
360 sub fp, ip, #4
361 mov r1, r0
362 mov r0, #OSMemory_ReadArrangementTable
363 swi OS_Memory
364 ldmdb fp, {fp, sp, pc}
365
366 ENTRY(xosmemory_read_arrangement_table)
367 mov ip, sp
368 stmfd sp!, {fp, ip, lr, pc}
369 sub fp, ip, #4
370 mov r1, r0
371 mov r0, #OSMemory_ReadArrangementTable
372 swi XOS_Memory
373 movvc r0, #0
374 ldmdb fp, {fp, sp, pc}
375
376 ENTRY(osmemory_page_op)
377 mov ip, sp
378 stmfd sp!, {fp, ip, lr, pc}
379 sub fp, ip, #4
380 add r0, r0, #OSMemory_PageOp
381 swi OS_Memory
382 ldmdb fp, {fp, sp, pc}
383
384 ENTRY(xcache_control)
385 mov ip, sp
386 stmfd sp!, {fp, ip, lr, pc}
387 sub fp, ip, #4
388 swi XCache_Control
389 ldmvsdb fp, {fp, sp, pc}
390 teq r2, #0
391 strne r0, [r2]
392 mov r0, #0
393 ldmdb fp, {fp, sp, pc}
394
395 ENTRY(xfilecorediscop_read_sectors)
396 mov ip, sp
397 stmfd sp!, {r4, r8, fp, ip, lr, pc}
398 sub fp, ip, #4
399 mov r4, r3
400 mov r3, r2
401 mov r2, r1
402 orr r1, r0, #FileCoreDiscOp_ReadSectors
403 ldr r8, [fp, #4]
404 swi XFileCore_DiscOp
405 ldmvsdb fp, {r4, r8, fp, sp, pc}
406 ldr r0, [fp, #8]
407 teq r0, #0
408 strne r2, [r0]
409 ldr r0, [fp, #12]
410 teq r0, #0
411 strne r3, [r0]
412 ldr r0, [fp, #16]
413 teq r0, #0
414 strne r4, [r0]
415 mov r0, #0
416 ldmdb fp, {r4, r8, fp, sp, pc}
417
418 ENTRY(xfilecore_drives)
419 mov ip, sp
420 stmfd sp!, {r4-r5, r8, fp, ip, lr, pc}
421 sub fp, ip, #4
422 mov r5, r3
423 mov r4, r2
424 mov r3, r1
425 mov r8, r0
426 swi XFileCore_Drives
427 ldmvsdb fp, {r4-r5, r8, fp, sp, pc}
428 teq r3, #0
429 strne r0, [r3]
430 teq r4, #0
431 strne r1, [r4]
432 teq r5, #0
433 strne r2, [r5]
434 mov r0, #0
435 ldmdb fp, {r4-r5, r8, fp, sp, pc}
436
437 ENTRY(xfilecoresectorop_read_sectors)
438 mov ip, sp
439 stmfd sp!, {r4, r8, fp, ip, lr, pc}
440 sub fp, ip, #4
441 mov r4, r3
442 mov r3, r2
443 mov r2, r1
444 orr r1, r0, #FileCoreDiscOp_ReadSectors
445 ldr r8, [fp, #4]
446 swi XFileCore_SectorOp
447 ldmvsdb fp, {r4, r8, fp, sp, pc}
448 ldr r0, [fp, #8]
449 teq r0, #0
450 strne r2, [r0]
451 ldr r0, [fp, #12]
452 teq r0, #0
453 strne r3, [r0]
454 ldr r0, [fp, #16]
455 teq r0, #0
456 strne r4, [r0]
457 mov r0, #0
458 ldmdb fp, {r4, r8, fp, sp, pc}
459
460 ENTRY(xfilecorediscop64_read_sectors)
461 mov ip, sp
462 stmfd sp!, {r4, r5, r8, fp, ip, lr, pc}
463 sub fp, ip, #4
464 mov r4, r3
465 mov r3, r2
466 mov r2, r1
467 orr r1, r0, #FileCoreDiscOp_ReadSectors
468 ldr r5, [fp, #4]
469 ldr r8, [fp, #8]
470 swi XFileCore_DiscOp64
471 ldmvsdb fp, {r4, r5, r8, fp, sp, pc}
472 ldr r0, [fp, #12]
473 teq r0, #0
474 strne r2, [r0]
475 ldr r0, [fp, #16]
476 teq r0, #0
477 strne r3, [r0]
478 ldr r0, [fp, #20]
479 teq r0, #0
480 strne r4, [r0]
481 mov r0, #0
482 ldmdb fp, {r4, r5, r8, fp, sp, pc}
483