1
0
mirror of https://github.com/cc65/cc65.git synced 2024-07-02 15:29:33 +00:00

Fixed an error: The write routine didn't detect write errors correctly.

git-svn-id: svn://svn.cc65.org/cc65/trunk@5653 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz 2012-04-25 20:00:09 +00:00
parent 2ce084228f
commit 33926dee54

View File

@ -7,7 +7,7 @@
.export _write
.constructor initstdout
.import SETLFS, OPEN, CKOUT, BSOUT, CLRCH
.import SETLFS, OPEN, CKOUT, BSOUT, READST, CLRCH
.import rwcommon
.importzp sp, ptr1, ptr2, ptr3
@ -72,7 +72,15 @@
bne @L1
inc ptr2+1 ; A = *buf++;
@L1: jsr BSOUT
bcs @error ; Bail out on errors
; Check the status
pha
jsr READST
lsr a ; Bit zero is write timeout
bne devnotpresent2
pla
bcs @L3
; Count characters written
@ -87,9 +95,9 @@
inc ptr1+1
bne @L0
; Wrote all chars, close the output channel
; Wrote all chars or disk full. Close the output channel
jsr CLRCH
@L3: jsr CLRCH
; Clear _oserror and return the number of chars written
@ -101,6 +109,8 @@
; Error entry: Device not present
devnotpresent2:
pla
devnotpresent:
lda #ENODEV
jmp __directerrno ; Sets _errno, clears _oserror, returns -1