.export         initcwd
         .import                __cwd
+        .import                subysp, addysp
 
         .include       "zeropage.inc"
         .include        "mli.inc"
 
-        .segment        "INIT"
-        
+        .segment       "INIT"
+
 initcwd:
-        ; Use imported buffer
-        lda    #<__cwd
-        ldx    #>__cwd
+        ; Alloc prefix buffer
+        ldy    #1 + 64+1       ; Length byte + max pathname length+trailing slash
+        jsr    subysp
+
+        ; Use allocated prefix buffer
+        lda    sp
+        ldx    sp+1
         sta     mliparam + MLI::PREFIX::PATHNAME
         stx     mliparam + MLI::PREFIX::PATHNAME+1
 
         lda     #GET_PREFIX_CALL
         ldx     #PREFIX_COUNT
         jsr     callmli
+        bcs    done
 
-        ; Check length byte
-        ldx    __cwd
+        ; Check for null prefix
+        ldy    #$00
+        lda    (sp),y
         beq    done
 
-        ; Replace trailing slash with zero
-        sta    __cwd,x         ; A = 0
-
-        ; Remove length byte
-        tax
-:       inx
-        lda    __cwd,x
-        sta    __cwd-1,x
+        ; Set current working directory
+        ; - omit trailing slash and length byte
+        ; - terminating zero already in place
+        tay
+        dey
+:       lda    (sp),y
+        sta    __cwd-1,y
+        dey
         bne    :-
 
-done:   rts
+        ; Cleanup stack
+done:   ldy    #1 + 64+1       ; Length byte + max pathname length+trailing slash
+        jmp     addysp
+