]> git.sur5r.net Git - cc65/blobdiff - libsrc/apple2/open.s
don't use constructor to setup runtime stack
[cc65] / libsrc / apple2 / open.s
index ca08735a16bf686e2290177496bfe415cb2ff07f..aef0f56e8d1be05b6bbc9f7c3757bd340cae22e8 100644 (file)
@@ -12,8 +12,8 @@
 
         .import                pushname, popname
         .import        errnoexit, oserrexit
-        .import                __aligned_malloc, _free
-        .import        addysp, incsp4, pushax, popax
+        .import                iobuf_alloc, iobuf_free
+        .import        addysp, incsp4, incaxy, pushax, popax
 
         .include       "zeropage.inc"
         .include       "errno.inc"
@@ -37,28 +37,22 @@ _open:
 :       lda    fdtab + FD::REF_NUM,y
         beq    found
 
-        .if    .sizeof(FD) = 4
-
         ; Advance to next fdtab slot
+        .assert .sizeof(FD) = 4, error
         iny
         iny
         iny
         iny
 
-        .else
-        .error "Assertion failed"
-        .endif
-
         ; Check for end of fdtab
         cpy    #MAX_FDS * .sizeof(FD)
         bcc    :-
 
-        ; Load errno codes
-        lda    #ENOMEM ^ EMFILE
-enomem: eor    #ENOMEM
+        ; Load errno code
+        lda    #EMFILE
 
         ; Cleanup stack
-        jsr    incsp4          ; Preserves A
+errno:  jsr    incsp4          ; Preserves A
 
         ; Return errno
         jmp    errnoexit
@@ -68,24 +62,24 @@ found:  tya
         pha
 
         ; Alloc I/O buffer
+       lda     #<(fdtab + FD::BUFFER)
+       ldx     #>(fdtab + FD::BUFFER)
+       jsr     incaxy
+       jsr     pushax
         lda    #$00
-        ldx    #>$0400
-        jsr    pushax          ; Preserves A
         ldx    #>$0100
-        jsr    __aligned_malloc
+        jsr    pushax          ; Preserves A
+        ldx    #>$0400
+        jsr    iobuf_alloc
+       tay                     ; Save errno code
 
         ; Restore fdtab slot
         pla
-        tay
-
-        ; Get and check I/O buffer high byte
-        txa
-        beq    enomem
-
-        ; Set I/O buffer high byte (low byte remains zero)
-        sta    fdtab + FD::BUFFER+1,y
+        sta    tmp2            ; Save fdtab slot
 
-        sty    tmp2            ; Save fdtab slot
+        ; Check for error
+        tya                    ; Restore errno code
+        bne    errno
 
         ; Get and save flags
         jsr    popax
@@ -107,13 +101,8 @@ found:  tya
         and    #O_CREAT
         beq    open
 
-        .if    MLI::CREATE::PATHNAME = MLI::OPEN::PATHNAME
-
         ; PATHNAME already set
-
-        .else
-        .error "Assertion failed"
-        .endif
+        .assert MLI::CREATE::PATHNAME = MLI::OPEN::PATHNAME, error
 
         ; Set all other parameters from template
         ldx    #(MLI::CREATE::CREATE_TIME+1) - (MLI::CREATE::PATHNAME+1) - 1
@@ -138,7 +127,7 @@ found:  tya
         beq    open
 
         lda    #$47            ; "Duplicate filename"
-        
+
         ; Cleanup name
 oserr2: jsr    popname         ; Preserves A
 
@@ -148,7 +137,7 @@ oserr1: ldy tmp2            ; Restore fdtab slot
         pha                    ; Save oserror code
         jsr    freebuffer
         pla                    ; Restore oserror code
-        
+
         ; Return oserror
         jmp    oserrexit
 
@@ -200,20 +189,15 @@ open:   ldy       tmp2            ; Restore fdtab slot
 done:   lda    tmp1            ; Restore fd
         sta    fdtab + FD::REF_NUM,y
 
-        .if    .sizeof(FD) = 4
-
         ; Convert fdtab slot to handle
+        .assert .sizeof(FD) = 4, error
         tya
         lsr
         lsr
 
-        .else
-        .error "Assertion failed"
-        .endif
-
         ; Cleanup name
         jsr    popname         ; Preserves A
-        
+
         ; Return success
         ldx    #$00
         rts
@@ -222,7 +206,7 @@ freebuffer:
         ; Free I/O buffer
         lda    #$00
         ldx    fdtab + FD::BUFFER+1,y
-        jmp    _free
+        jmp    iobuf_free
 
 closeallfiles:
         ; All open files