From 9ae1da903b6b38762746ae8af7540b5a1e498a5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sat, 26 Jun 2021 22:24:25 +0200 Subject: [PATCH] CIFS, UNAME -h -v switches, KERNEL IRQ manager, bugfix & bytes saved in CP,RM,MV --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes .Floppies/A2OSX.TEST.po | Bin 819200 -> 819200 bytes BIN/CP.S.txt | 16 +- BIN/MV.S.txt | 14 +- BIN/RM.S.txt | 15 +- BIN/UNAME.S.txt | 77 ++++++--- INC/A2osX.I.txt | 10 +- INC/IO.D2.I.txt | 8 +- LIB/LIBBLKDEV.S.BB.txt | 9 +- LIB/LIBBLKDEV.S.D2.txt | 6 +- LIB/LIBCIFS.S.IO.txt | 345 +++++++++++++++++++++++++++++-------- LIB/LIBCIFS.S.txt | 104 +++++------ ProDOS.FX/ProDOS.S.XRW.txt | 7 +- SHARED/X.CPMVRM.G.txt | 3 +- SHARED/X.CPMVRM.S.txt | 208 ++++++++++++---------- SHARED/X.FILEENUM.S.txt | 131 +++++++------- SYS/KERNEL.S.IRQ.txt | 36 ++-- 17 files changed, 618 insertions(+), 371 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index b8aa34e0d11a79e89f6b613d16299290e79b9121..0c794e62af58717fc26c3f0727481e0fc66d12c0 100644 GIT binary patch delta 55444 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 delta 53090 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 diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index 3845221acfe4c1397129126b322111fc82b9ea76..a2db9cb66063a708a39b0eb5eaa2f17a1a42ce3b 100644 GIT binary patch delta 24851 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 t6S_HntecI>`b}h4SDX0!Nd>>bs_6ytLDYA pData + jsr CS.RUN.PRINTYA .1 bit bMachineType bpl .2 @@ -204,38 +207,61 @@ CS.RUN.PRINT bit bHostName sec rts *-------------------------------------- +CS.RUN.GetHostName + >LDYA L.ETCHOSTNAME + bra CS.RUN.GetFile + CS.RUN.GetBuild >LDYA L.ETCVERSION - >SYSCALL LoadTxtFile + +CS.RUN.GetFile stz hFILE + + >PUSHYA + >PUSHBI O.RDONLY + >PUSHBI 0 + + sta (pData) + + >PUSHWZ + >SYSCALL FOpen bcs .9 - stx hBuf - txa - >SYSCALL GetMemPtr - >STYA BufPtr + sta hFILE + >LEA.G FGetSBuf + >STYA ZPPtr1 + +.1 >PUSHB hFILE + >PUSHW ZPPtr1 + >PUSHWI 64 + >SYSCALL FGetS + bcs .8 + + lda (ZPPtr1) + beq .1 + + cmp #'#' + beq .1 + ldy #$ff -.1 iny - lda (BufPtr),y - beq .2 - - cmp #C.CR - beq .2 - - cpy #64 - beq .2 - +.2 iny + lda (ZPPtr1),y sta (pData),y - bra .1 + bne .2 + +.8 clc -.2 lda #0 - sta (pData),y +.9 php + pha - lda hBuf - >SYSCALL FreeMem -* clc + lda hFILE + beq .90 -.9 rts + >SYSCALL FClose + +.90 pla + plp + rts *-------------------------------------- CS.RUN.PRINTYA >PUSHYA >PUSHBI 0 @@ -279,7 +305,7 @@ CS.RUN.CheckOpt ldy #1 *-------------------------------------- CS.END *-------------------------------------- -OptionList .AS "HhMmCcSsAaVvKkZz" +OptionList .AS "HhMmCcSsAaVvBbKkZz" OptionVars .DA #bHostName,#bHostName .DA #bMachineType,#bMachineType .DA #bCPUType,#bCPUType @@ -321,6 +347,7 @@ KERNEL.PREEMPT .AZ "Preemptive_Mode" .DUMMY .OR 0 DS.START .BS 65 +FGetSBuf .BS 65 DS.END .ED *-------------------------------------- MAN diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 10d7367e..df1024cb 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -1,7 +1,7 @@ NEW AUTO 3,1 *-------------------------------------- -K.VER .EQ $5E00 94.0 +K.VER .EQ $5E00 94.0 K.ENV.SIZE .EQ 256 *-------------------------------------- K.MEM.ALIGN .EQ 16 @@ -176,7 +176,7 @@ AF.INET .EQ 2 AF.APPLETALK .EQ 4 *-------------------------------------- O.RDONLY .EQ %00000001 -O.WRONLY .EQ %00000010 +O.WRONLY .EQ %00000010 O.RDWR .EQ %00000011 O.TRUNC .EQ %00000100 O.APPEND .EQ %00001000 @@ -481,7 +481,7 @@ S.FD.PFT .EQ 1 S.FD.REG.REF .EQ 2 S.FD.REG.IOBUF .EQ 3 * -S.FD.REG .EQ 4 +S.FD.REG .EQ 16 *-------------------------------------- S.FD.DIR.EL .EQ 4 S.FD.DIR.EPB .EQ 5 @@ -491,7 +491,7 @@ S.FD.DIR.UID .EQ 10 S.FD.DIR.GID .EQ 12 S.FD.DIR.MODE .EQ 14 * -S.FD.DIR .EQ 16 +S.FD.DIR .EQ 16 *-------------------------------------- S.FD.DEV.BUSID .EQ 2 S.FD.DEV.DEVID .EQ 3 @@ -610,7 +610,7 @@ S.TIME.WDAY .EQ 7 1..7 * S.TIME .EQ 8 *-------------------------------------- -* S.STAT +* S.STAT *-------------------------------------- S.STAT.MODE .EQ 0 S.STAT.MODE.XO .EQ $0001 diff --git a/INC/IO.D2.I.txt b/INC/IO.D2.I.txt index 476f5f0a..5d8399fe 100644 --- a/INC/IO.D2.I.txt +++ b/INC/IO.D2.I.txt @@ -1,10 +1,10 @@ NEW AUTO 3,1 *-------------------------------------- -IO.D2.SeekTimeR .EQ 58 LIBBLKDEV Recalibration -IO.D2.SeekTimeF .EQ 58 LIBBLKDEV Track Formatter -IO.D2.SeekTimeB .EQ 28 LIBBLKDEV Boot Block -IO.D2.SeekTimeP .EQ 28 ProDOS.FX initial +IO.D2.SeekTimeR .EQ 45 LIBBLKDEV Recalibration +IO.D2.SeekTimeF .EQ 55 LIBBLKDEV Track Formatter +IO.D2.SeekTimeB .EQ 55 LIBBLKDEV Boot Block +IO.D2.SeekTimeP .EQ 40 ProDOS.FX initial IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128 *-------------------------------------- IO.D2.Ph0Off .EQ $C080 diff --git a/LIB/LIBBLKDEV.S.BB.txt b/LIB/LIBBLKDEV.S.BB.txt index efb12b19..2f50971a 100644 --- a/LIB/LIBBLKDEV.S.BB.txt +++ b/LIB/LIBBLKDEV.S.BB.txt @@ -395,13 +395,12 @@ BB.Seek lda BB.HdrTrk get track we're on lda #0 jsr BB.Wait100usecA - lda IO.D2.Ph0Off,y - - bcc .90 + bcc .10 lda IO.D2.Ph0Off,x - -.90 + nop + nop +.10 lda IO.D2.Ph0Off,y *-------------------------------------- BB.Read ldx BB.Slotn0 diff --git a/LIB/LIBBLKDEV.S.D2.txt b/LIB/LIBBLKDEV.S.D2.txt index c77fd0ae..391301cd 100644 --- a/LIB/LIBBLKDEV.S.D2.txt +++ b/LIB/LIBBLKDEV.S.D2.txt @@ -136,13 +136,13 @@ D2.MoveHead.SEI lda D2.CurrentQTrack jsr D2.Wait25600usec - lda IO.D2.Ph0Off,y - bcc .90 lda IO.D2.Ph0Off,x + nop + nop +.90 lda IO.D2.Ph0Off,y -.90 rts *-------------------------------------- D2.SeekPhOnY and #6 diff --git a/LIB/LIBCIFS.S.IO.txt b/LIB/LIBCIFS.S.IO.txt index 87356ebb..5c1a1e32 100644 --- a/LIB/LIBCIFS.S.IO.txt +++ b/LIB/LIBCIFS.S.IO.txt @@ -20,7 +20,7 @@ CIFS.Stat >STYA pPath resolved path jsr GetCTX - jsr MakeTrans2Req + jsr RequestT2SetupX ldx #0 @@ -49,6 +49,8 @@ CIFS2.Stat jsr ReadSocket jsr GetRespData jsr CheckSMBStatus + + lda #MLI.E.INVPATH Return this for stat() match ProDOS Behavior bcs .90 jsr GetRespDataPtr1 @@ -72,9 +74,11 @@ CIFS2.Stat jsr ReadSocket *-------------------------------------- CIFS.MKDir >STYA pPath resolved path + jsr ClearSocket + jsr GetCtx - jsr MakeTrans2Req + jsr RequestT2SetupX ldx #0 @@ -172,7 +176,7 @@ CIFS.ReadDir jsr GetPFD ora (pFD),y bne CIFS.ReadDir.Next - jsr MakeTrans2Req + jsr RequestT2SetupX ldx #0 @@ -186,7 +190,7 @@ CIFS.ReadDir jsr GetPFD bra CIFS.ReadDir.Send CIFS.ReadDir.Next - jsr MakeTrans2Req + jsr RequestT2SetupX ldx #0 @@ -500,16 +504,20 @@ CIFS.FOpen >STYA pPath resolved path ldy #3 fopen flags lda (pStack),y - bpl .3 O.CREATE + bit #O.WRONLY + beq .8 + + bit #O.CREATE + bne .3 ldx #3 FILE_OPEN_IF .3 bit #O.APPEND - bmi .4 + bne .8 ldx #5 FILE_OVERWRITE_IF -.4 txa +.8 txa ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 CreateDisposition sta (ZPReqPtr),y @@ -529,19 +537,9 @@ CIFS2.FOpen jsr ReadSocket jsr CheckSMBStatus bcs .90 - >LDYAI S.FD.REG - >SYSCALL2 GetMem + jsr CIFS.NewFD bcs .91 - - >STYA pFD - - lda #S.FD.T.REG - sta (pFD) - - lda hHandler - ldy #S.FD.PFT - sta (pFD),y - + ldy #S.NETBIOS+S.SMB.H+6 FileID lda (ZPRespPtr),y pha @@ -553,8 +551,35 @@ CIFS2.FOpen jsr ReadSocket dey pla sta (pFD),y + + ldy #3 fopen flags + lda (pStack),y + bit #O.APPEND + beq .3 - ldy #4 path + ldy #S.NETBIOS+S.SMB.H+56+3 EOF + ldx #4 + +.1 lda (ZPRespPtr),y + pha + dey + dex + bne .1 + + ldx #4 + ldy #S.FD.REG.REF+2 + +.2 pla + sta (pFD),y + iny + dex + bne .2 + + bra .8 + +.3 jsr CIFS.Seek0 + +.8 ldy #4 path lda (pStack),y >PUSHA @@ -562,11 +587,10 @@ CIFS2.FOpen jsr ReadSocket >PUSHA >PUSHWZ mod - txa hFD - >PUSHA + >PUSHB hFD >SYSCALL2 mknod -.91 jsr Exit.OK +.91 jsr Exit.KO bra .90 .9 jsr Exit.NODATA @@ -656,19 +680,24 @@ CIFS.FRead ldy #4 hNod jsr ReqSetupPtr2 - ldy #S.FD.REG.REF - lda (pFD),y - pha - iny - lda (pFD),y - - ldy #S.NETBIOS+S.SMB.H+6 FileID - sta (ZPReqPtr),y - pla - dey - sta (ZPReqPtr),y - + jsr CIFS.RWGetFidOfs + ldy #1 DataLen HI + lda (pStack),y + bne .2 + + lda #0 + ldx #1 256 bytes to read + bra .3 + +.2 lda (pStack) DataLen LO + ldx #0 + +.3 ldy #S.NETBIOS+S.SMB.H+11 MaxCountOfBytesToReturn + sta (ZPReqPtr),y + iny + txa + sta (ZPReqPtr),y jsr SetReqLen @@ -687,18 +716,84 @@ CIFS2.FRead jsr ReadSocket jsr CheckSMBStatus bcs .90 - lda hResp - >SYSCALL2 FreeMem + ldy #S.NETBIOS+S.SMB.H+10 + lda (ZPRespPtr),y + iny + ora (ZPRespPtr),y + bne .10 + + jsr Exit.OK + + lda #MLI.E.EOF + sec + bra .90 - ldy #1 +.10 ldy #S.NETBIOS+S.SMB.H+13 DataOffset LO + lda (ZPRespPtr),y + inc + inc +* clc + adc ZPRespPtr + sta ZPPtr1 + + lda #0 + adc ZPRespPtr+1 + sta ZPPtr1+1 + + ldy #3 DataPtr HI lda (pStack),y - ora (pStack) - clc - beq .90 + sta ZPPtr2+1 - stz CIFS.Status Back to CIFS.FRead for next chunk + dey DataPtr LO + lda (pStack),y + sta ZPPtr2 - jmp Sleep2 + ldy #S.NETBIOS+S.SMB.H+11 DataLength LO + lda (ZPRespPtr),y + tax + + jsr CIFS.CopyX + + ldy #S.NETBIOS+S.SMB.H+11 + jsr CIFS2.RWSetOfsY + + ldy #S.NETBIOS+S.SMB.H+11 DataLength HI + lda (ZPRespPtr),y + beq .2 less than 256 + + inc CIFS.Cnt+1 + + ldy #1 DataLen HI + lda (pStack),y + dec + sta (pStack),y + + ldy #3 DataPtr HI + lda (pStack),y + inc + sta (pStack),y + bra .7 + +.2 dey DataLength LO + lda (ZPRespPtr),y + + sta CIFS.Cnt + + lda #0 + sta (pStack) DataLen LO + +.7 jsr Exit.OK + + ldy #1 DataLen HI + lda (pStack),y + ora (pStack) DataLen LO + bne .8 + + >LDYA CIFS.Cnt + + bra .90 + +.8 jmp Sleep2 Back to CIFS.FRead for next chunk .9 jsr Exit.NODATA beq .99 @@ -726,18 +821,8 @@ CIFS.FWrite ldy #4 hNod bne .1 jsr ReqSetupPtr2 - - ldy #S.FD.REG.REF - lda (pFD),y - pha - iny - lda (pFD),y - - ldy #S.NETBIOS+S.SMB.H+6 FileID - sta (ZPReqPtr),y - pla - dey - sta (ZPReqPtr),y + + jsr CIFS.RWGetFidOfs ldy #3 DataPtr HI lda (pStack),y @@ -762,14 +847,11 @@ CIFS.FWrite ldy #4 hNod .6 pha ldy #S.NETBIOS+S.SMB.H+21 DataLength - clc - adc #2 sta (ZPReqPtr),y iny txa - adc #0 sta (ZPReqPtr),y pla @@ -791,15 +873,10 @@ CIFS.FWrite ldy #4 hNod iny sta (ZPReqPtr),y - ldy #0 plx -.70 lda (ZPPtr1),y - sta (ZPPtr2),y - iny - dex - bne .70 - + jsr CIFS.CopyX + jsr SetReqLen jsr WriteSocket @@ -834,18 +911,31 @@ CIFS2.FWrite jsr ReadSocket jsr CheckSMBStatus bcs .90 - lda hResp - >SYSCALL2 FreeMem + ldy #S.NETBIOS+S.SMB.H+5 Count LO + jsr CIFS2.RWSetOfsY - ldy #1 + ldy #S.NETBIOS+S.SMB.H+5 Count LO + lda (ZPRespPtr),y + bne .1 + + inc CIFS.Cnt+1 + bra .7 + +.1 sta CIFS.Cnt + +.7 jsr Exit.OK + + ldy #1 DataLen HI lda (pStack),y - ora (pStack) + ora (pStack) DataLen LO + + bne .8 + + >LDYA CIFS.Cnt clc - beq .90 + bra .90 - stz CIFS.Status Back to CIFS.FWrite for next chunk - - jmp Sleep2 +.8 jmp Sleep2 .9 jsr Exit.NODATA beq .99 @@ -870,7 +960,7 @@ CIFS.Remove >STYA pPath resolved path jsr ClearSocket jsr GetCTX - + ldx #S.SMB.H.CMD.DELETE jsr RequestSetupX @@ -955,6 +1045,15 @@ CIFS.Rename >STYA pPath resolved src path ldy #1 lda (pStack),y sta pPath+1 + +.2 inc pPath skip /mount + bne .3 + + inc pPath+1 + +.3 lda (pPath) + cmp #'/' + bne .2 lda #$04 BufferFormat jsr PutBytePtr2 @@ -991,6 +1090,104 @@ CIFS2.Rename jsr ReadSocket .99 >RET 4 *-------------------------------------- +CIFS.NewFD >LDYAI S.FD.REG + >SYSCALL2 GetMem + bcs .9 + + >STYA pFD + stx hFD + + lda #S.FD.T.REG + sta (pFD) + + lda hHandler + ldy #S.FD.PFT + sta (pFD),y + +* clc + +.9 rts +*-------------------------------------- +CIFS.RWGetFidOfs + ldx #6 + ldy #S.FD.REG.REF + +.1 lda (pFD),y + pha + iny + dex + bne .1 + + ldx #6 + ldy #S.NETBIOS+S.SMB.H+5+5 + +.2 pla + sta (ZPReqPtr),y + dey + dex + bne .2 + + rts +*-------------------------------------- +CIFS2.RWSetOfsY phy + + ldy #4 hNod + lda (pStack),y + + jsr GetPFD + + ply Count LO + phy + lda (ZPRespPtr),y + + ldy #S.FD.REG.REF+2 + clc + adc (pFD),y + sta (pFD),y + + ply + iny Count HI + lda (ZPRespPtr),y + + ldy #S.FD.REG.REF+3 + adc (pFD),y + sta (pFD),y + bcc .8 + + iny + lda (pFD),y + inc + sta (pFD),y + bne .8 + + iny + lda (pFD),y + inc + sta (pFD),y + +.8 rts +*-------------------------------------- +CIFS.CopyX ldy #0 + +.1 lda (ZPPtr1),y + sta (ZPPtr2),y + iny + dex + bne .1 + + rts +*-------------------------------------- +CIFS.Seek0 ldx #4 + ldy #S.FD.REG.REF+2 + lda #0 + +.1 sta (pFD),y + iny + dex + bne .1 + + rts +*-------------------------------------- MAN SAVE usr/src/lib/libcifs.io.s LOAD usr/src/lib/libcifs.s diff --git a/LIB/LIBCIFS.S.txt b/LIB/LIBCIFS.S.txt index 0814c8cc..b1098aa6 100644 --- a/LIB/LIBCIFS.S.txt +++ b/LIB/LIBCIFS.S.txt @@ -575,7 +575,12 @@ GetCTX lda MountTable+2 >STYA ZPCtxPtr rts *-------------------------------------- -MakeTrans2Req ldx #S.SMB.H.CMD.TRANS2 +GetSMBContext lda (pStack),y + >SYSCALL2 GetMemPtr + >STYA ZPCtxPtr + rts +*-------------------------------------- +RequestT2SetupX ldx #S.SMB.H.CMD.TRANS2 jsr RequestSetupX ldx #0 @@ -589,11 +594,6 @@ MakeTrans2Req ldx #S.SMB.H.CMD.TRANS2 rts *-------------------------------------- -GetSMBContext lda (pStack),y - >SYSCALL2 GetMemPtr - >STYA ZPCtxPtr - rts -*-------------------------------------- RequestSetupX phx lda hReq @@ -617,7 +617,10 @@ RequestSetupX phx *-------------------------------------- ReqSetupPtr2 sty ByteCountOfs + lda #0 + sta (ZPReqPtr),y Reset ByteCount iny + sta (ZPReqPtr),y iny +2 for ByteCount ReqT2SetupPtr2 sty ZPReqLen @@ -811,13 +814,13 @@ Exit.OK lda hResp * clc rts *-------------------------------------- -Exit.KO pha +Exit.KO php + pha lda hResp >SYSCALL2 FreeMem pla - + plp stz CIFS.Status - sec rts *-------------------------------------- Exit.NODATA cmp #E.NODATA @@ -849,47 +852,6 @@ GetRespData sta hResp sta ZPRespPtr+1 rts *-------------------------------------- -CheckSMBStatus ldy #S.NETBIOS+S.SMB.H.STATUS - lda (ZPRespPtr),y - clc - beq FreeRespData.RTS - - stz CIFS.Status - - cmp #2 SRV - bcs .9 - - iny - iny - - lda (ZPRespPtr),y ERR CODE - ldx #MLIERR01-SMBERR01 - -.1 cmp SMBERR01-1,x - beq .2 - - dex - bne .1 - - sec - bra .9 - -.2 lda MLIERR01-1,x - sec - bra FreeRespData - -.9 lda #MLI.E.IO -*-------------------------------------- -FreeRespData php - pha - lda hResp - >SYSCALL2 FreeMem - pla - plp - -FreeRespData.RTS - rts -*-------------------------------------- GetRespDataPtr1 ldy #S.NETBIOS+S.SMB.H+15 Data Offset lda (ZPRespPtr),y clc @@ -912,6 +874,44 @@ GetRespDataPtr1 ldy #S.NETBIOS+S.SMB.H+15 Data Offset rts *-------------------------------------- +CheckSMBStatus ldy #S.NETBIOS+S.SMB.H.STATUS + lda (ZPRespPtr),y + clc + beq FreeRespData.RTS + + stz CIFS.Status + + cmp #2 SRV + bcs .9 + + iny + iny + + lda (ZPRespPtr),y ERR CODE + ldx #MLIERR01-SMBERR01 + +.1 cmp SMBERR01-1,x + beq .2 CS + + dex + bne .1 + +.9 lda #MLI.E.IO + sec + bra FreeRespData + +.2 lda MLIERR01-1,x +*-------------------------------------- +FreeRespData php + pha + lda hResp + >SYSCALL2 FreeMem + pla + plp + +FreeRespData.RTS + rts +*-------------------------------------- FileInfo2StatBuf phx @@ -1181,7 +1181,7 @@ SMB.ComRead.H .DA #10 WORD COUNT .HS FF000000 NO MORE CMD .BS 2 FID .BS 4 Offset - .HS 0001 MaxCountOfBytesToReturn + .BS 2 MaxCountOfBytesToReturn .HS 0000 MinCountOfBytesToReturn .HS 00000000 Timeout .HS 0000 Remaining @@ -1268,11 +1268,13 @@ hReq .BS 1 CIFS.Status .BS 1 CIFS.PID .BS 1 CIFS.Retries .BS 1 +CIFS.Cnt .BS 2 *-------------------------------------- MountTable .BS 2 pMountPoint .BS 1 hSMBContext .BS 1 hSocket *-------------------------------------- +hFD .BS 1 hFILE .BS 1 StatBuf .BS S.STAT *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index 70b1d39e..a39c5b37 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -836,13 +836,14 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end jsr XRW.Wait25600usec - lda IO.D2.Ph0Off,y - bcc .90 lda IO.D2.Ph0Off,x + nop + clc Exit wit CC (recalibrate) + +.90 lda IO.D2.Ph0Off,y -.90 clc Exit wit CC (recalibrate) rts *-------------------------------------- XRW.SeekPhOnY and #6 diff --git a/SHARED/X.CPMVRM.G.txt b/SHARED/X.CPMVRM.G.txt index ccdf73f1..0388977b 100644 --- a/SHARED/X.CPMVRM.G.txt +++ b/SHARED/X.CPMVRM.G.txt @@ -17,11 +17,10 @@ hDstFile .BS 1 bCopy .BS 1 hCopyBuf .BS 1 CopyRC .BS 1 - .FIN + .DO X.DELETE.SOURCE=1 hToDelete .BS 1 - .FIN *-------------------------------------- MAN diff --git a/SHARED/X.CPMVRM.S.txt b/SHARED/X.CPMVRM.S.txt index a7cabeed..93258726 100644 --- a/SHARED/X.CPMVRM.S.txt +++ b/SHARED/X.CPMVRM.S.txt @@ -11,6 +11,13 @@ ZPPtr1 .BS 2 ZPPtr2 .BS 2 ZPFileName .BS 2 ZPFileStat .BS 2 + +bContinue .BS 1 +bRecurse .BS 1 +bQuiet .BS 1 + .DO X.COPY.TO.DEST=1 +bNoConfirm .BS 1 + .FIN ZS.END .ED *-------------------------------------- * File Header (16 Bytes) @@ -54,14 +61,16 @@ CS.INIT lda (ZPPtr1) cmp #'-' bne .4 + ldy #1 lda (ZPPtr1),y - ldx #OptionVars-OptionList-1 + ldy #OptionVars-OptionList-1 -.2 cmp OptionList,x +.2 cmp OptionList,y beq .3 - dex + + dey bpl .2 .99 >PUSHW L.MSG.USAGE @@ -71,9 +80,9 @@ CS.INIT sec rts -.3 ldy OptionVars,x - lda #$80 - sta (pData),y +.3 ldx OptionVars,y +* sec + ror $0,x bra .1 .4 >LDA.G index @@ -87,14 +96,17 @@ CS.INIT >LDYA ZPPtr1 jsr InitSrcDirYA bcc .1 success, scan for any other args + .9 rts .DO X.COPY.TO.DEST=1 .5 >LDA.G hDstBasePath bne .99 we already have a second arg....error! + >LDYA ZPPtr1 jsr InitDstDirYA bcc .1 success, scan for any other args + rts .FIN @@ -104,6 +116,7 @@ CS.INIT .DO X.COPY.TO.DEST=1 >LDA.G hDstBasePath bne .8 we also have a Dst folder + ldy #S.PS.hCWD no dst folder, use actual prefix lda (pPS),y >SYSCALL GetMemPtr @@ -114,6 +127,7 @@ CS.INIT .8 >LDYAI 256 >SYSCALL GetMem bcs .9 + txa >STA.G hSrcFullPath @@ -121,6 +135,7 @@ CS.INIT >LDYAI 256 >SYSCALL GetMem bcs .9 + txa >STA.G hDstFullPath @@ -139,6 +154,7 @@ CS.RUN ldy #S.PS.hStdIn bcs CS.INIT.RTS I/O error cmp #$03 Ctrl-C bne .10 + sec rts Abort.... @@ -170,9 +186,11 @@ CS.RUN ldy #S.PS.hStdIn .DO X.DELETE.SOURCE=0 beq .20 no copy error + sec jsr CS.RUN.CheckErr we have an error.... bcs .9 + jmp CS.RUN.NEXT .20 jsr CS.RUN.CheckErr Success!! @@ -180,9 +198,11 @@ CS.RUN ldy #S.PS.hStdIn jmp CS.RUN.NEXT .ELSE beq .2 + sec jsr CS.RUN.CheckErr we have an error.... bcc .21 + rts .21 >STZ.G hToDelete Cancel delete if any @@ -205,8 +225,10 @@ CS.RUN ldy #S.PS.hStdIn jsr CS.RUN.CheckErr Success!!! jsr CS.RUN.IncCount jmp CS.RUN.NEXT + .22 jsr CS.RUN.CheckErr bcs .9 + jmp CS.RUN.NEXT .FIN *-------------------------------------- @@ -226,8 +248,9 @@ CS.RUN ldy #S.PS.hStdIn .5 cmp /S.STAT.MODE.DIR DIR ? bne .7 - >LDA.G bRecurse + bit bRecurse bpl CS.RUN.NEXT + lda (ZPFileName) cmp #'.' beq CS.RUN.NEXT Skip "." & ".." @@ -246,6 +269,7 @@ CS.RUN.NEXT jsr GetNextEntry *-------------------------------------- CS.RUN.LEAVE jsr LeaveSubDir exit this sub dir.... bcs .99 base, we are done, exit + jsr BasePath.. .DO X.DELETE.SOURCE=1 * .DO X.COPY.TO.DEST=0 @@ -265,8 +289,7 @@ CS.RUN.LEAVE jsr LeaveSubDir exit this sub dir.... jmp CS.RUN.NEXT -.99 ldy #bQuiet - lda (pData),y +.99 bit bQuiet bmi .91 >PUSHW L.MSG.DONE @@ -288,23 +311,19 @@ CS.RUN.DIR .DO X.COPY.TO.DEST=1 jsr CS.RUN.DIR.MSG bcs CS.RUN.LEAVE.RTS - ldy #hDstFullPath - jsr CS.RUN.GetPathY - >PUSHYA - - >PUSHW L.STAT - >SYSCALL Stat + jsr CS.RUN.StatDst bcs .3 File Not exists...go create - ldy #bNoConfirm - lda (pData),y + bit bNoConfirm bmi .21 no prompt, nothing to create, enter subdir jsr CS.RUN.OVERWRITE.MSG bcs CS.RUN.DIR.RTS + .1 >SLEEP >SYSCALL GetChar bcs .1 + cmp #3 beq .99 abort @@ -312,21 +331,23 @@ CS.RUN.DIR .DO X.COPY.TO.DEST=1 cmp #'N' bne .2 + jmp CS.RUN.CR.NEXT no overwrite, nothing to do, no recurse .2 cmp #'Y' beq .21 no create, but recurse + cmp #'A' bne .1 - ldy #bNoConfirm - lda #$ff - sta (pData),y + +* sec + ror bNoConfirm + .21 clc lda #0 bra .4 .3 ldy #hDstFullPath - jsr CS.RUN.GetPathY - >PUSHYA + jsr CS.RUN.PushPathY ldy #S.STAT.MODE+1 lda (ZPFileStat),y >PUSHA @@ -348,20 +369,16 @@ CS.RUN.DIR .DO X.COPY.TO.DEST=1 sec CS.RUN.DIR.RTS rts *-------------------------------------- -CS.RUN.REG jsr CS.RUN.REG.MSG +CS.RUN.REG ldx #2 + jsr CS.RUN.REG.MSG bcs CS.RUN.DIR.RTS .DO X.COPY.TO.DEST=1 - ldy #hDstFullPath - jsr CS.RUN.GetPathY - >PUSHYA - >PUSHW L.STAT - >SYSCALL Stat + jsr CS.RUN.StatDst bcs .2 File Not exists...go create - ldy #bNoConfirm - lda (pData),y - bmi .2 no prompt, ovverwrite + bit bNoConfirm + bmi .2 no prompt, overwrite jsr CS.RUN.OVERWRITE.MSG bcs .9 @@ -369,6 +386,7 @@ CS.RUN.REG jsr CS.RUN.REG.MSG .1 >SLEEP >SYSCALL GetChar bcs .1 + cmp #3 beq .99 abort @@ -376,24 +394,27 @@ CS.RUN.REG jsr CS.RUN.REG.MSG cmp #'N' bne .11 + jmp CS.RUN.CR.NEXT no overwrite exit + .90 rts + .11 cmp #'Y' beq .12 copy + cmp #'A' bne .1 - ldy #bNoConfirm - lda #$ff - sta (pData),y + +* sec + ror bNoConfirm + .12 jsr GetEntry get back current entry corrupted by SLEEP + .2 .DO X.DELETE.SOURCE=1 mv file, check if srcbase=dstbase ldy #hSrcBasePath - jsr CS.RUN.GetPathY - - >PUSHYA + jsr CS.RUN.PushPathY ldy #hDstBasePath - jsr CS.RUN.GetPathY - >PUSHYA + jsr CS.RUN.PushPathY >SYSCALL StrCaseCmp bcs .3 not same dir, go copy/delete @@ -420,36 +441,27 @@ CS.RUN.REG jsr CS.RUN.REG.MSG ldy #hToDelete sta (pData),y .FIN + clc .9 rts -.99 ldy #RC - lda (pData),y get global RC in case of bContinue +.99 >LDA.G RC get global RC in case of bContinue sec rts *-------------------------------------- -CS.RUN.DIR.MSG sec - .HS 90 bcc opcode -CS.RUN.REG.MSG clc +CS.RUN.DIR.MSG ldx #0 - >LDA.G bQuiet +CS.RUN.REG.MSG bit bQuiet bmi .8 - bcc .1 - >LDYA L.MSG.DIR - bcs .2 - -.1 >LDYA L.MSG.REG + >PUSHW L.MSG.DIR,x -.2 >PUSHYA ldy #hSrcFullPath - jsr CS.RUN.GetPathY - >PUSHYA + jsr CS.RUN.PushPathY .DO X.COPY.TO.DEST=1 ldy #hDstFullPath - jsr CS.RUN.GetPathY - >PUSHYA + jsr CS.RUN.PushPathY >PUSHBI 4 .ELSE @@ -465,14 +477,14 @@ CS.RUN.REG.MSG clc *-------------------------------------- .DO X.COPY.TO.DEST=1 CS.RUN.OVERWRITE.MSG - >LDA.G bQuiet + bit bQuiet bmi .1 + jsr CS.RUN.CR .1 >PUSHW L.MSG.OVERWRITE ldy #hDstFullPath - jsr CS.RUN.GetPathY - >PUSHYA + jsr CS.RUN.PushPathY >PUSHBI 2 >SYSCALL PrintF rts @@ -486,14 +498,14 @@ CS.RUN.CR >PUSHW L.MSG.CRLF .DO X.COPY.TO.DEST=1 .DO X.DELETE.SOURCE=1 CS.RUN.Rename ldy #hSrcFullPath - jsr CS.RUN.GetPathY - >PUSHYA + jsr CS.RUN.PushPathY ldy #hDstFullPath - jsr CS.RUN.GetPathY - >PUSHYA + jsr CS.RUN.PushPathY >SYSCALL Rename bcs .9 + jsr CS.RUN.IncCount + .9 rts .FIN .FIN @@ -523,6 +535,7 @@ CS.RUN.CopyStart ldy #hDstFullPath lda #O.WRONLY+O.CREATE jsr CS.RUN.Open + .9 bcs CS.RUN.CopyEnd >STA.G hDstFile @@ -555,8 +568,7 @@ CS.RUN.Copy >PUSHB.G hSrcFile >SYSCALL FWrite bcs .9 - ldy #bQuiet - lda (pData),y + bit bQuiet bmi .8 lda #'.' @@ -592,8 +604,7 @@ CS.RUN.CopyEnd php .FIN *-------------------------------------- CS.RUN.Open pha Save open mode - jsr CS.RUN.GetPathY - >PUSHYA + jsr CS.RUN.PushPathY pla >PUSHA @@ -611,7 +622,7 @@ CS.RUN.Open pha Save open mode *-------------------------------------- CS.RUN.CheckErr bcs .1 - >LDA.G bQuiet + bit bQuiet bmi .8 >LDYA L.MSG.OK @@ -626,7 +637,7 @@ CS.RUN.CheckErr bcs .1 >PUSHBI 1 >SYSCALL PrintF - >LDA.G bContinue + lda bContinue eor #$80 asl pla @@ -634,38 +645,27 @@ CS.RUN.CheckErr bcs .1 *-------------------------------------- CS.RUN.BuildFilePath ldy #hSrcFullPath - jsr CS.RUN.GetPathY - >STYA ZPPtr1 - - >PUSHYA - + jsr CS.RUN.PushPathY ldy #hSrcBasePath - jsr CS.RUN.GetPathY - >PUSHYA - + jsr CS.RUN.PushPathY >SYSCALL StrCpy - >PUSHW ZPPtr1 + ldy #hSrcFullPath + jsr CS.RUN.PushPathY >PUSHW ZPFileName >SYSCALL StrCat .DO X.COPY.TO.DEST=1 ldy #hDstFullPath - jsr CS.RUN.GetPathY - >STYA ZPPtr1 - - >PUSHYA - + jsr CS.RUN.PushPathY ldy #hDstBasePath - jsr CS.RUN.GetPathY - >PUSHYA - + jsr CS.RUN.PushPathY >SYSCALL StrCpy - >PUSHW ZPPtr1 + ldy #hDstFullPath + jsr CS.RUN.PushPathY - ldy #hDstFileName - lda (pData),y + >LDA.G hDstFileName beq .1 >SYSCALL GetMemPtr @@ -678,18 +678,43 @@ CS.RUN.BuildFilePath .FIN rts *-------------------------------------- -CS.RUN.GetPathY lda (pData),y - >SYSCALL GetMemPtr + .DO X.COPY.TO.DEST=1 + +CS.RUN.StatDst ldy #hDstFullPath + jsr CS.RUN.PushPathY + >PUSHW L.STAT + >SYSCALL Stat rts + + .FIN +*-------------------------------------- +CS.RUN.GetPathY sec + .HS 90 BCC +CS.RUN.PushPathY + clc + php + + lda (pData),y + >SYSCALL GetMemPtr + + plp + bcs .8 + + >PUSHYA + +.8 rts *-------------------------------------- CS.RUN.IncCount >INCW.G Count rts *-------------------------------------- CS.RUN.ToUpper cmp #'a' bcc .8 + cmp #'z'+1 bcs .8 + eor #$20 + .8 rts *-------------------------------------- CS.DOEVENT sec @@ -715,6 +740,9 @@ CS.QUIT jsr LeaveSubDir jsr .7 ldy #hFilter + jsr .7 + + ldy #hExclude .7 lda (pData),y beq .9 diff --git a/SHARED/X.FILEENUM.S.txt b/SHARED/X.FILEENUM.S.txt index baa211af..647d6191 100644 --- a/SHARED/X.FILEENUM.S.txt +++ b/SHARED/X.FILEENUM.S.txt @@ -1,16 +1,17 @@ NEW AUTO 3,1 - .LIST OFF + .LIST OFF *-------------------------------------- X.MAX.RECURSE .EQ 8 *-------------------------------------- * Uses: (pData) +* Index .BS 1 * hDIRs .BS X.MAX.RECURSE+1 * hDIRENTs .BS X.MAX.RECURSE+1 -* Index .BS 1 +* oDIRENTs .BS X.MAX.RECURSE*2 +* STAT .BS S.STAT * hSrcBasePath .BS 1 * hDstBasePath .BS 1 (optional) -* STAT .BS S.STAT * hFilter .BS 1 * hExclude .BS 1 *-------------------------------------- @@ -32,9 +33,9 @@ ExcludeMatch sec tay lda (pData),y plp - + tax - + beq FilterMatch.RTS No filter....exit with CS excluded >SYSCALL GetMemPtr @@ -44,65 +45,65 @@ ExcludeMatch sec lda (ZPFileStat),y tax if 0, Regular ProDOS.... bne .10 - + >LDYA ZPPtr2 ... so CI compare >SYSCALL StrUpr - + .10 lda (ZPPtr2) Get first pattern byte beq .8 Match always if empty ldy #0 bra .2 -.1 jsr FilterMatch.NextPtr2 get next pattern char +.1 jsr FilterMatch.NextPtr2 get next pattern char beq .41 end of pattern... -.2 cmp #'*' +.2 cmp #'*' beq .5 - -.3 lda (ZPFileName),y we must match ? or regular char, check if at end of string - beq .9 no char left, exit with error - - lda (ZPPtr2) get back pattern char - cmp #'?' - beq .4 no need to compare, any char will match - jsr FilterMatch.CmpPtr2CharPtr1Y Regular Char, compare with string at Y - bne .9 no match, exit +.3 lda (ZPFileName),y we must match ? or regular char, check if at end of string + beq .9 no char left, exit with error -.4 iny advance to next char to compare - bra .1 continue if remaining char in pattern + lda (ZPPtr2) get back pattern char + cmp #'?' + beq .4 no need to compare, any char will match -.41 lda (ZPFileName),y end of pattern, but end of string ? - beq .8 yes, string matched entirely -* no, remaining char in string, no match -.9 sec - rts + jsr FilterMatch.CmpPtr2CharPtr1Y Regular Char, compare with string at Y + bne .9 no match, exit -.5 jsr FilterMatch.NextPtr2 we have '*', last char of pattern ? - beq .8 yes, match everything, including empty string - - cmp #'*' another '*' ? - beq .5 yes, '**' = '*', go next char +.4 iny advance to next char to compare + bra .1 continue if remaining char in pattern - cmp #'?' '*?' ? we must match a least one char - beq .3 - -.7 lda (ZPFileName),y we need at least one remaining char in string, check if at end of string - beq .9 no chance to match ? or regular char - - iny - jsr FilterMatch.CmpPtr2CharPtr1Y compare with char in string - bne .7 not equal to next non wildcard in pattern +.41 lda (ZPFileName),y end of pattern, but end of string ? + beq .8 yes, string matched entirely +* no, remaining char in string, no match +.9 sec + rts + +.5 jsr FilterMatch.NextPtr2 we have '*', last char of pattern ? + beq .8 yes, match everything, including empty string + + cmp #'*' another '*' ? + beq .5 yes, '**' = '*', go next char + + cmp #'?' '*?' ? we must match a least one char + beq .3 + +.7 lda (ZPFileName),y we need at least one remaining char in string, check if at end of string + beq .9 no chance to match ? or regular char iny - bra .1 go check remaining char in pattern... - -.8 + jsr FilterMatch.CmpPtr2CharPtr1Y compare with char in string + bne .7 not equal to next non wildcard in pattern + + iny + bra .1 go check remaining char in pattern... + +.8 FilterMatch.CLCRTS clc FilterMatch.RTS - rts + rts *-------------------------------------- FilterMatch.CmpPtr2CharPtr1Y phx @@ -117,17 +118,17 @@ FilterMatch.CmpPtr2CharPtr1Y bcs .1 eor #$20 - + .1 cmp (ZPPtr2) rts - + .2 lda (ZPPtr2) cmp (ZPFileName),y rts *-------------------------------------- FilterMatch.NextPtr2 - inc ZPPtr2 Make PTR2 advance to next char - bne .1 + inc ZPPtr2 Make PTR2 advance to next char + bne .1 inc ZPPtr2+1 @@ -167,7 +168,7 @@ InitSrcDirYA >PUSHYA beq .11 jmp .9 - + .11 jsr GetPtr1Len TYPE is not DIR, check if wc dey @@ -261,17 +262,17 @@ InitSrcDirYA >PUSHYA pla sec InitSrcDirYA.RTS - rts + rts *-------------------------------------- ResetSrcDir jsr GethDIR >SYSCALL CloseDir - + >LDA.G hSrcBasePath >SYSCALL GetMemPtr >SYSCALL OpenDir bcs .9 - + pha >LDA.G index @@ -294,7 +295,8 @@ InitDstDirYA >PUSHYA >STYA ZPPtr1 txa >STA.G hFullPath - >PUSHW ZPPtr1 + + >PUSHW ZPPtr1 >PUSHEA.G STAT >SYSCALL Stat bcs .1 File/DIR does not exists, go extract DstFileName @@ -351,18 +353,18 @@ InitDstDirYA >PUSHYA iny lda #0 sta (ZPPtr2),y - + .7 jsr .9 Cleanup clc .99 rts - + .9 pha >LDA.G hFullPath >SYSCALL FreeMem pla sec - rts + rts .FIN *-------------------------------------- GetNextEntry jsr GetEntry @@ -374,6 +376,7 @@ GetNextEntry jsr GetEntry clc adc #S.STAT sta ZPFileName + lda ZPFileStat+1 adc /S.STAT sta ZPFileName+1 Make nDIRENTs[i] point to next DIRENT @@ -435,7 +438,7 @@ GetEntry jsr GethDIRENT rts .1 >SYSCALL GetMemPtr - >STYA ZPFileName + >STYA ZPFileName jsr GetoDIRENT lda ZPFileName @@ -452,7 +455,7 @@ GetEntry jsr GethDIRENT .8 jsr GetFilenameLen jsr SetFileStatPtr - + clc .9 rts *-------------------------------------- @@ -592,7 +595,7 @@ BasePath.. .DO X.COPY.TO.DEST=1 jsr BasePath..1 .FIN ldy #hSrcBasePath - + BasePath..1 lda (pData),y >SYSCALL GetMemPtr >STYA ZPPtr1 save full path @@ -600,7 +603,7 @@ BasePath..1 lda (pData),y jsr GetPtr1Len get len dey discard ending / - + .2 dey lda (ZPPtr1),y cmp #'/' @@ -647,16 +650,15 @@ SetFileStatPtr sec sta ZPFileStat+1 rts *-------------------------------------- -GethDIR ldy #index - lda (pData),y +GethDIR >LDA.G index + clc adc #hDIRs-1 tay lda (pData),y rts *-------------------------------------- -GethDIRENT ldy #index - lda (pData),y +GethDIRENT >LDA.G index GethDIRENT.A clc adc #hDIRENTs-1 @@ -664,8 +666,7 @@ GethDIRENT.A clc lda (pData),y rts *-------------------------------------- -GetoDIRENT ldy #index - lda (pData),y +GetoDIRENT >LDA.G index asl clc adc #oDIRENTs-1 diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index 6521510f..c7fa0ee0 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -42,35 +42,35 @@ IRQ.Handler cld pha sta CLRWRITEAUX Driver may R/W in screen holes - lda MSLOT Save MSLOT - pha +* lda MSLOT Save MSLOT +* pha - lda RDCXROM C100-C7ff state - pha - sta CLRCXROM Enable access to slot C100-C7ff space +* lda RDCXROM C100-C7ff state +* pha +* sta CLRCXROM Enable access to slot C100-C7ff space IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED - ldx #CLRCXROM +* ldx #CLRCXROM - pla Get CXROM State - bpl .3 +* pla Get CXROM State +* bpl .3 - inx X = SETCXROM +* inx X = SETCXROM -.3 sta $C000,x +*.3 sta $C000,x - pla Get back MSLOT - sta MSLOT - sta IRQ.2+2 +* pla Get back MSLOT +* sta MSLOT +* sta IRQ.2+2 - and #$F0 - eor #$C0 ....mmm...not looking like Cn.... - bne IRQ.3 +* and #$F0 +* eor #$C0 ....mmm...not looking like Cn.... +* bne IRQ.3 - sta CLRC8ROM Release $C800 +* sta CLRC8ROM Release $C800 -IRQ.2 lda $ff00 SELF MODIFIED +*IRQ.2 lda $ff00 SELF MODIFIED IRQ.3 pla Must keep Carry bpl .1