]> git.sur5r.net Git - cc65/blob - libsrc/telestrat/write.s
Merge pull request #436 from bbbradsmith/ca65_define_macro_doc
[cc65] / libsrc / telestrat / write.s
1 ;
2 ; jede jede@oric.org 2017-01-22
3
4         .export         _write
5         .import         popax
6         .importzp       ptr1, ptr2, ptr3, tmp1
7
8         .include        "telestrat.inc"
9
10 ; int write (int fd, const void* buf, int count);
11 .proc   _write
12
13         sta     ptr3
14         stx     ptr3+1          ; save count as result
15
16         eor     #$FF
17         sta     ptr2
18         txa
19         eor     #$FF
20         sta     ptr2+1          ; Remember -count-1
21
22         jsr     popax           ; get buf
23         sta     ptr1
24         stx     ptr1+1
25         jsr     popax           ; get fd and discard
26
27         ; if fd=0001 then it stdout
28         cpx     #0
29         beq     next
30         jmp     L1
31 next:           
32         cmp     #1
33         beq     L1              
34                 
35         ; Here it's a file opened
36         lda     ptr1
37         sta     PTR_READ_DEST
38         lda     ptr1+1
39         sta     PTR_READ_DEST+1
40         lda     ptr3
41         ldy     ptr3+1
42         BRK_TELEMON  XFWRITE
43         rts
44                 
45                 
46 L1:     inc     ptr2
47         bne     L2
48         inc     ptr2+1
49         beq     L9
50 L2:     ldy     #0
51         lda     (ptr1),y
52         tax
53         cpx     #$0A            ; Check for \n
54         bne     L3
55         BRK_TELEMON  XWR0  ; Macro send char to screen (channel 0 in telemon terms)
56         lda     #$0D ; return to the beggining of the line
57         BRK_TELEMON  XWR0  ; Macro ; 
58         
59
60         ldx     #$0D
61 L3:     
62         BRK_TELEMON  XWR0  ; Macro
63
64         inc     ptr1
65         bne     L1
66         inc     ptr1+1
67         jmp     L1
68
69 ; No error, return count
70
71 L9:     lda     ptr3
72         ldx     ptr3+1
73         rts
74
75 .endproc
76
77