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