diff --git a/libsrc/apple2/initcwd.s b/libsrc/apple2/initcwd.s index 77aa1442f..6ed914ca6 100644 --- a/libsrc/apple2/initcwd.s +++ b/libsrc/apple2/initcwd.s @@ -4,21 +4,14 @@ .export initcwd .import __cwd - .import subysp, addysp .include "zeropage.inc" .include "mli.inc" - .segment "INIT" - initcwd: - ; 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 + ; Set static prefix buffer + lda #<__cwd + ldx #>__cwd sta mliparam + MLI::PREFIX::PATHNAME stx mliparam + MLI::PREFIX::PATHNAME+1 @@ -26,24 +19,22 @@ initcwd: lda #GET_PREFIX_CALL ldx #PREFIX_COUNT jsr callmli - bcs done ; Check for null prefix - ldy #$00 - lda (sp),y - beq done + lda __cwd + beq done - ; 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 :- - - ; Cleanup stack -done: ldy #1 + 64+1 ; Length byte + max pathname length+trailing slash - jmp addysp + ; Remove length byte and trailing slash + sta tmp1 + ldx #$01 +: lda __cwd,x + sta __cwd - 1,x + inx + cpx tmp1 + bcc :- + ; Add terminating zero + lda #$00 + sta __cwd - 1,x + +done: rts diff --git a/libsrc/apple2/syschdir.s b/libsrc/apple2/syschdir.s index 48bbc2eed..7eb67e1ab 100644 --- a/libsrc/apple2/syschdir.s +++ b/libsrc/apple2/syschdir.s @@ -6,7 +6,7 @@ .export __syschdir .import pushname, popname - .import __cwd + .import initcwd .include "zeropage.inc" .include "mli.inc" @@ -28,12 +28,8 @@ __syschdir: jsr callmli bcs cleanup - ldy #$01 -: lda (sp),y - sta __cwd-1,y - beq cleanup - iny - bne :- ; Branch always + ; Update current working directory + jsr initcwd ; Returns with A = 0 ; Cleanup name cleanup:jsr popname ; Preserves A