pitch-dark/src/prodos.path.a

83 lines
2.3 KiB
Plaintext

;license:MIT
;(c) 2018 by 4am
;
; ProDOS - functions for constructing and passing around ProDOS pathnames
;
; Public functions
; - ResetPath
; - AddToPath
; - SetStartupPath
;
; Public constants
; - kPathSeparator
kPathSeparator
!byte 1
!raw "/"
;------------------------------------------------------------------------------
; ResetPath
; reset gPathname to length 0
;
; in: none
; out: all registers preserved
;------------------------------------------------------------------------------
ResetPath
stz gPathname
rts
;------------------------------------------------------------------------------
; AddToPath
; append a length-prefixed string to gPathname
;
; in: A contains low byte of address of length-prefixed string to append
; Y contains high byte of address of length-prefixed string to append
; out: all registers and flags clobbered
; $00/$01 clobbered
; gPathname updated with concatenated length-prefixed string
;------------------------------------------------------------------------------
AddToPathWithHighBit
ldx #$80
+HIDE_NEXT_2_BYTES
AddToPath
ldx #0
stx @mask
+STAY $00
ldx gPathname ; current pathname length
lda ($00) ; length of this segment
inc
sta @len
ldy #$01
- lda ($00),y
@mask=*+1
ora #$FD ; SMC
sta gPathname+1,x
inx
iny
@len=*+1
cpy #$FD ; SMC
bcc -
stx gPathname
rts
;------------------------------------------------------------------------------
; SetStartupPath
; copy a length-prefixed string to $2006 (to pass it as the startup file when
; launching a .system file)
;
; in: A contains low byte of address of length-prefixed string to append
; Y contains high byte of address of length-prefixed string to append
; out: all registers and flags clobbered
; $00/$01 clobbered
;------------------------------------------------------------------------------
SetStartupPath
+STAY $00
lda ($00)
tay
- lda ($00),y
and #$7F
sta $2006,y
dey
bpl -
rts