Home | History | Annotate | Line # | Download | only in lib
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