From 6fbac9ed993399f87cff10a08bdea99e687ae84d Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Mon, 30 Aug 2021 19:48:11 -0400 Subject: [PATCH] Merged in *DIR slot/drive (:sd) handling again --- applecorn.po | Bin 819200 -> 819200 bytes mainmem.s | 63 +++++++++++++++++++++++++++++++++++---------------- 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/applecorn.po b/applecorn.po index 106a63ba9f63624cc31573b968f03d08e7e87a2c..f104b1f807a26efac99772f6f6b6b9da5a01c4ab 100644 GIT binary patch delta 2303 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 MOSFILE2 +PREPATH LDX MOSFILE ; Length + BEQ :EXIT ; If zero length + LDA MOSFILE+1 ; 1st char of pathname + CMP #$3A ; ':' + BNE :NOTCOLN ; Not colon + CPX #$03 ; Length >= 3? + BCC :ERR ; If not + LDA MOSFILE+3 ; Drive + SEC + SBC #'1' + TAX + LDA MOSFILE+2 ; Slot + SEC + SBC #'0' + JSR DRV2PFX ; Slot/drv->pfx in MOSFILE2 + JSR DEL1CHAR ; Delete ':' from MOSFILE + JSR DEL1CHAR ; Delete slot from MOSFILE + JSR DEL1CHAR ; Delete drive from MOSFILE + LDA MOSFILE ; Is there more? + BEQ :APPEND ; Only ':sd' + CMP #$02 ; Length >= 2 + BCC :ERR ; If not + LDA MOSFILE+1 ; 1st char of filename + CMP #$2F ; '/' + BNE :ERR + JSR DEL1CHAR ; Delete '/' from MOSFILE + BRA :APPEND +:NOTCOLN JSR GETPREF ; Current pfx -> MOSFILE2 :REENTER LDA MOSFILE+1 ; First char of dirname CMP #'.' BEQ :UPDIR1 @@ -927,7 +954,7 @@ PREPATH JSR GETPREF ; Current pfx -> MOSFILE2 BEQ :CARET ; If '^' CMP #$2F ; '/' char - abs path BEQ :EXIT ; Nothing to do - BRA :PARENT + BRA :APPEND :UPDIR1 LDA MOSFILE+2 CMP #'.' ; '..' @@ -936,7 +963,7 @@ PREPATH JSR GETPREF ; Current pfx -> MOSFILE2 :CARET JSR DEL1CHAR ; Delete '^' from MOSFILE JSR PARENT ; Parent dir -> MOSFILE2 LDA MOSFILE ; Is there more? - BEQ :PARENT ; Only '^' + BEQ :APPEND ; Only '^' CMP #$02 ; Len at least two? BCC :ERR ; Nope! LDA MOSFILE+1 ; What is next char? @@ -944,7 +971,7 @@ PREPATH JSR GETPREF ; Current pfx -> MOSFILE2 BNE :ERR ; Nope! JSR DEL1CHAR ; Delete '/' from MOSFILE BRA :REENTER ; Go again! -:PARENT JSR APPMF2 ; Append MOSFILE->MOSFILE2 +:APPEND JSR APPMF2 ; Append MOSFILE->MOSFILE2 JSR COPYMF2 ; Copy back to MOSFILE :EXIT CLC RTS @@ -1019,20 +1046,12 @@ PARENT LDX MOSFILE2 ; Length of string * Convert slot/drive to prefix * Expect slot number (1..7) in A, drive (0..1) in X -* Puts prefix (or empty string) in MOSFILE -DRV2PFX -* ASL -* ASL -* ASL -* ASL -* STX :TEMP ; Gets 0SSS000D -* ORA :TEMP ; Shouldn't this be DSSS00000 ? - - CLC ; Cy=0 A=00000sss +* Puts prefix (or empty string) in MOSFILE2 +DRV2PFX CLC ; Cy=0 A=00000sss ROR A ; s 000000ss ROR A ; s s000000s ROR A ; s ss000000 - ROR A ; s sss00000 + ROR A ; 0 sss00000 CPX #1 ; d sss00000 ROR A ; 0 dsss0000 @@ -1042,16 +1061,20 @@ DRV2PFX DW ONLNPL ; Buffer set to DRVBUF2 (was $301) LDA DRVBUF2 ; was $301 ; Slot/Drive/Length AND #$0F ; Mask to get length - STA MOSFILE ; Store length TAX -:L1 CPX #$00 ; Copy -> MOSFILE + INC ; Plus '/' at each end + INC + STA MOSFILE2 ; Store length + LDA #$2F ; '/' + STA MOSFILE2+1 + STA MOSFILE2+2,X +:L1 CPX #$00 ; Copy -> MOSFILE2 BEQ :EXIT LDA DRVBUF2,X ; was $301,X - STA MOSFILE,X ; Should be able to read - DEX ; directly to MOSFILE + STA MOSFILE2+1,X + DEX BRA :L1 :EXIT RTS -* :TEMP DB $00 * Delete first char of MOSFILE DEL1CHAR LDX MOSFILE ; Length