Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-02-26 17:34:13 +01:00
parent a32778bff2
commit 30bf312f81
6 changed files with 527 additions and 373 deletions

Binary file not shown.

View File

@ -78,43 +78,56 @@ DIR.BS jsr SRC.GetNextCharNB
jsr EXP.Eval
bcs .9
lda SRC.ACC+3
ora SRC.ACC+2
bne .99
lda SRC.ACC
eor #$ff
sta DIR.Word
lda SRC.ACC+1
eor #$ff
sta DIR.Word+1
stz DIR.Byte
jsr SRC.GetNextChar
bcs .1
cmp #' '
cmp #C.SPACE
beq .1
cmp #','
bne .98
jsr EXP.Eval
bcs .9
lda SRC.ACC+3
ora SRC.ACC+2
ora SRC.ACC+1
bne .99
lda SRC.ACC
sta DIR.Byte
.1 inc DIR.Word
bne .2
inc DIR.Word+1
beq .8
.2 lda DIR.Byte
jsr OUT.EmitByte
bcc .1
rts
.8 clc
.9 rts
.99 lda #E.RANGE
sec
rts
.98 lda #E.SYNTAX.ERROR
sec
rts
@ -252,36 +265,58 @@ DIR.EQ clc
>LDA.G SYM.bInGlobal
bpl .99
jsr SRC.GetNextCharNB
bcs .99
lda #$ff
>STA.G OUT.bEquate
>LDA.G ASM.PASS
bne .2
jsr EXP.Eval PASS#1
bcs .9
jsr SYM.Acc2Global
jmp SYM.StoreGlobal
.2 lda (ZPSymbolBuf) PASS#2
and #SYMG.F.FWREF
beq .3
jsr EXP.Eval
bcs .9
jmp SYM.UpdateGlobal
.3 ldy #SYMG-1 copy back value for OUT.Print
>LDA.G ASM.PASS
bne .2
.4 lda (ZPSymbolBuf),y
sta SRC.ACC.F,y
>LDA.G SYM.GlobalPtr PASS#1
cmp #SYMG
beq .12
tay
ldx #3 we are in local/private
.11 lda SRC.ACC,x update value
dey
bpl .4
sta (ZPSymbolBuf),y
dex
bpl .11
clc
rts
.12 jsr SYM.Acc2Global global, update and close
jmp SYM.StoreGlobal
*---------------------------------------
.2 >LDA.G SYM.GlobalPtr PASS#2
cmp #SYMG
beq .22
tay
ldx #3 we are in local/private
.21 lda SRC.ACC,x update value
dey
sta (ZPSymbolBuf),y
dex
bpl .21
clc
rts
.22 jsr SYM.Acc2Global global, update and close
jmp SYM.UpdateGlobal
.99 lda #E.SYNTAX.ERROR
sec
@ -384,15 +419,19 @@ DIR.LI jsr SRC.GetNextChar
.8 clc
rts
DIR.LI.ON ldy #ASM.LI.ON
sec
bra DIR.LI.APPLY
DIR.LI.OFF ldy #ASM.LI.ON
clc
bra DIR.LI.APPLY
DIR.LI.CON ldy #ASM.LI.CON
sec
bra DIR.LI.APPLY
DIR.LI.COFF ldy #ASM.LI.CON
clc
bra DIR.LI.APPLY
@ -400,12 +439,15 @@ DIR.LI.COFF ldy #ASM.LI.CON
DIR.LI.MON ldy #ASM.LI.MON
sec
bra DIR.LI.APPLY
DIR.LI.MOFF ldy #ASM.LI.MON
clc
bra DIR.LI.APPLY
DIR.LI.XON ldy #ASM.LI.XON
sec
bra DIR.LI.APPLY
DIR.LI.XOFF ldy #ASM.LI.XON
clc
DIR.LI.APPLY lda #0
@ -451,16 +493,20 @@ DIR.OP.SYNERR lda #E.SYNTAX.ERROR
*---------------------------------------
DIR.OR jsr SRC.GetNextCharNB
bcs DIR.OP.SYNERR
jsr EXP.Eval
bcs .9
ldy #ASM.PC
ldx #0
.1 lda SRC.ACC,x
sta (pData),y
inx
iny
cpx #4
bne .1
clc
.9 rts
*---------------------------------------
@ -484,8 +530,38 @@ DIR.PH >LDA.G ASM.PH.ON
DIR.TA clc
rts
*---------------------------------------
DIR.TF clc
rts
DIR.TF >LDA.G ASM.PASS If Pass#1, ignore
beq .8
>LDA.G ArgDstFile
beq .1
>SYSCALL ArgV
bra .2
.1 jsr SRC.GetNextCharNB
bcs DIR.OP.SYNERR
>LDYA ZPLinePtr
.2 >PUSHYA
>PUSHWI 0 Allocate
>SYSCALL RealPath
bcs .9
txa
>STA.G DST.hFILENAME
>SYSCALL getmemptr
>PUSHYA
>PUSHBI O.WRONLY+O.CREATE
>PUSHBI S.FI.T.BIN
>PUSHWZ
>SYSCALL FOpen
bcs .9
>STA.G DST.hREFNUM
.8 clc
.9 rts
*---------------------------------------
DIR.TI clc
rts

View File

@ -25,28 +25,39 @@ OUT.Reset ldx #4
rts
*---------------------------------------
OUT.PrintLineOn
clc
rts
>LDA.G bListAll
bmi .8
>LDA.G ASM.LI.ON
bpl .9
>LDA.G ASM.MA.ON MACRO Mode ?
bpl .1
>LDA.G ASM.LI.MON
bpl .9
bmi .8
clc
rts
.1 >LDA.G ASM.DO.StackPtr within a DO/ELSE ?
beq .2
clc
adc #ASM.DO.Stack-1
tay
lda (pData),y TRUE ?
bne .8 yes, print always
>LDA.G ASM.LI.CON FALSE, check CON flag...
bpl .9
bmi .8
clc
rts
.2
.8 clc
rts
.9 sec
rts
*---------------------------------------
@ -77,8 +88,17 @@ OUT.PrintLineErr
>SYSCALL PutChar
bcs .9
jsr OUT.PrintCR
>PUSHW L.MSG.PASS
>LDA.G ASM.PASS
inc
>PUSHA
>PUSHBI 1
jsr OUT.Print
jmp OUT.PrintCR
.9 rts
*---------------------------------------
OUT.PrintLineErrDashA
@ -208,16 +228,31 @@ OUT.EmitByte phy
phx
pha
>LDA.G OUT.Buf
>LDA.G ASM.PASS
beq .10
pla
pha
>PUSHA
>LDA.G DST.hREFNUM
>SYSCALL fputc
plx
bcs .99
phx
.10 >LDA.G OUT.Buf
cmp #3
bne .2
jsr OUT.PrintLineOn
bcs .1
>LDA.G ASM.LI.XON
bpl .1
jsr OUT.PrintLineOutBuf
jsr OUT.PrintCR
.1 jsr OUT.Reset
lda #0
ldy #OUT.Buf
@ -228,6 +263,7 @@ OUT.EmitByte phy
tay
pla
sta (pData),y
.8 >INC.G ASM.PC
bne .80
>INC.G ASM.PC+1
@ -235,10 +271,11 @@ OUT.EmitByte phy
>INC.G ASM.PC+2
bne .80
>INC.G ASM.PC+3
.80 plx
.80 clc
.99 plx
ply
clc
rts
rts
*---------------------------------------
OUT.PrintCR >PUSHW L.MSG.CRLF
>PUSHBI 0

View File

@ -31,29 +31,329 @@ SYM.Reset >STZ.G SYM.bInGlobal
rts
*---------------------------------------
SYM.Quit >LDA.G SYM.hGlobalBuf
beq .3
beq .1
>SYSCALL FreeMem
.3 >LDA.G SYM.hList
beq SYM.Quit.8
.1 >LDA.G SYM.hList
beq .8
>PUSHA
>SYSCALL SListFree
SYM.Quit.8 clc
.8 rts
*---------------------------------------
SYM.NewOrGetGlobal
>LDA.G ASM.PASS
bne SYM.GetGlobal
SYM.NewGlobal jsr SYM.StoreGlobal
bcs .99
>PUSHB.G SYM.hList
>PUSHW ZPLinePtr Pass #1: try to add global...
>SYSCALL SListNewKey
bcs .9 Already Defined
>STYA.G SYM.GlobalID
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 jsr SYM.PC2Acc
jsr SYM.Acc2Global
lda #SYMG
>STA.G SYM.GlobalPtr
tay
lda #0
sta (ZPSymbolBuf),y
lda #$ff
>STA.G SYM.bInGlobal
clc
rts
.9 lda #E.SYMBOL.REDEF
sec
.99 rts
*---------------------------------------
SYM.GetGlobal >PUSHB.G SYM.hList
>PUSHW ZPLinePtr Pass #2: should be already defined...
>SYSCALL SListLookup
bcs .9
>STYA.G SYM.GlobalID
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 >PUSHB.G SYM.hList
>PUSHW.G SYM.GlobalID
>PUSHW ZPSymbolBuf
>PUSHWI $ffff all
>PUSHWZ from Start
>SYSCALL SListGetData
bcs .99
lda #$ff
>STA.G SYM.bInGlobal
* clc
rts
.9 lda #E.UNDEF.SYMBOL
sec
.99 rts
*---------------------------------------
SYM.LookupGlobal
>PUSHB.G SYM.hList
>PUSHW ZPLinePtr
>SYSCALL SListLookup
bcs .9
>STYA ZPPtr1
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 >LDA.G SYM.GlobalID
cmp ZPPtr1
bne .3
iny SYM.GlobalID+1
lda (pData),y
cmp ZPPtr1+1
bne .3
ldy #SYMG-1
.2 lda (ZPSymbolBuf),y
sta SRC.ACC.F,y
dey
bpl .2
clc
rts
.3 >PUSHB.G SYM.hList
>PUSHW ZPPtr1
>PUSHW L.SRC.ACC.F
>PUSHWI SYMG Get only Global value
>PUSHWZ Start
>SYSCALL SListGetData
rts
.9 lda #E.UNDEF.SYMBOL
sec
rts
*---------------------------------------
SYM.StoreGlobal >LDA.G ASM.PASS
bne .8
>LDA.G SYM.bInGlobal
bpl .8
>PUSHB.G SYM.hList
>PUSHW.G SYM.GlobalID
>PUSHW ZPSymbolBuf
>LDA.G SYM.GlobalPtr
tay
lda #0
cpy #SYMG
beq .1
iny Add 1 for \0 after locals/privates
bne .1
inc
.1 >PUSHYA
>SYSCALL SListAddData
bcs .9
>STZ.G SYM.bInGlobal
>STA.G MAC.CtxID
.8 clc
.9 rts
*---------------------------------------
SYM.UpdateGlobal
>PUSHB.G SYM.hList
>PUSHW.G SYM.GlobalID
>PUSHW ZPSymbolBuf
>LDA.G SYM.GlobalPtr
tay
lda #0
cpy #SYMG
beq .1
iny Add 1 for \0 after locals/privates
bne .1
inc
.1 >PUSHYA
>SYSCALL SListSetData
rts
*---------------------------------------
SYM.PC2Acc ldy #ASM.PC+3
ldx #3
.1 lda (pData),y
sta SRC.ACC,x
dey
dex
bpl .1
lda #2
sta SRC.ACC.SIZE
stz SRC.ACC.F
rts
*---------------------------------------
SYM.Acc2Global ldy #SYMG-1
.2 lda SRC.ACC.F,y
sta (ZPSymbolBuf),y
dey
bpl .2
rts
*---------------------------------------
SYM.NewLocalA tax Save Local ID
>LDA.G SYM.bInGlobal not in a global label
bpl .91
>LDA.G ASM.PASS Pass #2: should be already defined...
bne .8
jsr SYM.GetLocalX Pass #1; try to add
bcc .9 Already Defined
>LDA.G SYM.GlobalPtr
cmp #252 6*42
beq .90
ldy #ASM.PC+4
.1 dey
lda (pData),y
pha
cpy #ASM.PC
bne .1
>LDA.G MAC.CtxID Get Macro Context ID
pha
>LDA.G SYM.GlobalPtr
tay
txa Get Back ID
sta (ZPSymbolBuf),y
ldx #5 MAC ID + PC (4)
.2 pla
iny
sta (ZPSymbolBuf),y
dex
bne .2
iny
lda #0
sta (ZPSymbolBuf),y ending \0
tya
>STA.G SYM.GlobalPtr
lda (ZPSymbolBuf)
ora #SYMG.F.LOCALS
sta (ZPSymbolBuf)
.8 clc
rts
.91 lda #E.INV.LABEL
sec
rts
.90 lda #E.TOO.MANY.LOCAL
sec
rts
.9 lda #E.SYMBOL.REDEF
sec
rts
*---------------------------------------
SYM.GetLocalX lda (ZPSymbolBuf)
and #SYMG.F.LOCALS
beq .9
ldy #SYMG
.1 lda (ZPSymbolBuf),y
beq .9
txa
cmp (ZPSymbolBuf),y
bne .4
phy
>LDA.G MAC.CtxID
ply
iny
cmp (ZPSymbolBuf),y
bne .3
ldx #0
.2 iny
lda (ZPSymbolBuf),y
sta SRC.ACC,x
inx
cpx #4
bne .2
lda #2
sta SRC.ACC.SIZE
clc
rts
.3 dey
.4 tya
clc
adc #SYML
tay
bra .1
.9 lda #E.UNDEF.SYMBOL
sec
rts
*---------------------------------------
SYM.Dump.End >PUSHW L.MSG.SUMMARY
>PUSHW ZPPtr2
>PUSHBI 2
jmp OUT.Print
SYM.Dump.8 clc
rts
*---------------------------------------
SYM.Dump >LDA.G ASM.LI.ON
bpl SYM.Quit.8
SYM.Dump >LDA.G bListAll
bmi .10
>LDYA L.MSG.SYMBOLS
>LDA.G ASM.LI.ON
bpl SYM.Dump.8
.10 >LDYA L.MSG.SYMBOLS
>SYSCALL puts
stz ZPPtr2
@ -184,296 +484,6 @@ SYM.Dump.PushValueY
rts
*---------------------------------------
SYM.NewOrGetGlobal
>LDA.G ASM.PASS
bne SYM.GetGlobal
SYM.NewGlobal jsr SYM.StoreGlobal
bcs .99
>PUSHB.G SYM.hList
>PUSHW ZPLinePtr Pass #1: try to add global...
>SYSCALL SListNewKey
bcs .9 Already Defined
>STYA.G SYM.GlobalID
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 jsr SYM.PC2Acc
jsr SYM.Acc2Global
lda #SYMG
>STA.G SYM.GlobalPtr
tay
lda #0
sta (ZPSymbolBuf),y
lda #$ff
>STA.G SYM.bInGlobal
clc
rts
.9 lda #E.SYMBOL.REDEF
sec
.99 rts
*---------------------------------------
SYM.GetGlobal >PUSHB.G SYM.hList
>PUSHW ZPLinePtr Pass #2: should be already defined...
>SYSCALL SListLookup
bcs .9
>STYA.G SYM.GlobalID
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 >PUSHB.G SYM.hList
>PUSHW.G SYM.GlobalID
>PUSHW ZPSymbolBuf
>PUSHWI $ffff all
>PUSHWZ from Start
>SYSCALL SListGetData
bcs .99
lda #$ff
>STA.G SYM.bInGlobal
* clc
rts
.9 lda #E.UNDEF.SYMBOL
sec
.99 rts
*---------------------------------------
SYM.LookupGlobal
>PUSHB.G SYM.hList
>PUSHW ZPLinePtr
>SYSCALL SListLookup
bcs .9
>STYA ZPPtr1
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 >LDA.G SYM.GlobalID
cmp ZPPtr1
bne .3
iny SYM.GlobalID+1
lda (pData),y
cmp ZPPtr1+1
bne .3
ldy #SYMG-1
.2 lda (ZPSymbolBuf),y
sta SRC.ACC.F,y
dey
bpl .2
clc
rts
.3 >PUSHB.G SYM.hList
>PUSHW ZPPtr1
>PUSHW L.SRC.ACC.F
>PUSHWI SYMG Get only Global value
>PUSHWZ Start
>SYSCALL SListGetData
rts
.9 lda #E.UNDEF.SYMBOL
sec
rts
*---------------------------------------
SYM.StoreGlobal >LDA.G ASM.PASS
bne .8
>LDA.G SYM.bInGlobal
bpl .8
>PUSHB.G SYM.hList
>PUSHW.G SYM.GlobalID
>PUSHW ZPSymbolBuf
>LDA.G SYM.GlobalPtr
tay
lda #0
cpy #SYMG
beq .1
lda (ZPSymbolBuf)
ora #SYMG.F.LOCALS
sta (ZPSymbolBuf)
lda #0
sta (ZPSymbolBuf),y
iny
bne .1
inc
.1 >PUSHYA
>SYSCALL SListAddData
bcs .9
>STZ.G SYM.bInGlobal
>STA.G MAC.CtxID
.8 clc
.9 rts
*---------------------------------------
SYM.UpdateGlobal
>PUSHB.G SYM.hList
>PUSHW.G SYM.GlobalID
>PUSHW L.SRC.ACC.F
>PUSHWI SYMG
>SYSCALL SListSetData
rts
*---------------------------------------
SYM.PC2Acc ldy #ASM.PC+3
ldx #3
.1 lda (pData),y
sta SRC.ACC,x
dey
dex
bpl .1
lda #2
sta SRC.ACC.SIZE
stz SRC.ACC.F
rts
*---------------------------------------
SYM.Acc2Global ldy #SYMG-1
.2 lda SRC.ACC.F,y
sta (ZPSymbolBuf),y
dey
bpl .2
rts
*---------------------------------------
SYM.NewLocalA tax Save Local ID
>LDA.G SYM.bInGlobal not in a global label
bpl .91
>LDA.G ASM.PASS Pass #2: should be already defined...
bne .8
jsr SYM.GetLocalX Pass #1; try to add
bcc .9 Already Defined
>LDA.G SYM.GlobalPtr
cmp #252 6*42
beq .90
ldy #ASM.PC+4
.1 dey
lda (pData),y
pha
cpy #ASM.PC
bne .1
>LDA.G MAC.CtxID Get Macro Context ID
.11 pha
>LDA.G SYM.GlobalPtr
tay
txa Get Back ID
sta (ZPSymbolBuf),y
ldx #5 MAC ID + PC (4)
.2 pla
iny
sta (ZPSymbolBuf),y
dex
bne .2
iny
lda #0
sta (ZPSymbolBuf),y
tya
>STA.G SYM.GlobalPtr
lda (ZPSymbolBuf)
ora #SYMG.F.LOCALS
sta (ZPSymbolBuf)
.8 clc
rts
.91 lda #E.INV.LABEL
sec
rts
.90 lda #E.TOO.MANY.LOCAL
sec
rts
.9 lda #E.SYMBOL.REDEF
sec
rts
*---------------------------------------
SYM.GetLocalX lda (ZPSymbolBuf)
and #SYMG.F.LOCALS
beq .9
ldy #SYMG
.1 lda (ZPSymbolBuf),y
beq .9
txa
cmp (ZPSymbolBuf),y
bne .4
phy
>LDA.G MAC.CtxID
ply
iny
cmp (ZPSymbolBuf),y
bne .3
ldx #0
.2 iny
lda (ZPSymbolBuf),y
sta SRC.ACC,x
inx
cpx #4
bne .2
lda #2
sta SRC.ACC.SIZE
clc
rts
.3 dey
.4 tya
clc
adc #SYML
tay
bra .1
.9 lda #E.UNDEF.SYMBOL
sec
rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.SYM
LOAD USR/SRC/BIN/ASM.S

View File

@ -45,12 +45,12 @@ SYMG.F.FWREF .EQ %10000000
SYMG.F.RW .EQ %01000000
SYMG.F.LOCALS .EQ %00100000
SYMG.SIZE .EQ 1 1,2,3,4
SYMG.V .EQ 2
SYMG.V .EQ 2 DWORD
*
SYMG .EQ 6 DWORD
SYMG .EQ 6
*---------------------------------------
SYML.ID .EQ 0 1..255
SYML.MacroID .EQ 1
SYML.CtxID .EQ 1 0 if local, !0 if private
SYML.V .EQ 2 DWORD
*
SYML .EQ 6
@ -209,11 +209,7 @@ J.EXP.OP .DA EXP.OP.EOR ^!|&<=>+-*/
.DA EXP.OP.DIV
.DA 0
*---------------------------------------
CS.INIT ldy #S.PS.ARGC
lda (pPs),y
beq .99
jsr CS.RUN.ARGS
CS.INIT jsr CS.RUN.ARGS
bcs .99
jsr FIO.Init
@ -230,25 +226,67 @@ CS.INIT ldy #S.PS.ARGC
* clc
rts
.99 >PUSHW L.MSG.HELP
.99 pha
>PUSHW L.MSG.HELP
>PUSHBI 0
>SYSCALL printf
lda #E.INV.ARGS
pla
sec
.9 rts
*--------------------------------------
CS.RUN.ARGS
CS.RUN.ARGS ldy #S.PS.ARGC
lda (pPs),y
beq .90
lda #1
.1 inc ZPPtr1
lda ZPPtr1
>SYSCALL ArgV
>PUSHYA
bcs .8
>STYA ZPPtr2
lda (ZPPtr2)
cmp #'-'
beq .2
>PUSHW ZPPtr2
>PUSHWI 0 Allocate
>SYSCALL RealPath
bcs .99
txa
>STA.G SRC.hFILENAME
bra .1
.8 clc
.9 rts
.2 ldy #1
lda (ZPPtr2),y
cmp #'L'
bne .3
lda #$ff
>STA.G bListAll
bra .1
.3 cmp #'T'
bne .90
inc ZPPtr1
lda ZPPtr1
>SYSCALL ArgV
bcs .90
lda ZPPtr1
>STA.G ArgDstFile
bra .1
.8 >LDA.G SRC.hFILENAME
beq .90
clc
rts
.90 lda #E.INV.ARGS
sec
.99 rts
*--------------------------------------
CS.RUN ldy #S.PS.hStdIn
lda (pPS),y
@ -328,11 +366,13 @@ CS.RUN ldy #S.PS.hStdIn
bne .8 no continue back to previous file
jsr SYM.StoreGlobal Make sure last Global flushed
bcs .9
>LDA.G ASM.PASS End of pass #2 ??
bne .1
inc
sta (pData),y
clc
rts
@ -354,7 +394,8 @@ CS.RUN ldy #S.PS.hStdIn
.9 pha
jsr OUT.PrintLineErr
jsr SYM.Dump
* jsr SYM.Dump
pla
sec
rts
@ -365,7 +406,12 @@ CS.DOEVENT sec
CS.QUIT jsr FIO.FileClose
bne CS.QUIT
jsr MAC.Quit
>LDA.G DST.hREFNUM
beq .1
>SYSCALL fclose
.1 jsr MAC.Quit
jsr SYM.Quit
@ -375,6 +421,9 @@ CS.QUIT jsr FIO.FileClose
ldy #SRC.hFILENAME
jsr .7
ldy #DST.hFILENAME
jsr .7
ldy #SRC.hLineBuf
jsr .7
@ -500,6 +549,8 @@ SRC.AM.StrBuf .BS 32
.OR 0
DS.START
bPause .BS 1
bListAll .BS 1
ArgDstFile .BS 1
SRC.hFILENAME .BS 1
SRC.hLineBuf .BS 1
@ -514,7 +565,6 @@ SRC.AMID .BS 1
DST.hFILENAME .BS 1
DST.hREFNUM .BS 1
DST.hBUFFER .BS 1
DST.hFILETYPE .BS 1
DIR.Word .BS 2

View File

@ -102,6 +102,7 @@ CMD.CD.YA >PUSHYA
cmp #S.FI.T.DIR
beq .11
lda #MLI.E.INVPATH
.19 pha
lda ZPTmpW
@ -112,37 +113,17 @@ CMD.CD.YA >PUSHYA
.11 jsr GetPtr1LenY
dey
lda (ZPPtr1),y
cmp #'/'
bne .14
lda ZPTmpW
bra CMD.SetCWDA already ends with a /
.14 iny back to /
iny at \0
iny add+1 for adding \0 after adding '/'
lda #0
>SYSCALL getmem
bcs .19
>STYA ZPPtr2
ldy #$ff
.1 iny
lda (ZPPtr1),y
sta (ZPPtr2),y
bne .1
lda #'/'
sta (ZPPtr2),y
cmp (ZPPtr1),y
beq .14
iny
sta (ZPPtr1),y
iny
lda #0
sta (ZPPtr2),y
phx
lda ZPTmpW
>SYSCALL freemem
pla
sta (ZPPtr1),y
.14 lda ZPTmpW
*--------------------------------------
CMD.SetCWDA pha
ldy #S.PS.hCWD