;; ;; Kevin Ruland ;; ;; int write (int fd, const void* buf, int count); ;; ;; for now will only write to fd = stdout ;; .export _write .import popax .importzp ptr1, ptr2, ptr3 .include "apple2.inc" _write: jsr popax ; get count sta ptr2 stx ptr2+1 ; save for later sta ptr3 sta ptr3+1 ; save for result jsr popax ; get buf sta ptr1 stx ptr1+1 jsr popax ; get fd and discard L1: lda ptr2 ora ptr2+1 ; count zero? beq L9 ldy #0 lda (ptr1),y cmp #$0A ; Check for \n = Crtl-j bne rawout lda #$0D ; Issue cr rawout: ora #$80 jsr COUT inc ptr1 bne L2 inc ptr1+1 L2: lda ptr2 bne L3 dec ptr2 dec ptr2+1 jmp L1 L3: dec ptr2 jmp L1 ; No error, return count L9: lda ptr3 ldx ptr3+1 rts