]> git.sur5r.net Git - cc65/commitdiff
Fixed an error: The write routine didn't detect write errors correctly.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 25 Apr 2012 20:00:09 +0000 (20:00 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 25 Apr 2012 20:00:09 +0000 (20:00 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5653 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/cbm/write.s

index 26076ffa471c8d9d78ff8aecd1533eae1ffc67d5..fdf7cfbc18fa354b72284ebbebad77407361123f 100644 (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
 
         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
 
 
 ; Error entry: Device not present
 
+devnotpresent2:
+        pla
 devnotpresent:
         lda     #ENODEV
         jmp     __directerrno   ; Sets _errno, clears _oserror, returns -1