]> git.sur5r.net Git - cc65/blob - libsrc/cbm/oserror.s
Protect random counter against ProDOS.
[cc65] / libsrc / cbm / oserror.s
1 ;
2 ; 2000-05-17, Ullrich von Bassewitz
3 ; 2014-05-28, Greg King
4 ;
5 ; int __fastcall__ _osmaperrno (unsigned char oserror);
6 ; /* Map a system-specific error into a system-independent code. */
7 ;
8
9         .include        "errno.inc"
10
11 .code
12
13 __osmaperrno:
14         ldx     #ErrTabSize
15 @L1:    cmp     ErrTab-2,x      ; Search for the error code
16         beq     @L2             ; Jump if found
17         dex
18         dex
19         bne     @L1             ; Next entry
20
21 ; Code not found, return EUNKNOWN
22
23         lda     #<EUNKNOWN
24         ldx     #>EUNKNOWN
25         rts
26
27 ; Found the code
28
29 @L2:    lda     ErrTab-1,x
30         ldx     #$00            ; High byte always zero
31         rts
32
33 .rodata
34
35 ErrTab:
36         .byte   1, EMFILE       ; Too many open files
37         .byte   2, EINVAL       ; File is open
38         .byte   3, EINVAL       ; File not open
39         .byte   4, ENOENT       ; File not found
40         .byte   5, ENODEV       ; Device not present
41         .byte   6, EINVAL       ; File not input
42         .byte   7, EINVAL       ; File not output
43         .byte   8, EINVAL       ; Filename missing
44         .byte   9, ENODEV       ; Illegal device
45         .byte  20, EBUSY        ; No sector header
46         .byte  21, EBUSY        ; No sync mark
47         .byte  22, EIO          ; No sector data
48         .byte  23, EIO          ; Checksum error
49         .byte  24, EIO          ; Decode error
50         .byte  25, EIO          ; Verify error
51         .byte  26, EACCES       ; Write protected
52         .byte  27, EIO          ; Checksum error
53         .byte  28, EIO          ; Write overrun
54         .byte  29, EBUSY        ; Disk ID mismatch
55         .byte  30, EINVAL       ; Command not recognized
56         .byte  31, ENOSYS       ; Command not implemented
57         .byte  32, EINVAL       ; Command too long
58         .byte  33, EINVAL       ; Invalid write filename
59         .byte  34, EINVAL       ; No file given
60         .byte  39, ENOENT       ; System file not found
61         .byte  49, EACCES       ; Invalid format
62         .byte  50, ESPIPE       ; Record not present
63         .byte  51, ENOSPC       ; Overflow in record
64         .byte  52, ENOSPC       ; File too large
65         .byte  60, EBUSY        ; Write file open
66         .byte  61, EINVAL       ; File not open
67         .byte  62, ENOENT       ; File not found
68         .byte  63, EEXIST       ; File exists
69         .byte  64, EINVAL       ; File type mismatch
70         .byte  65, ESPIPE       ; No block
71         .byte  66, EINVAL       ; Illegal track or sector
72         .byte  67, EIO          ; Illegal system track or sector
73         .byte  70, EBUSY        ; No channel
74         .byte  71, EIO          ; BAM error
75         .byte  72, ENOSPC       ; Disk full
76         .byte  73, EACCES       ; DOS version mismatch
77         .byte  74, ENODEV       ; Drive not ready
78         .byte  75, EIO          ; Format error
79         .byte  77, EINVAL       ; Illegal partition
80         .byte  78, EIO          ; Bad system area
81
82 ErrTabSize = (* - ErrTab)