riscoscalls.S revision 1.10.148.1 1 /* $NetBSD: riscoscalls.S,v 1.10.148.1 2018/10/20 06:58:24 pgoyette 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(osbyte_read)
83 mov ip, sp
84 stmfd sp!, {fp, ip, lr, pc}
85 sub fp, ip, #4
86 mov r1, #0
87 mov r2, #255
88 swi OS_Byte
89 mov r0, r1
90 ldmdb fp, {fp, sp, pc}
91
92 ENTRY(os_word)
93 mov ip, sp
94 stmfd sp!, {fp, ip, lr, pc}
95 sub fp, ip, #4
96 swi OS_Word
97 ldmdb fp, {fp, sp, pc}
98
99 ENTRY(xosargs_read)
100 mov ip, sp
101 stmfd sp!, {fp, ip, lr, pc}
102 sub fp, ip, #4
103 mov r3, r2
104 swi XOS_Args
105 ldmdbvs fp, {fp, sp, pc}
106 teq r3, #0
107 strne r2, [r3]
108 mov r0, #0
109 ldmdb fp, {fp, sp, pc}
110
111 ENTRY(xosargs_set)
112 mov ip, sp
113 stmfd sp!, {fp, ip, lr, pc}
114 sub fp, ip, #4
115 swi XOS_Args
116 movvc r0, #0
117 ldmdb fp, {fp, sp, pc}
118
119 ENTRY(xosgbpb_write)
120 mov ip, sp
121 stmfd sp!, {r4, fp, ip, lr, pc}
122 sub fp, ip, #4
123 mov ip, r3
124 mov r3, r2
125 mov r2, r1
126 mov r1, r0
127 mov r0, #OSGBPB_Write
128 swi XOS_GBPB
129 teq ip, #0
130 strne r3, [ip]
131 movvc r0, #0
132 ldmdb fp, {r4, fp, sp, pc}
133
134 ENTRY(xosgbpb_read)
135 mov ip, sp
136 stmfd sp!, {r4, fp, ip, lr, pc}
137 sub fp, ip, #4
138 mov ip, r3
139 mov r3, r2
140 mov r2, r1
141 mov r1, r0
142 mov r0, #OSGBPB_Read
143 swi XOS_GBPB
144 teq ip, #0
145 strne r3, [ip]
146 movvc r0, #0
147 ldmdb fp, {r4, fp, sp, pc}
148
149 ENTRY(xosfind_close)
150 mov ip, sp
151 stmfd sp!, {fp, ip, lr, pc}
152 sub fp, ip, #4
153 mov r1, r0
154 mov r0, #OSFind_Close
155 swi XOS_Find
156 movvc r0, #0
157 ldmdb fp, {fp, sp, pc}
158
159 ENTRY(xosfind_open)
160 mov ip, sp
161 stmfd sp!, {fp, ip, lr, pc}
162 sub fp, ip, #4
163 swi XOS_Find
164 ldmdbvs fp, {fp, sp, pc}
165 teq r3, #0
166 strne r0, [r3]
167 mov r0, #0
168 ldmdb fp, {fp, sp, pc}
169
170 ENTRY(os_get_env)
171 mov ip, sp
172 stmfd sp!, {r4, fp, ip, lr, pc}
173 sub fp, ip, #4
174 mov r3, r0
175 mov r4, r1
176 swi OS_GetEnv
177 teq r3, #0
178 strne r1, [r3]
179 teq r4, #0
180 strne r2, [r4]
181 ldmdb fp, {r4, fp, sp, pc}
182
183 ENTRY(os_exit)
184 mov ip, sp
185 stmfd sp!, {fp, ip, lr, pc}
186 sub fp, ip, #4
187 mov r2, r1
188 ldr r1, Labex
189 swi OS_Exit
190 ldmdb fp, {fp, sp, pc}
191 Labex:
192 .ascii "ABEX"
193
194 ENTRY(os_int_off)
195 mov ip, sp
196 stmfd sp!, {fp, ip, lr, pc}
197 sub fp, ip, #4
198 swi OS_IntOff
199 ldmdb fp, {fp, sp, pc}
200
201 ENTRY(os_enter_os)
202 mov ip, sp
203 stmfd sp!, {fp, ip, lr, pc}
204 sub fp, ip, #4
205 swi OS_EnterOS
206 ldmdb fp, {fp, sp, pc}
207
208 ENTRY(xosmodule_alloc)
209 mov ip, sp
210 stmfd sp!, {fp, ip, lr, pc}
211 sub fp, ip, #4
212 mov r3, r0
213 mov r0, #OSModule_Alloc
214 swi XOS_Module
215 ldmdbvs fp, {fp, sp, pc}
216 teq r1, #0
217 strne r2, [r1]
218 mov r0, #0
219 ldmdb fp, {fp, sp, pc}
220
221 ENTRY(xosmodule_free)
222 mov ip, sp
223 stmfd sp!, {fp, ip, lr, pc}
224 sub fp, ip, #4
225 mov r2, r0
226 mov r0, #OSModule_Free
227 swi XOS_Module
228 movvc r0, #0
229 ldmdb fp, {fp, sp, pc}
230
231 ENTRY(xosmodule_lookup)
232 mov ip, sp
233 stmfd sp!, {r4-r8, fp, ip, lr, pc}
234 sub fp, ip, #4
235 mov r6, r1
236 mov r7, r2
237 mov r8, r3
238 mov r1, r0
239 mov r0, #OSModule_Lookup
240 swi XOS_Module
241 ldmdbvs fp, {r4-r8, fp, sp, pc}
242 teq r6, #0
243 strne r1, [r6]
244 teq r7, #0
245 strne r2, [r7]
246 teq r8, #0
247 strne r3, [r8]
248 ldr r8, [fp, #4]
249 teq r8, #0
250 strne r4, [r8]
251 ldr r8, [fp, #8]
252 teq r8, #0
253 strne r5, [r8]
254 mov r0, #0
255 ldmdb fp, {r4-r8, fp, sp, pc}
256
257 ENTRY(xosfscontrol_shutdown)
258 mov ip, sp
259 stmfd sp!, {fp, ip, lr, pc}
260 sub fp, ip, #4
261 mov r0, #OSFSControl_Shutdown
262 swi XOS_FSControl
263 movvc r0, #0
264 ldmdb fp, {fp, sp, pc}
265
266 ENTRY(service_pre_reset)
267 mov ip, sp
268 stmfd sp!, {fp, ip, lr, pc}
269 sub fp, ip, #4
270 mov r1, #Service_PreReset
271 swi OS_ServiceCall
272 ldmdb fp, {fp, sp, pc}
273
274 ENTRY(os_read_vdu_variables)
275 mov ip, sp
276 stmfd sp!, {fp, ip, lr, pc}
277 sub fp, ip, #4
278 swi OS_ReadVduVariables
279 ldmdb fp, {fp, sp, pc}
280
281 ENTRY(xos_swi_number_from_string)
282 mov ip, sp
283 stmfd sp!, {fp, ip, lr, pc}
284 sub fp, ip, #4
285 mov r2, r1
286 mov r1, r0
287 swi XOS_SWINumberFromString
288 ldmdbvs fp, {fp, sp, pc}
289 str r0, [r2]
290 mov r0, #0
291 ldmdb fp, {fp, sp, pc}
292
293 ENTRY(os_read_monotonic_time)
294 mov ip, sp
295 stmfd sp!, {fp, ip, lr, pc}
296 sub fp, ip, #4
297 swi OS_ReadMonotonicTime
298 ldmdb fp, {fp, sp, pc}
299
300 ENTRY(os_read_mem_map_info)
301 mov ip, sp
302 stmfd sp!, {fp, ip, lr, pc}
303 sub fp, ip, #4
304 mov r2, r0
305 mov r3, r1
306 swi OS_ReadMemMapInfo
307 teq r2, #0
308 strne r0, [r2]
309 teq r3, #0
310 strne r1, [r3]
311 ldmdb fp, {fp, sp, pc}
312
313 ENTRY(os_readsysinfo)
314 mov ip, sp
315 stmfd sp!, {r4-r9, fp, ip, lr, pc}
316 sub fp, ip, #4
317 mov r9, r5
318 mov r8, r4
319 mov r7, r3
320 mov r6, r2
321 mov r5, r1
322 swi OS_ReadSysInfo
323 teq r5, #0
324 strne r0, [r5]
325 teq r6, #0
326 strne r1, [r6]
327 teq r7, #0
328 strne r2, [r7]
329 ldr r1, [ip, #0]
330 teq r1, #0
331 strne r3, [r1]
332 ldr r1, [ip, #4]
333 teq r1, #0
334 strne r4, [r1]
335 ldmdb fp, {r4-r9, fp, sp, pc}
336
337 ENTRY(os_read_mem_map_entries)
338 mov ip, sp
339 stmfd sp!, {fp, ip, lr, pc}
340 sub fp, ip, #4
341 swi OS_ReadMemMapEntries
342 ldmdb fp, {fp, sp, pc}
343
344 ENTRY(osmemory_read_arrangement_table_size)
345 mov ip, sp
346 stmfd sp!, {r4, fp, ip, lr, pc}
347 sub fp, ip, #4
348 mov r3, r0
349 mov r4, r1
350 mov r0, #OSMemory_ReadArrangementTableSize
351 swi OS_Memory
352 cmp r3, #0
353 strne r1, [r3]
354 cmp r4, #0
355 strne r2, [r4]
356 ldmdb fp, {r4, fp, sp, pc}
357
358 ENTRY(xosmemory_read_arrangement_table_size)
359 mov ip, sp
360 stmfd sp!, {r4, fp, ip, lr, pc}
361 sub fp, ip, #4
362 mov r3, r0
363 mov r4, r1
364 mov r0, #OSMemory_ReadArrangementTableSize
365 swi XOS_Memory
366 ldmdbvs fp, {r4, fp, sp, pc}
367 cmp r3, #0
368 strne r1, [r3]
369 cmp r4, #0
370 strne r2, [r4]
371 mov r0, #0
372 ldmdb fp, {r4, fp, sp, pc}
373
374 ENTRY(osmemory_read_arrangement_table)
375 mov ip, sp
376 stmfd sp!, {fp, ip, lr, pc}
377 sub fp, ip, #4
378 mov r1, r0
379 mov r0, #OSMemory_ReadArrangementTable
380 swi OS_Memory
381 ldmdb fp, {fp, sp, pc}
382
383 ENTRY(xosmemory_read_arrangement_table)
384 mov ip, sp
385 stmfd sp!, {fp, ip, lr, pc}
386 sub fp, ip, #4
387 mov r1, r0
388 mov r0, #OSMemory_ReadArrangementTable
389 swi XOS_Memory
390 movvc r0, #0
391 ldmdb fp, {fp, sp, pc}
392
393 ENTRY(osmemory_page_op)
394 mov ip, sp
395 stmfd sp!, {fp, ip, lr, pc}
396 sub fp, ip, #4
397 add r0, r0, #OSMemory_PageOp
398 swi OS_Memory
399 ldmdb fp, {fp, sp, pc}
400
401 ENTRY(xcache_control)
402 mov ip, sp
403 stmfd sp!, {fp, ip, lr, pc}
404 sub fp, ip, #4
405 swi XCache_Control
406 ldmdbvs fp, {fp, sp, pc}
407 teq r2, #0
408 strne r0, [r2]
409 mov r0, #0
410 ldmdb fp, {fp, sp, pc}
411
412 ENTRY(xfilecorediscop_read_sectors)
413 mov ip, sp
414 stmfd sp!, {r4, r8, fp, ip, lr, pc}
415 sub fp, ip, #4
416 mov r4, r3
417 mov r3, r2
418 mov r2, r1
419 orr r1, r0, #FileCoreDiscOp_ReadSectors
420 ldr r8, [fp, #4]
421 swi XFileCore_DiscOp
422 ldmdbvs fp, {r4, r8, fp, sp, pc}
423 ldr r0, [fp, #8]
424 teq r0, #0
425 strne r2, [r0]
426 ldr r0, [fp, #12]
427 teq r0, #0
428 strne r3, [r0]
429 ldr r0, [fp, #16]
430 teq r0, #0
431 strne r4, [r0]
432 mov r0, #0
433 ldmdb fp, {r4, r8, fp, sp, pc}
434
435 ENTRY(xfilecore_drives)
436 mov ip, sp
437 stmfd sp!, {r4-r5, r8, fp, ip, lr, pc}
438 sub fp, ip, #4
439 mov r5, r3
440 mov r4, r2
441 mov r3, r1
442 mov r8, r0
443 swi XFileCore_Drives
444 ldmdbvs fp, {r4-r5, r8, fp, sp, pc}
445 teq r3, #0
446 strne r0, [r3]
447 teq r4, #0
448 strne r1, [r4]
449 teq r5, #0
450 strne r2, [r5]
451 mov r0, #0
452 ldmdb fp, {r4-r5, r8, fp, sp, pc}
453
454 ENTRY(xfilecoresectorop_read_sectors)
455 mov ip, sp
456 stmfd sp!, {r4, r8, fp, ip, lr, pc}
457 sub fp, ip, #4
458 mov r4, r3
459 mov r3, r2
460 mov r2, r1
461 orr r1, r0, #FileCoreDiscOp_ReadSectors
462 ldr r8, [fp, #4]
463 swi XFileCore_SectorOp
464 ldmdbvs fp, {r4, r8, fp, sp, pc}
465 ldr r0, [fp, #8]
466 teq r0, #0
467 strne r2, [r0]
468 ldr r0, [fp, #12]
469 teq r0, #0
470 strne r3, [r0]
471 ldr r0, [fp, #16]
472 teq r0, #0
473 strne r4, [r0]
474 mov r0, #0
475 ldmdb fp, {r4, r8, fp, sp, pc}
476
477 ENTRY(xfilecorediscop64_read_sectors)
478 mov ip, sp
479 stmfd sp!, {r4, r5, r8, fp, ip, lr, pc}
480 sub fp, ip, #4
481 mov r4, r3
482 mov r3, r2
483 mov r2, r1
484 orr r1, r0, #FileCoreDiscOp_ReadSectors
485 ldr r5, [fp, #4]
486 ldr r8, [fp, #8]
487 swi XFileCore_DiscOp64
488 ldmdbvs fp, {r4, r5, r8, fp, sp, pc}
489 ldr r0, [fp, #12]
490 teq r0, #0
491 strne r2, [r0]
492 ldr r0, [fp, #16]
493 teq r0, #0
494 strne r3, [r0]
495 ldr r0, [fp, #20]
496 teq r0, #0
497 strne r4, [r0]
498 mov r0, #0
499 ldmdb fp, {r4, r5, r8, fp, sp, pc}
500