]> git.sur5r.net Git - cc65/blob - libsrc/telestrat/write.s
1c01905315245dc21f06996db7fbe1b13db51203
[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                 
29                 
30                 cpx     #0
31                 beq     next
32                 jmp     L1
33 next:           
34                 cmp     #1
35                 beq     L1              
36                 
37                 ; Here it's a file opened
38                 lda     ptr1
39                 sta     PTR_READ_DEST
40                 lda     ptr1+1
41                 sta     PTR_READ_DEST+1
42                 lda     ptr3
43                 ldy     ptr3+1
44                 BRK_TELEMON  XFWRITE
45                 rts
46                 
47                 
48 L1:     inc     ptr2
49         bne     L2
50         inc     ptr2+1
51         beq     L9
52 L2:     ldy     #0
53         lda     (ptr1),y
54         tax
55         cpx     #$0A            ; Check for \n
56         bne     L3
57                 BRK_TELEMON  XWR0  ; Macro send char to screen (channel 0 in telemon terms)
58                 lda     #$0D ; return to the beggining of the line
59                 BRK_TELEMON  XWR0  ; Macro ; 
60         
61
62         ldx     #$0D
63 L3:     
64                 BRK_TELEMON  XWR0  ; Macro
65
66         inc     ptr1
67         bne     L1
68         inc     ptr1+1
69         jmp     L1
70
71 ; No error, return count
72
73 L9:     lda     ptr3
74         ldx     ptr3+1
75         rts
76
77 .endproc
78
79