]> git.sur5r.net Git - cc65/blob - libsrc/cbm/cbm_write.s
cbm_write is not __fastcall__
[cc65] / libsrc / cbm / cbm_write.s
1 ;
2 ; Ullrich von Bassewitz, 15.11.2002
3 ;
4 ; Original C code by Marc 'BlackJack' Rintsch, 25.03.2001
5 ;
6 ; int __fastcall__ cbm_write(unsigned char lfn, void* buffer, unsigned int size) 
7 ; {
8
9 ;     static unsigned int byteswritten;
10 ;
11 ;     /* if we can't change to the outputchannel #lfn then return an error */
12 ;     if (_oserror = cbm_k_ckout(lfn)) return -1;
13 ;
14 ;     byteswritten = 0;
15 ;
16 ;     while (byteswritten<size && !cbm_k_readst()) {
17 ;         cbm_k_bsout(((unsigned char*)buffer)[byteswritten++]);
18 ;     }
19 ;
20 ;     if (cbm_k_readst()) {
21 ;         _oserror = 5;       /* device not present */
22 ;         byteswritten = -1;
23 ;     }
24 ;
25 ;     cbm_k_clrch();
26 ;
27 ;     return byteswritten;
28 ; }
29 ;
30
31         .include        "cbm.inc"
32
33         .export         _cbm_write
34         .importzp       ptr1, ptr2, ptr3
35         .import         popax, popa
36         .import         __oserror
37
38 _cbm_write:
39         sta     ptr3
40         stx     ptr3+1          ; Save size
41         eor     #$FF
42         sta     ptr1
43         txa
44         eor     #$FF
45         sta     ptr1+1          ; Save -size-1
46
47         jsr     popax
48         sta     ptr2
49         stx     ptr2+1          ; Save buffer
50
51         jsr     popa
52         tax
53         jsr     CKOUT
54         bcs     @E2             ; Branch on error
55         bcc     @L3             ; Branch always
56
57 ; Loop
58
59 @L1:    jsr     READST
60         cmp     #0              ; Status ok?
61         bne     @E1
62
63         ldy     #0
64         lda     (ptr2),y        ;
65         inc     ptr2
66         bne     @L2
67         inc     ptr2+1          ; A = *buffer++;
68
69 @L2:    jsr     BSOUT           ; cbm_k_bsout (A);
70
71 @L3:    inc     ptr1            ; --size;
72         bne     @L1
73         inc     ptr1+1
74         bne     @L1
75
76         jsr     CLRCH
77
78         lda     ptr3
79         ldx     ptr3+1          ; return size;
80
81         rts
82
83 ; Error entry, called when READST fails
84
85 @E1:    lda     #5
86
87 ; Error entry, error code is in A
88
89 @E2:    sta     __oserror
90         lda     #$FF
91         tax
92         rts                     ; return -1
93