|
| 1 | +; Copyright 2024 LLVM-MOS Project |
| 2 | +; Licensed under the Apache License, Version 2.0 with LLVM Exceptions. |
| 3 | +; See https://github.com/llvm-mos/llvm-mos-sdk/blob/main/LICENSE for license |
| 4 | +; information. |
| 5 | + |
| 6 | +; Originally from cc65. Modified from original version. |
| 7 | + |
| 8 | +; |
| 9 | +; 2000-05-17, Ullrich von Bassewitz |
| 10 | +; 2014-05-28, Greg King |
| 11 | +; |
| 12 | +; int __osmaperrno (unsigned char oserror); |
| 13 | +; /* Map a system-specific error into a system-independent code. */ |
| 14 | +; |
| 15 | + |
| 16 | + .include "errno.inc" |
| 17 | + .include "rp6502.inc" |
| 18 | + |
| 19 | +.text |
| 20 | +.globl __osmaperrno |
| 21 | +__osmaperrno: |
| 22 | + ldx #ErrTabSize |
| 23 | +1: cmp ErrTab-2,x ; Search for the error code |
| 24 | + beq 1f ; Jump if found |
| 25 | + dex |
| 26 | + dex |
| 27 | + bne 1b ; Next entry |
| 28 | + |
| 29 | +; Code not found, return EUNKNOWN |
| 30 | + |
| 31 | + lda #<EUNKNOWN |
| 32 | + ldx #>EUNKNOWN |
| 33 | + rts |
| 34 | + |
| 35 | +; Found the code |
| 36 | + |
| 37 | +1: lda ErrTab-1,x |
| 38 | + ldx #$00 ; High byte always zero |
| 39 | + rts |
| 40 | + |
| 41 | +.rodata |
| 42 | + |
| 43 | +ErrTab: |
| 44 | + .byte RIA_ENOENT , ENOENT |
| 45 | + .byte RIA_ENOMEM , ENOMEM |
| 46 | + .byte RIA_EACCES , EACCES |
| 47 | + .byte RIA_ENODEV , ENODEV |
| 48 | + .byte RIA_EMFILE , EMFILE |
| 49 | + .byte RIA_EBUSY , EBUSY |
| 50 | + .byte RIA_EINVAL , EINVAL |
| 51 | + .byte RIA_ENOSPC , ENOSPC |
| 52 | + .byte RIA_EEXIST , EEXIST |
| 53 | + .byte RIA_EAGAIN , EAGAIN |
| 54 | + .byte RIA_EIO , EIO |
| 55 | + .byte RIA_EINTR , EINTR |
| 56 | + .byte RIA_ENOSYS , ENOSYS |
| 57 | + .byte RIA_ESPIPE , ESPIPE |
| 58 | + .byte RIA_ERANGE , ERANGE |
| 59 | + .byte RIA_EBADF , EBADF |
| 60 | + .byte RIA_ENOEXEC , ENOEXEC |
| 61 | + ; .byte RIA_EUNKNOWN , EUNKNOWN |
| 62 | + .byte FR_DISK_ERR , EIO |
| 63 | + ; .byte FR_INT_ERR , EUNKNOWN |
| 64 | + .byte FR_NOT_READY , EBUSY |
| 65 | + .byte FR_NO_FILE , ENOENT |
| 66 | + .byte FR_NO_PATH , ENOENT |
| 67 | + .byte FR_INVALID_NAME , EINVAL |
| 68 | + .byte FR_DENIED , EACCES |
| 69 | + .byte FR_EXIST , EEXIST |
| 70 | + .byte FR_INVALID_OBJECT , EINVAL |
| 71 | + .byte FR_WRITE_PROTECTED , EACCES |
| 72 | + .byte FR_INVALID_DRIVE , ENODEV |
| 73 | + ; .byte FR_NOT_ENABLED , EUNKNOWN |
| 74 | + ; .byte FR_NO_FILESYSTEM , EUNKNOWN |
| 75 | + ; .byte FR_MKFS_ABORTED , EUNKNOWN |
| 76 | + ; .byte FR_TIMEOUT , EUNKNOWN |
| 77 | + .byte FR_LOCKED , EBUSY |
| 78 | + .byte FR_NOT_ENOUGH_CORE , ENOMEM |
| 79 | + .byte FR_TOO_MANY_OPEN_FILES , EMFILE |
| 80 | + .byte FR_INVALID_PARAMETER , EINVAL |
| 81 | + |
| 82 | +ErrTabSize = . - ErrTab |
0 commit comments