From eaa728fa9f15aa2cdc1be4d1371c878008689bcb Mon Sep 17 00:00:00 2001 From: burniouf Date: Tue, 17 Jan 2023 07:31:23 +0100 Subject: [PATCH] CIFSD:new code DAN2ETH.DRV:working --- .Docs/KERNEL.md | 3 +- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes .Floppies/A2OSX.TEST.po | Bin 819200 -> 819200 bytes DRV/DAN2ETH.DRV.S.txt | 50 +- INC/A2osX.I.txt | 1 + INC/LIBCIFS.I.txt | 12 - LIB/LIBCIFS.S.txt | 1298 ------------------- SBIN/CIFSD.S.CORE.txt | 351 +++++ SBIN/CIFSD.S.INIT.txt | 255 ++++ LIB/LIBCIFS.S.IO.txt => SBIN/CIFSD.S.IO.txt | 1036 +++++++++------ SBIN/CIFSD.S.txt | 466 ++++++- SHARED/X.CPMVRM.S.txt | 5 +- SYS/KERNEL.S.DIRENT.txt | 3 +- SYS/KERNEL.S.INIT.txt | 38 +- SYS/KERNEL.S.MEM.txt | 4 +- SYS/KERNEL.S.PFT.txt | 4 +- 16 files changed, 1668 insertions(+), 1858 deletions(-) delete mode 100644 INC/LIBCIFS.I.txt delete mode 100644 LIB/LIBCIFS.S.txt create mode 100644 SBIN/CIFSD.S.CORE.txt create mode 100644 SBIN/CIFSD.S.INIT.txt rename LIB/LIBCIFS.S.IO.txt => SBIN/CIFSD.S.IO.txt (51%) diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index b70854a3..5c290ba2 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -137,10 +137,9 @@ Create a hDEV # ReadDir ## C -`int readdir (int hDIR, S.DIRENT * dirent);` +`struct dirent *readdir (short int hDIR);` ## ASM -`>PUSHW dirent` `lda hDIR` `>SYSCALL readdir` diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index ce2918680233c7ffe0c5e97dc5d0bada55fec416..39afc46193077218c935350c141d1cb65eb94c47 100644 GIT binary patch delta 82505 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

?pkR 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 OUje_Fbp5EQ?tcJ_N_HRs delta 107468 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

5+KW=QV#AR%Sfey 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 delta 40157 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 O$188#K+O$VzJCK>+WtZS diff --git a/DRV/DAN2ETH.DRV.S.txt b/DRV/DAN2ETH.DRV.S.txt index 61ad621a..bf2e553f 100644 --- a/DRV/DAN2ETH.DRV.S.txt +++ b/DRV/DAN2ETH.DRV.S.txt @@ -28,17 +28,15 @@ IO.8255.S.ByteRcvd .EQ %00100000 IO.8255.Mode .EQ $C083-$88 *-------------------------------------- .MA READBYTE -:1 inc $600+37 - lda IO.8255.S,x - and #IO.8255.S.ByteRcvd + lda #IO.8255.S.ByteRcvd +:1 bit IO.8255.S,x beq :1 lda IO.8255.Data,x .EM .MA WRITEBYTE sta IO.8255.Data,x -:1 inc $600+38 - bit IO.8255.S,x +:1 bit IO.8255.S,x bpl :1 .EM *-------------------------------------- @@ -318,11 +316,7 @@ OPEN lda #S.DIB.S.OPENED >READBYTE beq .8 - - - lda #"! - sta $600+30 - + lda #MLI.E.IO sec rts @@ -330,9 +324,6 @@ OPEN lda #S.DIB.S.OPENED .8 lda #S.DIB.S.OPENED tsb DIB+S.DIB.S - lda #"O - sta $600+30 - clc rts @@ -357,8 +348,6 @@ READ php >STYA ZPIOCTL - jsr DEBUG.ClrR - ldx DEVSLOTx0 lda #IO.8255.Cmd.PFX @@ -370,9 +359,6 @@ READ php lda /1514 >WRITEBYTE - lda #"R - sta $600+32 - >READBYTE ldy #S.IOCTL.BYTECNT sta (ZPIOCTL),y @@ -408,9 +394,6 @@ READ php ldx DEVSLOTx0 - lda #"R - sta $600+33 - ldy #0 .2 inc Counter @@ -443,8 +426,6 @@ WRITE php sei >STYA ZPIOCTL - jsr DEBUG.ClrW - ldx DEVSLOTx0 lda #IO.8255.Cmd.PFX @@ -485,16 +466,9 @@ WRITE php inc ZPBufPtr+1 bra .1 -.8 - lda #"W - sta $600+35 - - >READBYTE +.8 >READBYTE bne WRITE.99 - lda #"W - sta $600+36 - plp clc rts @@ -504,20 +478,6 @@ WRITE.99 lda #MLI.E.IO sec rts *-------------------------------------- -DEBUG.ClrR lda #"R - sta $600+31 - lda #"? - sta $600+32 - sta $600+33 - rts -*-------------------------------------- -DEBUG.ClrW lda #"W - sta $600+34 - lda #"? - sta $600+35 - sta $600+36 - rts -*-------------------------------------- DRV.CS.END DEVSLOTx0 .BS 1 *-------------------------------------- diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 5c25c2bc..3f4ef779 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -467,6 +467,7 @@ S.FD.PFT .EQ 1 *-------------------------------------- S.FD.REG.REF .EQ 2 S.FD.REG.IOBUF .EQ 3 +S.FD.REG.FPOS .EQ 4 dword * S.FD.REG .EQ 16 *-------------------------------------- diff --git a/INC/LIBCIFS.I.txt b/INC/LIBCIFS.I.txt deleted file mode 100644 index e770a2a0..00000000 --- a/INC/LIBCIFS.I.txt +++ /dev/null @@ -1,12 +0,0 @@ -NEW - AUTO 3,1 - .LIST OFF -*-------------------------------------- -LIBCIFS.Negotiate .EQ 4 -LIBCIFS.SessionSetup .EQ 6 -LIBCIFS.TreeConnect .EQ 8 -LIBCIFS.Mount .EQ 10 -LIBCIFS.UMount .EQ 12 -*-------------------------------------- -MAN -SAVE inc/libcifs.i diff --git a/LIB/LIBCIFS.S.txt b/LIB/LIBCIFS.S.txt deleted file mode 100644 index ad5e290a..00000000 --- a/LIB/LIBCIFS.S.txt +++ /dev/null @@ -1,1298 +0,0 @@ -NEW - AUTO 3,1 - .LIST OFF - .OP 65C02 - .OR $2000 - .TF lib/libcifs -*-------------------------------------- - .INB inc/macros.i - .INB inc/a2osx.i - .INB inc/kernel.i - .INB inc/mli.e.i - .INB inc/eth.i - .INB inc/net.tcpip.i - .INB inc/net.smb.i - .INB inc/libtcpip.i -*-------------------------------------- - .DUMMY - .OR ZPLIB -ZS.START -ZPReqPtr .BS 2 -ZPReqLen .BS 2 -ZPCtxPtr .BS 2 -ZPRespPtr .BS 2 - -ZPPtr1 .BS 2 -ZPPtr2 .BS 2 -BufPtr .BS 2 -hBuf .BS 1 -hResp .BS 1 - -pPath .BS 2 -flags .BS 1 -ftype .BS 1 -auxtype .BS 2 -pFD .BS 2 - -bFlag .BS 1 -ByteCountOfs .BS 1 - -ZS.END .ED -*-------------------------------------- -* File Header (16 Bytes) -*-------------------------------------- -CS.START cld - jmp (.1,x) - .DA #$61 6502,Level 1 (65c02) - .DA #1 BIN Layout Version 1 - .DA 0 - .DA CS.END-CS.START - .DA 0 - .DA 0 - .DA 0 -*-------------------------------------- -* Relocation Table -*-------------------------------------- -.1 .DA LIB.LOAD - .DA LIB.UNLOAD - .DA CIFS.Negotiate - .DA CIFS.SessionSetup - .DA CIFS.TreeConnect - .DA CIFS.Mount - .DA CIFS.UMount -*-------------------------------------- -L.CALLBACK .DA CIFS.CallBack -*-------------------------------------- -J.CIFS .DA CIFS.ChTyp - .DA CIFS.ChMod - .DA CIFS.FStat - .DA CIFS.Stat - .DA CIFS.MKDir - .DA CIFS.BADCALL MKNod - .DA CIFS.BADCALL MKFIFO - .DA CIFS.BADCALL Pipe - - .DA CIFS.OpenDir - .DA CIFS.ReadDir - .DA CIFS.CloseDir - - .DA CIFS.BADCALL Open - .DA CIFS.BADCALL Close - .DA CIFS.BADCALL Read - .DA CIFS.BADCALL Write - .DA CIFS.ChOwn - - .DA CIFS.BADCALL - .DA CIFS.BADCALL - .DA CIFS.BADCALL - .DA CIFS.BADCALL - .DA CIFS.BADCALL - .DA CIFS.BADCALL - .DA CIFS.BADCALL - .DA CIFS.BADCALL - - .DA CIFS.FOpen - .DA CIFS.FClose - .DA CIFS.FRead - .DA CIFS.FWrite - .DA CIFS.FFlush - .DA CIFS.FSeek - .DA CIFS.FTell - .DA CIFS.FEOF - .DA CIFS.Remove - .DA CIFS.Rename -*-------------------------------------- -J.CIFS2 .DA CIFS2.ChTyp - .DA CIFS2.ChMod - .DA CIFS2.FStat - .DA CIFS2.Stat - .DA CIFS2.MKDir - .DA CIFS.BADCALL MKNod - .DA CIFS.BADCALL MKFIFO - .DA CIFS.BADCALL Pipe - - .DA CIFS2.OpenDir - .DA CIFS2.ReadDir - .DA CIFS2.CloseDir - - .DA CIFS.BADCALL Open - .DA CIFS.BADCALL Close - .DA CIFS.BADCALL Read - .DA CIFS.BADCALL Write - .DA CIFS2.ChOwn - - .DA CIFS.BADCALL FPutC... - .DA CIFS.BADCALL - .DA CIFS.BADCALL - .DA CIFS.BADCALL - .DA CIFS.BADCALL - .DA CIFS.BADCALL - .DA CIFS.BADCALL - .DA CIFS.BADCALL ...UngetC - - .DA CIFS2.FOpen - .DA CIFS2.FClose - .DA CIFS2.FRead - .DA CIFS2.FWrite - .DA CIFS2.FFlush - .DA CIFS2.FSeek - .DA CIFS2.FTell - .DA CIFS2.FEOF - .DA CIFS2.Remove - .DA CIFS2.Rename -*-------------------------------------- -L.LIBTCPIP .DA LIBTCPIP -L.NETBIOS.H .DA NETBIOS.H - .DA 0 -*-------------------------------------- -LIB.LOAD >LDYA L.LIBTCPIP - >SYSCALL2 LoadLib - bcs .9 - - sta hLIBTCPIP - >SYSCALL2 GetMemPtr - >STYA pLIBTCPIP - - >LDYAI 512 - >SYSCALL2 GetMem - bcs .9 - - stx hReq - -* clc -.9 rts -*-------------------------------------- -LIB.UNLOAD lda hReq - beq .1 - - >SYSCALL2 FreeMem - -.1 lda hLIBTCPIP - beq .8 - - >SYSCALL2 UnloadLib - -.8 clc - rts -*-------------------------------------- -* >PUSHB hSocket -* >PUSHBI 0 -* >LIBCALL Negotiate -* A = hSMBContext -*-------------------------------------- -CIFS.Negotiate lda (pStack) - bne .1 - - dec - sta (pStack) - - ldy #1 hSocket - lda (pStack),y - >PUSHA - >PUSHW L.NETBIOS.H - >PUSHWI SMB.NegReq.end-NETBIOS.H - - ldx #LIBTCPIP.Send - jsr GO.LIBTCPIP - bcs .99 - - lda #0 - sec - rts -*-------------------------------------- -.1 dec - sta (pStack) - beq .98 - - ldy #1 hSocket - lda (pStack),y - - jsr ReadSocketA - bcc .3 - - cmp #E.NODATA - bne .99 - inc - rts - -.3 jsr GetRespData - - ldy #S.NETBIOS+S.SMB.H.STATUS - lda (ZPRespPtr),y - bne .97 - - ldy #S.NETBIOS.LEN+2 - lda (ZPRespPtr),y - - clc - adc #S.NETBIOS - sta ZPPtr1 - tay - lda #0 - - >SYSCALL2 GetMem - bcs .99 - - >STYA ZPCtxPtr - ldy ZPPtr1 - -.4 dey - lda (ZPRespPtr),y - sta (ZPCtxPtr),y - tya - bne .4 - - ldy #S.NETBIOS+S.SMB.H.FLAGS - sta (ZPCtxPtr),y - - txa hSMBContext - - jsr FreeRespData - - clc - bra .99 - -.97 jsr FreeRespData - -.98 lda #MLI.E.INVPARAM - -.99 >RET 2 -*-------------------------------------- -* >PUSHB hSocket -* >PUSHB hSMBContext -* >PUSHW domain -* >PUSHW username -* >PUSHW password -* >PUSHBI 0 -* >LIBCALL SessionSetup -* (SMBContext updated with UID) -*-------------------------------------- -CIFS.SessionSetup - lda (pStack) - bne .5 - - dec - sta (pStack) - - ldy #7 hSMBContext - jsr GetSMBContext - - ldx #S.SMB.H.CMD.SESSION.SETUP.ANDX - jsr RequestSetupX - - ldx #0 - -.2 lda SMB.SessionSetup.H,x - sta (ZPReqPtr),y - iny - inx - cpx #SMB.SessionSetup.H.Len - bne .2 - - jsr ReqSetupPtr2 - - ldy #0 - - ldx #0 - -.3 lda SMB.SessionSetup.Guest,x - jsr PutBytePtr2 - iny - inx - cpx #SMB.SessionSetup.Guest.Len - bne .3 - - ldx #0 - -.4 lda SMB.SessionSetup.T,x - jsr PutBytePtr2 - iny - inx - cpx #SMB.SessionSetup.T.Len - bne .4 - - tya - ldy ByteCountOfs - sta (ZPReqPtr),y - - jsr SetReqLen - - ldy #8 hSocket - lda (pStack),y - jsr WriteSocketA - bcs .99 - - lda #0 - sec - rts -*-------------------------------------- -.5 dec - sta (pStack) - beq .98 - - ldy #8 hSocket - lda (pStack),y - jsr ReadSocketA - bcc .6 - - cmp #E.NODATA - bne .99 - inc - rts - -.6 jsr GetRespData - - ldy #S.NETBIOS+S.SMB.H.STATUS - lda (ZPRespPtr),y - bne .97 - - ldy #7 hSMBContext - jsr GetSMBContext - - ldy #S.NETBIOS+S.SMB.H.UID - lda (ZPRespPtr),y - sta (ZPCtxPtr),y - iny - lda (ZPRespPtr),y - sta (ZPCtxPtr),y - -.8 jsr FreeRespData - - clc - bra .99 - -.97 jsr FreeRespData - -.98 lda #MLI.E.LOCKED - sec -.99 >RET 7 -*-------------------------------------- -* >PUSHB hSocket -* >PUSHB hSMBContext -* >PUSHW pathname -* >PUSHBI 0 -* >LIBCALL TreeConnect -* (SMBContext updated with TID) -*-------------------------------------- -CIFS.TreeConnect - lda (pStack) - bne .5 - - dec - sta (pStack) - - ldy #1 pathname - lda (pStack),y - sta pPath - iny - lda (pStack),y - sta pPath+1 - - iny hSMBContext - jsr GetSMBContext - - ldx #S.SMB.H.CMD.TREE.CONNECT.ANDX - jsr RequestSetupX - - ldx #0 - -.1 lda SMB.TreeConnect.H,x - sta (ZPReqPtr),y - iny - inx - cpx #SMB.TreeConnect.H.Len - bne .1 - - jsr ReqSetupPtr2 - - lda #0 - jsr PutBytePtr2 PASSWORD = "\0" - - jsr AppendPathPtr2 - jsr AddYReqLenPtr2 - - iny + \0 from password - - ldx #0 - -.4 lda SMB.TreeConnect.T,x - jsr PutBytePtr2 - iny - inx - cpx #SMB.TreeConnect.T.Len - bne .4 - - tya - ldy ByteCountOfs - sta (ZPReqPtr),y - - jsr SetReqLen - - ldy #4 hSocket - lda (pStack),y - jsr WriteSocketA - bcs .99 - - lda #0 - sec - rts - -.5 dec - sta (pStack) - beq .98 - - ldy #4 hSocket - lda (pStack),y - jsr ReadSocketA - bcc .6 - - cmp #E.NODATA - bne .99 - inc - rts - -.6 jsr GetRespData - - ldy #S.NETBIOS+S.SMB.H.STATUS - lda (ZPRespPtr),y - bne .97 - - ldy #3 hSMBContext - jsr GetSMBContext - - ldy #S.NETBIOS+S.SMB.H.TID - lda (ZPRespPtr),y - sta (ZPCtxPtr),y - iny - lda (ZPRespPtr),y - sta (ZPCtxPtr),y - -.8 jsr FreeRespData - - clc - bra .99 - -.97 jsr FreeRespData - -.98 lda #MLI.E.IO - sec -.99 >RET 5 -*-------------------------------------- -* >PUSHB hSocket -* >PUSHB hSMBContext -* >PUSHW MountPoint -* >LIBCALL Mount -*-------------------------------------- -CIFS.Mount ldy #1 - lda (pStack),y MP HI - >PUSHA - lda (pStack),y MP LO - >PUSHA - - >PUSHW L.CALLBACK - >SYSCALL2 Mount - bcs .9 - - pha hMount - - ldx #0 - -.1 >PULLB MountTable,x - inx - cpx #4 - bne .1 - - pla - clc - rts - -.9 >RET 4 -*-------------------------------------- -CIFS.UMount clc - rts -*-------------------------------------- -CIFS.CallBack bit CIFS.Status - bpl .1 - - phy - pha - - ldy #S.PS.PID - lda (pPS),y - cmp CIFS.PID - beq .2 - - pla - ply - - lda #0 - sec - rts - -.1 jmp (J.CIFS,x) - -.2 pla - ply - jmp (J.CIFS2,x) -*-------------------------------------- -GetCTX lda MountTable+2 - >SYSCALL2 GetMemPtr - >STYA ZPCtxPtr - rts -*-------------------------------------- -GetSMBContext lda (pStack),y - >SYSCALL2 GetMemPtr - >STYA ZPCtxPtr - rts -*-------------------------------------- -RequestT2SetupX ldx #S.SMB.H.CMD.TRANS2 - jsr RequestSetupX - - ldx #0 - -.1 lda SMB.Trans2.H,x - sta (ZPReqPtr),y - iny - inx - cpx #SMB.Trans2.H.Len - bne .1 - - rts -*-------------------------------------- -RequestSetupX phx - - lda hReq - >SYSCALL2 GetMemPtr - >STYA ZPReqPtr - - ldy #0 - -.1 lda (ZPCtxPtr),y - cpy #S.NETBIOS+S.SMB.H.CMD - bne .2 - - pla - -.2 sta (ZPReqPtr),y - iny - cpy #S.NETBIOS+S.SMB.H - bne .1 - - rts -*-------------------------------------- -ReqSetupPtr2 sty ByteCountOfs - - lda #0 - sta (ZPReqPtr),y Reset ByteCount - iny - sta (ZPReqPtr),y - iny +2 for ByteCount - -ReqT2SetupPtr2 sty ZPReqLen - stz ZPReqLen+1 - - tya - - clc - adc ZPReqPtr - sta ZPPtr2 - - lda ZPReqPtr+1 - adc #0 - sta ZPPtr2+1 - - rts -*-------------------------------------- -PutBytePtr2 sta (ZPPtr2) - inc ZPPtr2 - bne .1 - - inc ZPPtr2+1 - -.1 inc ZPReqLen - bne .8 - - inc ZPReqLen+1 - -.8 rts -*-------------------------------------- -AppendPathPtr2 ldx #0 - - ldy #$ff - -.1 iny - lda (pPath),y - beq .4 - -.2 cmp #'/' - bne .3 - - lda #'\' - -.3 sta (ZPPtr2),y - tax - bra .1 - -.4 cpx #'\' - bne .5 - - dey - -.5 sta (ZPPtr2),y A = 0 - - rts -*-------------------------------------- -AppendTypePtr2 ldx #0 - -.1 cmp PRODOS.FT.HEX,x - beq .4 - - inx - cpx #PRODOS.FT.TXT-PRODOS.FT.HEX - bne .1 - - pha - lsr - lsr - lsr - lsr - - ora #$30 - cmp #'9'+1 - bcc .2 - - adc #6 - -.2 sta PRODOS.FT.DFLT+1 - pla - and #$0F - - ora #$30 - cmp #'9'+1 - bcc .3 - - adc #6 - -.3 sta PRODOS.FT.DFLT+2 - -.4 txa - asl - asl - tax - - lda #'.' - sta (ZPPtr2),y - iny - -.6 lda PRODOS.FT.TXT,x - sta (ZPPtr2),y - beq .8 - - inx - iny - bra .6 - -.8 rts -*-------------------------------------- -Add2ByteCount ldy ByteCountOfs - clc - adc (ZPReqPtr),y - sta (ZPReqPtr),y - - iny ByteCountOfs+1 - - lda #0 - adc (ZPReqPtr),y - sta (ZPReqPtr),y - rts -*-------------------------------------- -AddYReqLenPtr2 tya - - sec +1 for \0 - - adc ZPPtr2 - sta ZPPtr2 - bcc AddYReqLen - - inc ZPPtr2+1 -*-------------------------------------- -AddYReqLen tya - - sec +1 for \0 - - adc ZPReqLen - sta ZPReqLen - bcc .8 - - inc ZPReqLen+1 - -.8 rts -*-------------------------------------- -AppendPath ldx #0 - -.1 lda (pPath) - beq .4 - - inc pPath - bne .2 - - inc pPath+1 - -.2 cmp #'/' - bne .3 - - lda #'\' - -.3 sta (ZPReqPtr),y - tax - iny - bra .1 - -.4 cpx #'\' - bne .5 - - dey - -.5 rts -*-------------------------------------- -SetT2ReqLenYA sty ZPReqLen - stz ZPReqLen+1 - -SetT2ReqLen lda ZPReqLen - sec - sbc #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 - - ldy #S.NETBIOS+S.SMB.H+1 - sta (ZPReqPtr),y - - ldy #S.NETBIOS+S.SMB.H+19 - sta (ZPReqPtr),y - - inc - inc - inc - - ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+2 - sta (ZPReqPtr),y -*-------------------------------------- -SetReqLen lda ZPReqLen - sec - sbc #S.NETBIOS - ldy #S.NETBIOS.LEN+2 - sta (ZPReqPtr),y - - lda ZPReqLen+1 - sec - sbc /S.NETBIOS - dey - sta (ZPReqPtr),y - - rts -*-------------------------------------- -Sleep ldy #S.PS.PID - lda (pPS),y - sta CIFS.PID - - dec CIFS.Status - -Sleep2 stz CIFS.Retries - - lda #0 - sec - rts -*-------------------------------------- -Exit.OK jsr FreeRespData - - stz CIFS.Status -* clc - rts -*-------------------------------------- -Exit.NODATA cmp #E.NODATA - bne .99 - - dec CIFS.Retries - beq .98 - - lda #0 - sec - rts - -.98 lda #MLI.E.OFFLINE - -.99 stz CIFS.Status - sec - rts -*-------------------------------------- -GetRespData sta hResp - >SYSCALL2 GetMemPtr - - pha - tya -* clc - adc #S.TCP - sta ZPRespPtr - pla - adc /S.TCP - sta ZPRespPtr+1 - rts -*-------------------------------------- -GetRespDataPtr1 ldy #S.NETBIOS+S.SMB.H+15 Data Offset - lda (ZPRespPtr),y - clc - adc ZPRespPtr - tax - - iny - lda (ZPRespPtr),y - adc ZPRespPtr+1 - pha - - txa - clc - adc #S.NETBIOS - sta ZPPtr1 - - pla - adc /S.NETBIOS - sta ZPPtr1+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 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 - ldx #S.STAT-1 - -.1 stz StatBuf,x - dex - bpl .1 - - ldy #0 Creation Date/Time - ldx #S.STAT.CTIME - - jsr FileInfo2StatBufDT - - ldy #4 Last Access Date/Time - ldx #S.STAT.ATIME - - jsr FileInfo2StatBufDT - - ldy #8 Last Write Date/Time - ldx #S.STAT.MTIME - - jsr FileInfo2StatBufDT - - ldy #12+3 Data Size - ldx #3 - -.7 lda (ZPPtr1),y - sta StatBuf+S.STAT.SIZE,x - dey - dex - bpl .7 - - ldy #20 File Attribute - lda (ZPPtr1),y - and #$10 - beq .8 - - lda /S.STAT.MODE.DIR - sta StatBuf+S.STAT.MODE+1 - -.8 rts -*-------------------------------------- -* YYYYYYYM MMM DDDDD -* HHHHHmmm mmm SSSSS -*-------------------------------------- -FileInfo2StatBufDT - iny - lda (ZPPtr1),y - lsr - - php - - clc - adc #80 - sta StatBuf+S.TIME.YEAR,x - lda #19 - adc #0 - sta StatBuf+S.TIME.CENTURY,x - - dey - - plp - lda (ZPPtr1),y - ror - lsr - lsr - lsr - lsr - sta StatBuf+S.TIME.MONTH,x - - lda (ZPPtr1),y - and #$1F - sta StatBuf+S.TIME.DAY,x - - iny - iny - - lda (ZPPtr1),y - and #$1F - asl - sta StatBuf+S.TIME.SECOND,x - - lda (ZPPtr1),y - and #$E0 - sta StatBuf+S.TIME.MINUTE,x - - lda (ZPPtr1),y - lsr - ror StatBuf+S.TIME.MINUTE,x - lsr - ror StatBuf+S.TIME.MINUTE,x - lsr - ror StatBuf+S.TIME.MINUTE,x - lsr StatBuf+S.TIME.MINUTE,x - lsr StatBuf+S.TIME.MINUTE,x - - sta StatBuf+S.TIME.HOUR,x - rts -* TODO : S.TIME.WDAY -*-------------------------------------- -AddA2Ptr1 adc ZPPtr1 - sta ZPPtr1 - bcc .8 - - inc ZPPtr1+1 - -.8 rts -*-------------------------------------- -StatBuf2Ptr2 ldy #S.STAT-1 - -.1 lda StatBuf,y - sta (ZPPtr2),y - dey - bpl .1 - - rts -*-------------------------------------- -AddSTAT2Ptr2 lda #S.STAT - clc -*-------------------------------------- -AddA2Ptr2 adc ZPPtr2 - sta ZPPtr2 - bcc .8 - - inc ZPPtr2+1 - -.8 rts -*-------------------------------------- -*ClearSocket jsr ReadSocket -* bcs .8 - -* >SYSCALL2 FreeMem -* bra ClearSocket - -*.8 clc -* rts -*-------------------------------------- -WriteSocket lda MountTable+3 hSocket - -WriteSocketA >PUSHA - >PUSHW ZPReqPtr - >PUSHW ZPReqLen - ldx #LIBTCPIP.Send - jmp (pLIBTCPIP) -*-------------------------------------- -ReadSocket lda MountTable+3 hSocket - -ReadSocketA ldx #LIBTCPIP.Recv -GO.LIBTCPIP jmp (pLIBTCPIP) -*-------------------------------------- -CIFS.BADCALL lda #MLI.E.BADCALL - sec - rts -*-------------------------------------- - .INB usr/src/lib/libcifs.io.s -*-------------------------------------- -CS.END -PRODOS.FT.HEX .HS 0406FAFCFDCBCCCFFF -PRODOS.FT.TXT .AZ "txt" - .AZ "bin" - .AZ "asm" - .AZ "bas" - .AZ "var" - .AZ "pix" - .AZ "fon" - .AZ "pak" - .AZ "sys" -PRODOS.FT.END .EQ *-PRODOS.FT.TXT -PRODOS.FT.DFLT .AZ "$ " -*-------------------------------------- -SMBERR01 .DA #2,#3,#32 -MLIERR01 .DA #MLI.E.FNOTFND,#MLI.E.PNOTFND,#MLI.E.OPEN -*-------------------------------------- -NETBIOS.H .DA #0 DIRECT TCP TRANSPORT - .DA #0 24 BITS LENGTH - .DA /SMB.NegReq.end-SMB.H - .DA #SMB.NegReq.end-SMB.H -*-------------------------------------- -SMB.H .DA #$FF - .AS "SMB" - .DA #S.SMB.H.CMD.NEGOTIATE - .HS 00000000 - .DA #0 S.SMB.H.FLAGS - .DA S.SMB.H.FLAGS2.LONGNAMES - .DA 0 PIDHI - .HS 0000000000000000 SECFEAT - .DA 0 RSVD - .DA $FFFF TID - .DA $FFFE PIDLO - .BS 2 UID - .DA 0 MID -*-------------------------------------- -SMB.NegReq .DA #0 WORD COUNT - - .DA #SMB.NegReq.end-2-* ByteCount - .DA #0 - -* .DA #2 -* .AZ "PC NETWORK PROGRAM 1.0" -* .DA #2 -* .AZ "LANMAN1.0" -* .DA #2 -* .AZ "Windows for Workgroups 3.1a" -* .DA #2 -* .AZ "LM1.2X002" -* .DA #2 -* .AZ "LANMAN2.1" - .DA #2 - .AZ "NT LM 0.12" -* .DA #2 -* .AZ "SMB 2.002" -* .DA #2 -* .AZ "SMB 2.???" -SMB.NegReq.end .EQ * -*-------------------------------------- -SMB.SessionSetup.H - .DA #13 WORD COUNT - .HS FF000000 NO MORE CMD - .DA 1280 MAX BUFFER - .DA 2 MAX MPX COUNT - .HS 0000 VC NUMBER - .HS 00000000 SESSION KEY - .BS 2 CI PASS LEN (ANSI) - .DA 0 CS PASS LEN (UNICODE) - .HS 00000000 - .HS 00000000 CAPABILITIES -SMB.SessionSetup.H.Len .EQ *-SMB.SessionSetup.H -* .BS 2 ByteCount -SMB.SessionSetup.Guest -* .AZ "" Password - .AZ "Guest" Account Name - .AZ "?" Primary Domain -SMB.SessionSetup.Guest.Len .EQ *-SMB.SessionSetup.Guest -SMB.SessionSetup.T - .AZ "A2osX" Native OS - .AZ "A2osX-CIFSD" Native LANMAN -SMB.SessionSetup.T.Len .EQ *-SMB.SessionSetup.T -*-------------------------------------- -SMB.TreeConnect.H - .DA #4 WORD COUNT - .HS FF000000 NO MORE CMD - .DA 0 - .DA 1 PASSWORD LEN (1 for "\0") -SMB.TreeConnect.H.Len .EQ *-SMB.TreeConnect.H -* .BS 2 ByteCount -* .AZ "" PASSWORD -* .AZ "_temp" PATH -SMB.TreeConnect.T - .AZ "A:" Disk Share -SMB.TreeConnect.T.Len .EQ *-SMB.TreeConnect.T -*-------------------------------------- -SMB.ComCreate.H .DA #24 WORD COUNT - .HS FF000000 NO MORE CMD - .HS 00 Reserved - .BS 2 NameLength - .HS 00000000 Flags - .HS 00000000 RootDirectoryFID - .HS 00000010 DesiredAccess = GENERIC_ALL - .HS 0000000000000000 AllocationSize - .HS 00000000 ExtFileAttributes - .HS 00000000 ShareAccess - .BS 4 CreateDisposition - .HS 00000000 CreateOptions - .HS 00000000 ImpersonationLevel - .HS 00 SecurityFlags -SMB.ComCreate.H.Len .EQ *-SMB.ComCreate.H -* .BS 2 ByteCount -* .AZ "path\file" -*-------------------------------------- -SMB.ComClose.H .DA #3 WORD COUNT - .BS 2 FID - .HS 00000000 LastTimeModified - .HS 0000 ByteCount -SMB.ComClose.H.Len .EQ *-SMB.ComClose.H -*-------------------------------------- -SMB.ComFlush.H .DA #1 WORD COUNT - .BS 2 FID - .HS 0000 ByteCount -SMB.ComFlush.H.Len .EQ *-SMB.ComFlush.H -*-------------------------------------- -SMB.ComDelete.H .DA #1 WORD COUNT - .HS 0000 SearchAttributes -SMB.ComDelete.H.Len .EQ *-SMB.ComDelete.H -* .BS 2 ByteCount -* .HS 04 BufferFormat -* .AZ "path\file" -*-------------------------------------- -SMB.ComRename.H .DA #1 WORD COUNT - .HS 0000 SearchAttributes -SMB.ComRename.H.Len .EQ *-SMB.ComRename.H -* .BS 2 ByteCount -* .HS 04 BufferFormat -* .AZ "oldpath" -* .HS 04 BufferFormat -* .AZ "newpath" -*-------------------------------------- -SMB.ComRead.H .DA #10 WORD COUNT - .HS FF000000 NO MORE CMD - .BS 2 FID - .BS 4 Offset - .BS 2 MaxCountOfBytesToReturn - .HS 0000 MinCountOfBytesToReturn - .HS 00000000 Timeout - .HS 0000 Remaining -SMB.ComRead.H.Len .EQ *-SMB.ComRead.H -* .BS 2 ByteCount -*-------------------------------------- -SMB.ComWrite.H .DA #12 WORD COUNT - .HS FF000000 NO MORE CMD - .BS 2 FID - .BS 4 Offset - .HS 00000000 Timeout - .HS 0000 -* .HS 0100 WriteMode=WritethroughMode - .HS 0000 Remaining - .HS 0000 Reserved - .BS 2 DataLength - .DA S.SMB.H+SMB.ComWrite.H.Len+2 DataOffset (+2 skip ByteCount) -SMB.ComWrite.H.Len .EQ *-SMB.ComWrite.H -* .BS 2 ByteCount -* DATA..... -*-------------------------------------- -SMB.Trans2.H .DA #15 WORD COUNT - .BS 2 TotalParamCount - .DA 0 TotalDataCount - .DA 10 MaxParameterCount - .DA 450 MaxDataCount - .DA #0 MaxSetupCount - .HS 00 Reserved1 - .DA 0 Flags - .HS 00000000 Timeout - .HS 0000 Reserved2 - .BS 2 ParameterCount - .DA 68 ParameterOffset - .HS 0000 DataCount - .HS 0000 DataOffset - .DA #1 SetupCount - .HS 00 Reserved3 -SMB.Trans2.H.Len .EQ *-SMB.Trans2.H -*-------------------------------------- -SMB.FindFirst2 .DA 1 TRANS2_FIND_FIRST2 - .BS 2 PrmCnt - .HS 000000 Padding - .DA $0037 SearchAttributes - .DA 1024 SearchCount - .DA 2 Flags - .DA SMB_INFO_STANDARD InformationLevel - .HS 00000000 SearchStorageType -* .AZ "path\*" -SMB.FindFirst2.Len .EQ *-SMB.FindFirst2 -*-------------------------------------- -SMB.FindNext2 .DA 2 TRANS2_FIND_NEXT2 - .BS 2 PrmCnt - .HS 000000 Padding - .BS 2 SID - .DA 1024 SearchCount - .DA SMB_INFO_STANDARD InformationLevel - .HS 00000000 ResumeKey - .DA 2+8 Flags -* .AZ "path\*" -SMB.FindNext2.Len .EQ *-SMB.FindNext2 -*-------------------------------------- -SMB.QueryPathInfo - .DA 5 TRANS2_QUERY_PATH_INFORMATION - .BS 2 PrmCnt - .HS 000000 Padding - .DA SMB_INFO_STANDARD InformationLevel - .HS 00000000 SearchStorageType -* .AZ "filename" -SMB.QueryPathInfo.Len .EQ *-SMB.QueryPathInfo -*-------------------------------------- -SMB.CreateDirectory - .DA 13 TRANS2_CREATE_DIRECTORY - .BS 2 PrmCnt - .HS 000000 Padding - .HS 00000000 Reserved -* .AZ "DirName" -SMB.CreateDirectory.Len .EQ *-SMB.CreateDirectory -*-------------------------------------- -LIBTCPIP .AZ "libtcpip" -hLIBTCPIP .BS 1 -pLIBTCPIP .BS 2 -hSocket .BS 1 -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 -*-------------------------------------- -MAN -SAVE usr/src/lib/libcifs.s -ASM diff --git a/SBIN/CIFSD.S.CORE.txt b/SBIN/CIFSD.S.CORE.txt new file mode 100644 index 00000000..bcd83802 --- /dev/null +++ b/SBIN/CIFSD.S.CORE.txt @@ -0,0 +1,351 @@ +NEW + AUTO 3,1 +*-------------------------------------- +CORE.ReqT2SetupX + ldx #S.SMB.H.CMD.TRANS2 + jsr CORE.ReqSetupX + + ldx #0 + +.1 lda SMB.Trans2.H,x + sta (ZPReqPtr),y + iny + inx + cpx #SMB.Trans2.H.Len + bne .1 + + rts +*-------------------------------------- +CORE.ReqSetupX phx + + lda hReq + >SYSCALL2 GetMemPtr + >STYA ZPReqPtr + + lda hSMBContext + >SYSCALL2 GetMemPtr + >STYA ZPCtxPtr + + ldy #0 + +.1 lda (ZPCtxPtr),y + cpy #S.NETBIOS+S.SMB.H.CMD + bne .2 + + pla + +.2 sta (ZPReqPtr),y + iny + cpy #S.NETBIOS+S.SMB.H + bne .1 + + rts +*-------------------------------------- +CORE.ReqSetupPtr2 + sty ByteCountOfs + + lda #0 + sta (ZPReqPtr),y Reset ByteCount + iny + sta (ZPReqPtr),y + iny +2 for ByteCount + +CORE.ReqT2SetupPtr2 + sty ZPReqLen + stz ZPReqLen+1 + + tya + + clc + adc ZPReqPtr + sta ZPPtr2 + + lda ZPReqPtr+1 + adc #0 + sta ZPPtr2+1 + + rts +*-------------------------------------- +CORE.PutBytePtr2 + sta (ZPPtr2) + inc ZPPtr2 + bne .1 + + inc ZPPtr2+1 + +.1 inc ZPReqLen + bne .8 + + inc ZPReqLen+1 + +.8 rts +*-------------------------------------- +CORE.AppendPathPtr2BF4 + lda #$04 BufferFormat + jsr CORE.PutBytePtr2 + +CORE.AppendPathPtr2 + ldx #0 + + ldy #$ff + +.1 iny + lda (pPath),y + beq .4 + +.2 cmp #'/' + bne .3 + + lda #'\' + +.3 sta (ZPPtr2),y + tax + bra .1 + +.4 cpx #'\' + bne .5 + + dey + +.5 sta (ZPPtr2),y A = 0 + + rts +*-------------------------------------- +CORE.AppendTypePtr2 + ldx #0 + +.1 cmp PRODOS.FT.HEX,x + beq .4 + + inx + cpx #PRODOS.FT.TXT-PRODOS.FT.HEX + bne .1 + + pha + lsr + lsr + lsr + lsr + + ora #$30 + cmp #'9'+1 + bcc .2 + + adc #6 + +.2 sta PRODOS.FT.DFLT+1 + pla + and #$0F + + ora #$30 + cmp #'9'+1 + bcc .3 + + adc #6 + +.3 sta PRODOS.FT.DFLT+2 + +.4 txa + asl + asl + tax + + lda #'.' + sta (ZPPtr2),y + iny + +.6 lda PRODOS.FT.TXT,x + sta (ZPPtr2),y + beq .8 + + inx + iny + bra .6 + +.8 rts +*-------------------------------------- +CORE.Add2ByteCount + ldy ByteCountOfs + clc + adc (ZPReqPtr),y + sta (ZPReqPtr),y + + iny ByteCountOfs+1 + + lda #0 + adc (ZPReqPtr),y + sta (ZPReqPtr),y + rts +*-------------------------------------- +CORE.AddYReqLenPtr2 + tya + + sec +1 for \0 + + adc ZPPtr2 + sta ZPPtr2 + bcc CORE.AddYReqLen + + inc ZPPtr2+1 +*-------------------------------------- +CORE.AddYReqLen tya + + sec +1 for \0 + + adc ZPReqLen + sta ZPReqLen + bcc .8 + + inc ZPReqLen+1 + +.8 rts +*-------------------------------------- +CORE.AppendPath ldx #0 + +.1 lda (pPath) + beq .4 + + inc pPath + bne .2 + + inc pPath+1 + +.2 cmp #'/' + bne .3 + + lda #'\' + +.3 sta (ZPReqPtr),y + tax + iny + bra .1 + +.4 cpx #'\' + bne .5 + + dey + +.5 rts +*-------------------------------------- +CORE.SetT2ReqLenYA + sty ZPReqLen + sta ZPReqLen+1 + +CORE.SetT2ReqLen + lda ZPReqLen + sec + sbc #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 + + ldy #S.NETBIOS+S.SMB.H+1 + sta (ZPReqPtr),y + + ldy #S.NETBIOS+S.SMB.H+19 + sta (ZPReqPtr),y + + inc + inc + inc + + ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+2 + sta (ZPReqPtr),y +*-------------------------------------- +CORE.SetReqLen lda ZPReqLen + sec + sbc #S.NETBIOS + ldy #S.NETBIOS.LEN+2 + sta (ZPReqPtr),y + + lda ZPReqLen+1 + sec + sbc /S.NETBIOS + dey + sta (ZPReqPtr),y + + rts +*-------------------------------------- +CORE.GetRespData + sta hResp + >SYSCALL2 GetMemPtr + + pha + tya +* clc + adc #S.TCP + sta ZPRespPtr + pla + adc /S.TCP + sta ZPRespPtr+1 + rts +*-------------------------------------- +CORE.GetRespDataPtr1 + ldy #S.NETBIOS+S.SMB.H+15 Data Offset + lda (ZPRespPtr),y + clc + adc ZPRespPtr + tax + + iny + lda (ZPRespPtr),y + adc ZPRespPtr+1 + pha + + txa + clc + adc #S.NETBIOS + sta ZPPtr1 + + pla + adc /S.NETBIOS + sta ZPPtr1+1 + + rts +*-------------------------------------- +CORE.CheckSMBStatus + ldy #S.NETBIOS+S.SMB.H.STATUS + lda (ZPRespPtr),y + clc + beq CORE.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 CORE.FreeRespData + +.2 lda MLIERR01-1,x +*-------------------------------------- +CORE.FreeRespData + php + pha + lda hResp + beq .8 + + stz hResp + + >SYSCALL2 FreeMem + +.8 pla + plp + +CORE.FreeRespData.RTS + rts +*-------------------------------------- +MAN +SAVE usr/src/sbin/cifsd.s.core +LOAD usr/src/sbin/cifsd.s +ASM diff --git a/SBIN/CIFSD.S.INIT.txt b/SBIN/CIFSD.S.INIT.txt new file mode 100644 index 00000000..f84f470b --- /dev/null +++ b/SBIN/CIFSD.S.INIT.txt @@ -0,0 +1,255 @@ +NEW + AUTO 3,1 +*-------------------------------------- +INIT.Setup >LDYAI 512 + >SYSCALL GetMem + bcs .9 + + stx hReq + + jsr INIT.Negotiate + bcs .9 + + jsr INIT.SessionSetup + bcs .9 + + lda #2 + >SYSCALL ArgV + >STYA pPath + jsr INIT.TreeConnect + bcs .9 + + lda #3 + >SYSCALL ArgV + >PUSHYA + >PUSHW L.IO.CallBack + >SYSCALL Mount + bcs .9 + + sta hMount + +* clc + +.9 rts +*-------------------------------------- +INIT.Negotiate >PUSHB hSocket + >PUSHW L.NETBIOS.H + >PUSHWI SMB.NegReq.end-NETBIOS.H + + >LIBCALL hLIBTCPIP,LIBTCPIP.Send + bcs .99 + + jsr INIT.ReadSocket + bcs .99 + + jsr CORE.GetRespData + + ldy #S.NETBIOS+S.SMB.H.STATUS + lda (ZPRespPtr),y + bne .97 + + ldy #S.NETBIOS.LEN+2 + lda (ZPRespPtr),y + + clc + adc #S.NETBIOS + sta ZPPtr1 + tay + lda #0 + + >SYSCALL GetMem + bcs .99 + + >STYA ZPCtxPtr + stx hSMBContext + + ldy ZPPtr1 + +.4 dey + lda (ZPRespPtr),y + sta (ZPCtxPtr),y + tya + bne .4 + + ldy #S.NETBIOS+S.SMB.H.FLAGS + sta (ZPCtxPtr),y + + jsr CORE.FreeRespData + + clc + rts + +.97 jsr CORE.FreeRespData + + lda #MLI.E.INVPARAM + sec +.99 rts +*-------------------------------------- +INIT.SessionSetup + ldx #S.SMB.H.CMD.SESSION.SETUP.ANDX + jsr CORE.ReqSetupX + + ldx #0 + +.2 lda SMB.SessionSetup.H,x + sta (ZPReqPtr),y + iny + inx + cpx #SMB.SessionSetup.H.Len + bne .2 + + jsr CORE.ReqSetupPtr2 + + ldy #0 + + ldx #0 + +.3 lda SMB.SessionSetup.Guest,x + jsr CORE.PutBytePtr2 + iny + inx + cpx #SMB.SessionSetup.Guest.Len + bne .3 + + ldx #0 + +.4 lda SMB.SessionSetup.T,x + jsr CORE.PutBytePtr2 + iny + inx + cpx #SMB.SessionSetup.T.Len + bne .4 + + tya + ldy ByteCountOfs + sta (ZPReqPtr),y + + jsr CORE.SetReqLen + jsr INIT.WriteSocket + bcs .99 + + jsr INIT.ReadSocket + bcs .99 + + jsr CORE.GetRespData + + ldy #S.NETBIOS+S.SMB.H.STATUS + lda (ZPRespPtr),y + bne .97 + + ldy #S.NETBIOS+S.SMB.H.UID + lda (ZPRespPtr),y + sta (ZPCtxPtr),y + iny + lda (ZPRespPtr),y + sta (ZPCtxPtr),y + + jsr CORE.FreeRespData + + clc + rts + +.97 jsr CORE.FreeRespData + +.98 lda #MLI.E.LOCKED + sec +.99 rts +*-------------------------------------- +INIT.TreeConnect + ldx #S.SMB.H.CMD.TREE.CONNECT.ANDX + jsr CORE.ReqSetupX + + ldx #0 + +.1 lda SMB.TreeConnect.H,x + sta (ZPReqPtr),y + iny + inx + cpx #SMB.TreeConnect.H.Len + bne .1 + + jsr CORE.ReqSetupPtr2 + + lda #0 + jsr CORE.PutBytePtr2 PASSWORD = "\0" + + jsr CORE.AppendPathPtr2 + jsr CORE.AddYReqLenPtr2 + + iny + \0 from password + + ldx #0 + +.4 lda SMB.TreeConnect.T,x + jsr CORE.PutBytePtr2 + iny + inx + cpx #SMB.TreeConnect.T.Len + bne .4 + + tya + ldy ByteCountOfs + sta (ZPReqPtr),y + + jsr CORE.SetReqLen + jsr INIT.WriteSocket + bcs .99 + + jsr INIT.ReadSocket + bcs .99 + + jsr CORE.GetRespData + + ldy #S.NETBIOS+S.SMB.H.STATUS + lda (ZPRespPtr),y + bne .97 + + ldy #S.NETBIOS+S.SMB.H.TID + lda (ZPRespPtr),y + sta (ZPCtxPtr),y + iny + lda (ZPRespPtr),y + sta (ZPCtxPtr),y + +.8 jsr CORE.FreeRespData + + clc + rts + +.97 jsr CORE.FreeRespData + +.98 lda #MLI.E.IO + sec +.99 rts +*-------------------------------------- +INIT.ReadSocket lda #TIMEOUT.MAX + sta TimeOut + +.1 >SLEEP + + lda hSocket + >LIBCALL hLIBTCPIP,LIBTCPIP.Recv + bcc .99 + + cmp #E.NODATA + sec + bne .99 + + lda TimeOut + bne .1 + + lda #MLI.E.OFFLINE + +.99 rts +*-------------------------------------- +INIT.WriteSocket + >PUSHB hSocket + >PUSHW ZPReqPtr + >PUSHW ZPReqLen + >LIBCALL hLIBTCPIP,LIBTCPIP.Send + rts +*-------------------------------------- +MAN +SAVE usr/src/sbin/cifsd.s.init +LOAD usr/src/sbin/cifsd.s +ASM diff --git a/LIB/LIBCIFS.S.IO.txt b/SBIN/CIFSD.S.IO.txt similarity index 51% rename from LIB/LIBCIFS.S.IO.txt rename to SBIN/CIFSD.S.IO.txt index c87b51b8..e2da5e0a 100644 --- a/LIB/LIBCIFS.S.IO.txt +++ b/SBIN/CIFSD.S.IO.txt @@ -1,25 +1,106 @@ NEW AUTO 3,1 *-------------------------------------- -CIFS.ChTyp -CIFS2.ChTyp -*-------------------------------------- -CIFS.ChMod -CIFS2.ChMod -*-------------------------------------- -CIFS.FStat -*-------------------------------------- -CIFS2.FStat lda #MLI.E.BADCALL +IO.CallBack >STYA SaveYA + + bit CIFS.Status + bmi .1 Busy.... + + jsr IO.SaveZP + + jmp (J.IO.Q,x) + +.1 ldy #S.PS.PID + lda (pPS),y + cmp CIFS.PID + bne .2 + + jsr IO.SaveZP + + jmp (J.IO.R,x) + +.2 lda #0 sec rts *-------------------------------------- -CIFS.Stat >STYA pPath resolved path +IO.SaveZP ldy #ZS.END-ZS.START-1 -* jsr ClearSocket +.1 lda ZS.START,y + sta SaveZP,y + dey + bpl .1 - jsr GetCTX + >LDYA SaveYA - jsr RequestT2SetupX + rts +*-------------------------------------- +IO.Sleep ldy #S.PS.PID + lda (pPS),y + sta CIFS.PID + + dec CIFS.Status + + stz CIFS.Cnt + stz CIFS.Cnt+1 + +IO.SleepContZ lda #TIMEOUT.MAX + sta TimeOut + +IO.SleepCont lda #0 + sec + bra IO.RestoreZP +*-------------------------------------- +IO.Exit stz CIFS.Status +*-------------------------------------- +IO.RestoreZP php + pha + phx + phy + + lda hResp + beq .1 + + stz hResp + + >SYSCALL2 FreeMem + +.1 ldy #ZS.END-ZS.START-1 + +.2 lda SaveZP,y + sta ZS.START,y + dey + bpl .2 + + ply + plx + pla + plp + rts +*-------------------------------------- +IO.Q.ChOwn +IO.R.ChOwn +*-------------------------------------- +IO.Q.ChTyp +IO.R.ChTyp +*-------------------------------------- +IO.Q.ChAux +IO.R.ChAux +*-------------------------------------- +IO.Q.SetAttr +IO.R.SetAttr +*-------------------------------------- +IO.Q.ChMod +IO.R.ChMod +*-------------------------------------- +IO.Q.FStat +*-------------------------------------- +IO.R.FStat lda #MLI.E.BADCALL + sec + rts +*-------------------------------------- +IO.Q.Stat >STYA pPath resolved path + + jsr CORE.ReqT2SetupX ldx #0 @@ -30,56 +111,56 @@ CIFS.Stat >STYA pPath resolved path cpx #SMB.QueryPathInfo.Len bne .1 - jsr ReqT2SetupPtr2 + jsr CORE.ReqT2SetupPtr2 - jsr AppendPathPtr2 - - jsr AddYReqLenPtr2 + jsr CORE.AppendPathPtr2 - jsr SetT2ReqLen - jsr WriteSocket + jsr CORE.AddYReqLenPtr2 + + jsr CORE.SetT2ReqLen + + jsr IO.WriteSocket bcs .9 - jmp Sleep + jmp IO.Sleep -.9 >RET 4 +.9 >POP 4 + + jmp IO.Exit *-------------------------------------- -CIFS2.Stat jsr ReadSocket - bcs .9 +IO.R.Stat jsr IO.ReadSocket + bvs .99 - jsr GetRespData + bcs .98 - jsr CheckSMBStatus + jsr CORE.CheckSMBStatus lda #MLI.E.INVPATH Return this for stat() match ProDOS Behavior - bcs .90 + bcs .98 - jsr GetRespDataPtr1 - jsr FileInfo2StatBuf + jsr CORE.GetRespDataPtr1 + jsr IO.FileInfo2StatBuf >PULLW ZPPtr2 Stat Buffer inc pStack Skip Filename inc pStack - jsr StatBuf2Ptr2 + jsr IO.StatBuf2Ptr2 - jmp Exit.OK + clc -.9 jsr Exit.NODATA - beq .99 + jmp IO.Exit -.90 >POP 4 +.98 >POP 4 -.99 rts + jmp IO.Exit + +.99 jmp IO.SleepCont *-------------------------------------- -CIFS.MKDir >STYA pPath resolved path +IO.Q.MKDir >STYA pPath resolved path -* jsr ClearSocket - - jsr GetCtx - - jsr RequestT2SetupX + jsr CORE.ReqT2SetupX ldx #0 @@ -90,42 +171,41 @@ CIFS.MKDir >STYA pPath resolved path cpx #SMB.CreateDirectory.Len bne .1 - jsr AppendPath + jsr CORE.AppendPath lda #0 sta (ZPReqPtr),y iny - jsr SetT2ReqLenYA + jsr CORE.SetT2ReqLenYA - jsr WriteSocket - bcs .9 + jsr IO.WriteSocket + bcs .99 - jmp Sleep + jmp IO.Sleep -.9 >RET 4 +.99 >POP 4 + + jmp IO.Exit *-------------------------------------- -CIFS2.MKDir jsr ReadSocket - bcs .9 +IO.R.MKDir jsr IO.ReadSocket + bvs .99 - jsr GetRespData + bcs .98 - jsr CheckSMBStatus - bcs .90 + jsr CORE.CheckSMBStatus +* bcs .98 - jmp Exit.OK +.98 >POP 4 -.9 jsr Exit.NODATA - beq .99 + jmp IO.Exit -.90 >POP 4 - -.99 rts +.99 jmp IO.SleepCont *-------------------------------------- -CIFS.OpenDir >STYA pPath resolved path +IO.Q.OpenDir >STYA pPath resolved path - jsr CIFS.NewFD - bcs .9 + jsr IO.NewFD + bcs .98 lda #S.FD.T.DIR sta (pFD) @@ -142,24 +222,20 @@ CIFS.OpenDir >STYA pPath resolved path >PUSHWZ >PUSHB hFD >SYSCALL2 mknod - bcc .9 - - jsr CIFS.FreeFD - stz CIFS.Status - + bcc .98 + + pha + jsr IO.FreeFD + pla sec -.9 rts +.98 jmp IO.Exit *-------------------------------------- -CIFS2.OpenDir lda #MLI.E.BADCALL - sec - rts +* IO.R.OpenDir *-------------------------------------- -CIFS.ReadDir jsr CIFS.GetFD - -* jsr ClearSocket - - jsr GetCtx +* A = hDIR +*-------------------------------------- +IO.Q.ReadDir jsr IO.GetFD ldy #S.FD.DIR.EPB lda (pFD),y @@ -167,15 +243,15 @@ CIFS.ReadDir jsr CIFS.GetFD lda #MLI.E.EOF sec - rts + jmp IO.Exit -.1 iny +.1 iny #S.FD.DIR.FC lda (pFD),y - iny + iny #S.FD.DIR.FC+1 ora (pFD),y - bne CIFS.ReadDir.Next + bne IO.Q.ReadDir.Next - jsr RequestT2SetupX + jsr CORE.ReqT2SetupX ldx #0 @@ -186,10 +262,10 @@ CIFS.ReadDir jsr CIFS.GetFD cpx #SMB.FindFirst2.Len bne .2 - bra CIFS.ReadDir.Send + bra IO.Q.ReadDir.Send -CIFS.ReadDir.Next - jsr RequestT2SetupX +IO.Q.ReadDir.Next + jsr CORE.ReqT2SetupX ldx #0 @@ -215,11 +291,12 @@ CIFS.ReadDir.Next sta (ZPReqPtr),y ply -CIFS.ReadDir.Send + +IO.Q.ReadDir.Send lda (pPath) beq .1 - jsr AppendPath + jsr CORE.AppendPath lda #'\' sta (ZPReqPtr),y @@ -233,24 +310,23 @@ CIFS.ReadDir.Send sta (ZPReqPtr),y iny - jsr SetT2ReqLenYA + jsr CORE.SetT2ReqLenYA + jsr IO.WriteSocket + bcs .99 - jsr WriteSocket - bcs .9 + jmp IO.Sleep - jmp Sleep - -.9 rts +.99 jmp IO.Exit *-------------------------------------- -CIFS2.ReadDir jsr CIFS.GetFD +IO.R.ReadDir jsr IO.GetFD - jsr ReadSocket - bcs .9 + jsr IO.ReadSocket + bvs .99 - jsr GetRespData + bcs .98 - jsr CheckSMBStatus - bcs .90 + jsr CORE.CheckSMBStatus + bcs .98 ldy #S.FD.DIR.FC lda (pFD),y @@ -264,7 +340,7 @@ CIFS2.ReadDir jsr CIFS.GetFD tax dey ora (ZPRespPtr),y - beq .90 + beq .97 lda (ZPRespPtr),y @@ -274,27 +350,30 @@ CIFS2.ReadDir jsr CIFS.GetFD txa sta (pFD),y -.2 jsr GetRespDataPtr1 - jsr CIFS2.ReadDir.GetBuf - bcs .99 +.2 jsr CORE.GetRespDataPtr1 + jsr IO.R.ReadDir.GetBuf + bcs .98 - jsr GetRespDataPtr1 - jsr CIFS2.ReadDir.FillBuf + jsr CORE.GetRespDataPtr1 + jsr IO.R.ReadDir.FillBuf - jsr Exit.OK - - >LDYA BufPtr + lda hBuf + >SYSCALL2 GetMemPtr ldx hBuf - clc -.90 rts +* clc -.9 jmp Exit.NODATA + jmp IO.Exit -.99 stz CIFS.Status - jmp FreeRespData +.97 lda #MLI.E.IO + + sec + +.98 jmp IO.Exit + +.99 jmp IO.SleepCont *-------------------------------------- -CIFS2.ReadDir.GetBuf +IO.R.ReadDir.GetBuf ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H Search Count lda bFlag bne .10 @@ -314,46 +393,48 @@ CIFS2.ReadDir.GetBuf dey lda (ZPRespPtr),y Search Count - beq .99 + beq .98 + tax lda #1 +Ending 0 sta ZPPtr2 stz ZPPtr2+1 -.1 jsr AddSTAT2Ptr2 +.1 jsr IO.AddSTAT2Ptr2 lda #22 clc - jsr AddA2Ptr1 + jsr IO.AddA2Ptr1 lda (ZPPtr1) Filename Len sec +\0 - jsr AddA2Ptr2 + jsr IO.AddA2Ptr2 lda (ZPPtr1) Filename Len inc +1 skip Filename Len sec +\0 - jsr AddA2Ptr1 + jsr IO.AddA2Ptr1 dex bne .1 >LDYA ZPPtr2 >SYSCALL2 GetMem - bcs .9 + bcs .99 - >STYA BufPtr >STYA ZPPtr2 stx hBuf -.9 rts +* clc -.99 lda #MLI.E.EOF - sec rts + +.98 lda #MLI.E.EOF + sec +.99 rts *-------------------------------------- -CIFS2.ReadDir.FillBuf +IO.R.ReadDir.FillBuf ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H Search Count lda bFlag bne .10 @@ -366,18 +447,18 @@ CIFS2.ReadDir.FillBuf .1 phx - jsr FileInfo2StatBuf + jsr IO.FileInfo2StatBuf lda #22 clc - jsr AddA2Ptr1 - + jsr IO.AddA2Ptr1 + lda (ZPPtr1) tax Save Filename Len - + inc ZPPtr1 Skip Filename Len bne .2 - + inc ZPPtr1+1 .2 ldy #$ff @@ -389,7 +470,7 @@ CIFS2.ReadDir.FillBuf txa sec - jsr AddA2Ptr1 + jsr IO.AddA2Ptr1 txa sec @@ -397,13 +478,13 @@ CIFS2.ReadDir.FillBuf bcc .7 tay - + lda (ZPPtr2),y cmp #'.' bne .7 ldx #0 - + .4 phy Y = '.' offset phx @@ -411,15 +492,15 @@ CIFS2.ReadDir.FillBuf .5 iny lda (ZPPtr2),y beq .51 - + cmp #'A' bcc .50 - + cmp #'Z'+1 bcs .50 - + eor #$20 - + .50 cmp PRODOS.FT.TXT,x bne .6 @@ -432,11 +513,11 @@ CIFS2.ReadDir.FillBuf tax lda PRODOS.FT.HEX,x sta StatBuf+S.STAT.P.TYPE - + ply lda #0 sta (ZPPtr2),y - + tya bra .70 @@ -444,24 +525,24 @@ CIFS2.ReadDir.FillBuf clc adc #4 tax - + ply - + cpx #PRODOS.FT.END bne .4 - + tya * sec adc #3 bra .70 - + .7 txa .70 sec +\0 - jsr AddA2Ptr2 + jsr IO.AddA2Ptr2 - jsr StatBuf2Ptr2 + jsr IO.StatBuf2Ptr2 - jsr AddSTAT2Ptr2 + jsr IO.AddSTAT2Ptr2 .8 plx dex @@ -472,8 +553,8 @@ CIFS2.ReadDir.FillBuf rts *-------------------------------------- -CIFS.CloseReg -CIFS.CloseDir tax +IO.Q.CloseReg +IO.Q.CloseDir tax lda hFDs.hName-1,x beq .1 @@ -489,26 +570,18 @@ CIFS.CloseDir tax stz hFDs-1,x >SYSCALL2 FreeMem - stz CIFS.Status - clc - rts -*-------------------------------------- -CIFS2.CloseDir lda #MLI.E.INVPATH - sec - rts -*-------------------------------------- -CIFS.ChOwn -CIFS2.ChOwn - lda #MLI.E.BADCALL - sec - rts -*-------------------------------------- -CIFS.FOpen >STYA pPath resolved path +* clc - jsr GetCtx + jmp IO.Exit +*-------------------------------------- +* IO.R.CloseDir +*-------------------------------------- +* short int fopen ( const char *filename, short int flags, short int ftype, int auxtype ); +*-------------------------------------- +IO.Q.FOpen >STYA pPath resolved path ldx #S.SMB.H.CMD.NT.CREATE.ANDX - jsr RequestSetupX + jsr CORE.ReqSetupX ldx #0 @@ -519,20 +592,20 @@ CIFS.FOpen >STYA pPath resolved path cpx #SMB.ComCreate.H.Len bne .1 - jsr ReqSetupPtr2 + jsr CORE.ReqSetupPtr2 ldy #2 lda (pStack),y TYPE pha - - jsr AppendPathPtr2 + + jsr CORE.AppendPathPtr2 pla beq .2 - jsr AppendTypePtr2 + jsr CORE.AppendTypePtr2 -.2 jsr AddYReqLen +.2 jsr CORE.AddYReqLen tya @@ -540,7 +613,7 @@ CIFS.FOpen >STYA pPath resolved path sta (ZPReqPtr),y inc +1 for \0 - jsr Add2ByteCount + jsr CORE.Add2ByteCount ldx #1 FILE_OPEN @@ -564,26 +637,55 @@ CIFS.FOpen >STYA pPath resolved path ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 CreateDisposition sta (ZPReqPtr),y - jsr SetReqLen + jsr CORE.SetReqLen + jsr IO.WriteSocket + bcs .99 - jsr WriteSocket - bcs .9 + jmp IO.Sleep - jmp Sleep +.99 >POP 6 -.9 >RET 6 + jmp IO.Exit *-------------------------------------- -CIFS2.FOpen jsr ReadSocket - bcs .9 +IO.R.FOpen jsr IO.ReadSocket + bvs .99 - jsr GetRespData + bcs .98 - jsr CheckSMBStatus - bcs .90 + jsr CORE.CheckSMBStatus + bcs .98 - jsr CIFS.NewFD - bcs .91 - + jsr IO.NewFD + bcs .98 + + jsr IO.R.FOpen.SetFD + + ldy #4 path + + lda (pStack),y + >PUSHA + lda (pStack),y + >PUSHA + + >PUSHWZ mod + >PUSHB hFD + >SYSCALL2 mknod + bcc .98 + + pha + + jsr IO.FreeFD + + pla + sec + +.98 >POP 6 + + jmp IO.Exit + +.99 jmp IO.SleepCont +*-------------------------------------- +IO.R.FOpen.SetFD lda #S.FD.T.REG sta (pFD) @@ -599,7 +701,7 @@ CIFS2.FOpen jsr ReadSocket pla sta (pFD),y - ldy #3 fopen flags + ldy #3 fopen flags lda (pStack),y bit #O.APPEND beq .3 @@ -614,7 +716,7 @@ CIFS2.FOpen jsr ReadSocket bne .1 ldx #4 - ldy #S.FD.REG.REF+2 + ldy #S.FD.REG.FPOS .2 pla sta (pFD),y @@ -622,42 +724,14 @@ CIFS2.FOpen jsr ReadSocket dex bne .2 - bra .8 + rts -.3 jsr CIFS.Seek0 - -.8 ldy #4 path - - lda (pStack),y - >PUSHA - lda (pStack),y - >PUSHA - - >PUSHWZ mod - >PUSHB hFD - >SYSCALL2 mknod - bcc .91 - - jsr CIFS.FreeFD - sec - -.91 stz CIFS.Status - jsr FreeRespData - bra .90 - -.9 jsr Exit.NODATA - beq .99 - -.90 >POP 6 - -.99 rts +.3 jmp IO.Seek0 *-------------------------------------- -CIFS.FClose jsr CIFS.GetFD - - jsr GetCtx +IO.Q.FClose jsr IO.GetFD ldx #S.SMB.H.CMD.CLOSE - jsr RequestSetupX + jsr CORE.ReqSetupX ldx #0 @@ -683,43 +757,42 @@ CIFS.FClose jsr CIFS.GetFD dey sta (ZPReqPtr),y - jsr SetReqLen - - jsr WriteSocket - bcs .9 - - jmp Sleep - -.9 rts -*-------------------------------------- -CIFS2.FClose sta hFILE - - jsr ReadSocket - bcs .9 - - jsr GetRespData - - jsr CheckSMBStatus + jsr CORE.SetReqLen + jsr IO.WriteSocket bcs .99 - lda hFILE - jsr CIFS.CloseReg + jmp IO.Sleep - jmp Exit.OK - -.9 jmp Exit.NODATA - -.99 rts +.99 jmp IO.Exit *-------------------------------------- -CIFS.FRead ldy #4 hFILE +IO.R.FClose sta hFILE + + jsr IO.ReadSocket + bvs .99 + + bcs .98 + + jsr CORE.CheckSMBStatus + bcs .98 + + lda hFILE + jsr IO.Q.CloseReg + + clc + +.98 jmp IO.Exit + +.99 jmp IO.SleepCont +*-------------------------------------- +* +*-------------------------------------- +IO.Q.FRead ldy #4 hFILE lda (pStack),y - jsr CIFS.GetFD - - jsr GetCtx + jsr IO.GetFD ldx #S.SMB.H.CMD.READ.ANDX - jsr RequestSetupX + jsr CORE.ReqSetupX ldx #0 @@ -730,9 +803,9 @@ CIFS.FRead ldy #4 hFILE cpx #SMB.ComRead.H.Len bne .1 - jsr ReqSetupPtr2 + jsr CORE.ReqSetupPtr2 - jsr CIFS.RWGetFidOfs + jsr IO.RWGetFidOfs ldy #1 DataLen HI lda (pStack),y @@ -751,22 +824,23 @@ CIFS.FRead ldy #4 hFILE txa sta (ZPReqPtr),y - jsr SetReqLen + jsr CORE.SetReqLen + jsr IO.WriteSocket + bcs .99 - jsr WriteSocket - bcs .9 + jmp IO.Sleep - jmp Sleep +.99 >POP 5 -.9 >RET 5 + jmp IO.Exit *-------------------------------------- -CIFS2.FRead jsr ReadSocket - bcs .9 +IO.R.FRead jsr IO.ReadSocket + bvs .99 - jsr GetRespData + bcs .98 - jsr CheckSMBStatus - bcs .90 + jsr CORE.CheckSMBStatus + bcs .98 ldy #S.NETBIOS+S.SMB.H+11 DataLength LO lda (ZPRespPtr),y @@ -774,11 +848,9 @@ CIFS2.FRead jsr ReadSocket ora (ZPRespPtr),y bne .10 - jsr Exit.OK - lda #MLI.E.EOF sec - bra .90 + bra .98 .10 ldy #S.NETBIOS+S.SMB.H+13 DataOffset LO @@ -805,10 +877,10 @@ CIFS2.FRead jsr ReadSocket lda (ZPRespPtr),y tax - jsr CIFS.CopyX + jsr IO.CopyXPtr1Ptr2 ldy #S.NETBIOS+S.SMB.H+11 - jsr CIFS2.RWSetOfsY + jsr IO.RWSetPFosY ldy #S.NETBIOS+S.SMB.H+12 DataLength HI lda (ZPRespPtr),y @@ -835,34 +907,34 @@ CIFS2.FRead jsr ReadSocket lda #0 sta (pStack) DataLen LO -.7 jsr Exit.OK - - ldy #1 DataLen HI +.7 ldy #1 DataLen HI lda (pStack),y ora (pStack) DataLen LO - bne .8 + bne .80 >LDYA CIFS.Cnt - bra .90 + clc + +.98 >POP 5 -.8 jmp Sleep2 Back to CIFS.FRead for next chunk + jmp IO.Exit -.9 jsr Exit.NODATA - beq .99 +.99 jmp IO.SleepCont -.90 >POP 5 -.99 rts +.80 stz CIFS.Status back to Q + + jmp IO.SleepContZ Back to CIFS.FRead for next chunk *-------------------------------------- -CIFS.FWrite ldy #4 hFILE +* int fwrite ( short int stream, const void * ptr, int count ); +*-------------------------------------- +IO.Q.FWrite ldy #4 hFILE lda (pStack),y - jsr CIFS.GetFD - - jsr GetCtx + jsr IO.GetFD ldx #S.SMB.H.CMD.WRITE.ANDX - jsr RequestSetupX + jsr CORE.ReqSetupX ldx #0 @@ -873,9 +945,9 @@ CIFS.FWrite ldy #4 hFILE cpx #SMB.ComWrite.H.Len bne .1 - jsr ReqSetupPtr2 + jsr CORE.ReqSetupPtr2 - jsr CIFS.RWGetFidOfs + jsr IO.RWGetFidOfs ldy #3 DataPtr HI lda (pStack),y @@ -928,12 +1000,11 @@ CIFS.FWrite ldy #4 hFILE plx - jsr CIFS.CopyX + jsr IO.CopyXPtr1Ptr2 - jsr SetReqLen - - jsr WriteSocket - bcs .9 + jsr CORE.SetReqLen + jsr IO.WriteSocket + bcs .99 ldy #1 DataLen HI lda (pStack),y @@ -947,25 +1018,27 @@ CIFS.FWrite ldy #4 hFILE inc DataPtr + $100 sta (pStack),y - jmp Sleep + jmp IO.Sleep .7 lda #0 sta (pStack) DataLen = 0 - jmp Sleep + jmp IO.Sleep -.9 >RET 5 +.99 >POP 5 + + jmp IO.Exit *-------------------------------------- -CIFS2.FWrite jsr ReadSocket - bcs .9 +IO.R.FWrite jsr IO.ReadSocket + bvs .99 - jsr GetRespData + bcs .98 - jsr CheckSMBStatus - bcs .90 + jsr CORE.CheckSMBStatus + bcs .98 ldy #S.NETBIOS+S.SMB.H+5 Count LO - jsr CIFS2.RWSetOfsY + jsr IO.RWSetPFosY ldy #S.NETBIOS+S.SMB.H+5 Count LO lda (ZPRespPtr),y @@ -979,65 +1052,77 @@ CIFS2.FWrite jsr ReadSocket lda #0 sta (pStack) DataLen LO -.7 jsr Exit.OK - - ldy #1 DataLen HI +.7 ldy #1 DataLen HI lda (pStack),y ora (pStack) DataLen LO - - bne .8 + bne .80 >LDYA CIFS.Cnt + clc - bra .90 -.8 jmp Sleep2 +.98 >POP 5 -.9 jsr Exit.NODATA - beq .99 + jmp IO.Exit -.90 >POP 5 -.99 rts +.99 jmp IO.SleepCont + +.80 stz CIFS.Status back to Q + + jmp IO.SleepContZ *-------------------------------------- -CIFS.FFlush clc Nothing to do +IO.Q.FFlush +IO.R.FFlush clc Nothing to do rts *-------------------------------------- -CIFS2.FFlush +* int fseek( short int stream, long offset, short int whence ); *-------------------------------------- -CIFS.FSeek ldy #5 hFILE +IO.Q.FSeek ldy #5 hFILE lda (pStack),y - jsr CIFS.GetFD + jsr IO.GetFD >PULLA tax whence - + >PULLL ZPPtr1 ZPPtr2 inc pStack - + + >POP 6 + + clc + + jmp IO.Exit +*-------------------------------------- +* IO.R.FSeek +*-------------------------------------- +* long ftell( short int stream ); +*-------------------------------------- +IO.Q.FTell jsr IO.GetFD + + ldy #S.FD.REG.FPOS+3 + +.1 lda (pFD),y + >PUSHA + dey + cpy #S.FD.REG.FPOS-1 + bne .1 clc - rts + + jmp IO.Exit *-------------------------------------- -CIFS2.FSeek +* IO.R.FTell *-------------------------------------- -CIFS.FTell +IO.Q.FEOF *-------------------------------------- -CIFS2.FTell -*-------------------------------------- -CIFS.FEOF -*-------------------------------------- -CIFS2.FEOF lda #MLI.E.BADCALL +IO.R.FEOF lda #MLI.E.BADCALL sec rts *-------------------------------------- -CIFS.Remove >STYA pPath resolved path - -* jsr ClearSocket - - jsr GetCTX +IO.Q.Remove >STYA pPath resolved path ldx #S.SMB.H.CMD.DELETE - jsr RequestSetupX + jsr CORE.ReqSetupX ldx #0 @@ -1048,13 +1133,10 @@ CIFS.Remove >STYA pPath resolved path cpx #SMB.ComDelete.H.Len bne .1 - jsr ReqSetupPtr2 + jsr CORE.ReqSetupPtr2 - lda #$04 BufferFormat - jsr PutBytePtr2 - - jsr AppendPathPtr2 - jsr AddYReqLen + jsr CORE.AppendPathPtr2BF4 + jsr CORE.AddYReqLen tya inc +1 for BufferFormat @@ -1063,37 +1145,30 @@ CIFS.Remove >STYA pPath resolved path ldy ByteCountOfs sta (ZPReqPtr),y - jsr SetReqLen - - jsr WriteSocket - bcs .9 - - jmp Sleep - -.9 rts -*-------------------------------------- -CIFS2.Remove jsr ReadSocket - bcs .9 - - jsr GetRespData - - jsr CheckSMBStatus + jsr CORE.SetReqLen + jsr IO.WriteSocket bcs .99 - jmp Exit.OK + jmp IO.Sleep -.9 jmp Exit.NODATA - -.99 rts +.99 jmp IO.Exit *-------------------------------------- -CIFS.Rename >STYA pPath resolved src path +IO.R.Remove jsr IO.ReadSocket + bvs .99 -* jsr ClearSocket + bcs .98 - jsr GetCTX + jsr CORE.CheckSMBStatus +* bcs .98 + +.98 jmp IO.Exit + +.99 jmp IO.SleepCont +*-------------------------------------- +IO.Q.Rename >STYA pPath resolved src path ldx #S.SMB.H.CMD.RENAME - jsr RequestSetupX + jsr CORE.ReqSetupX ldx #0 @@ -1104,17 +1179,14 @@ CIFS.Rename >STYA pPath resolved src path cpx #SMB.ComRename.H.Len bne .1 - jsr ReqSetupPtr2 + jsr CORE.ReqSetupPtr2 - lda #$04 BufferFormat - jsr PutBytePtr2 - - jsr AppendPathPtr2 + jsr CORE.AppendPathPtr2BF4 tya inc +1 for BufferFormat inc +1 for \0 - jsr Add2ByteCount + jsr CORE.Add2ByteCount lda (pStack) sta pPath @@ -1132,10 +1204,7 @@ CIFS.Rename >STYA pPath resolved src path cmp #'/' bne .2 - lda #$04 BufferFormat - jsr PutBytePtr2 - - jsr AppendPathPtr2 + jsr CORE.AppendPathPtr2 tya inc +1 for BufferFormat @@ -1144,31 +1213,31 @@ CIFS.Rename >STYA pPath resolved src path ldy ByteCountOfs sta (ZPReqPtr),y - jsr SetReqLen - - jsr WriteSocket - bcs .9 - - jmp Sleep - -.9 >RET 4 -*-------------------------------------- -CIFS2.Rename jsr ReadSocket - bcs .9 - - jsr GetRespData - - jsr CheckSMBStatus + jsr CORE.SetReqLen + jsr IO.WriteSocket bcs .99 - jsr Exit.OK - bra .99 + jmp IO.Sleep -.9 jmp Exit.NODATA +.99 >POP 4 -.99 >RET 4 + jmp IO.Exit *-------------------------------------- -CIFS.NewFD ldx #1 +IO.R.Rename jsr IO.ReadSocket + bvs .99 + + bcs .98 + + jsr CORE.CheckSMBStatus +* bcs .98 + +.98 >POP 4 + + jmp IO.Exit + +.99 jmp IO.SleepCont +*-------------------------------------- +IO.NewFD ldx #1 .1 lda hFDs-1,x beq .2 @@ -1189,13 +1258,13 @@ CIFS.NewFD ldx #1 >STYA pFD stx hFD - + txa ldx hFILE - + sta hFDs-1,x stz hFDs.hName-1,x - + lda hHandler ldy #S.FD.PFT sta (pFD),y @@ -1204,7 +1273,7 @@ CIFS.NewFD ldx #1 .9 rts *-------------------------------------- -CIFS.GetFD sta hFILE +IO.GetFD sta hFILE tax phx @@ -1219,18 +1288,17 @@ CIFS.GetFD sta hFILE >STYA pFD rts *-------------------------------------- -CIFS.FreeFD pha +IO.FreeFD pha lda hFD >SYSCALL2 FreeMem - + ldx hFILE stz hFDs-1,x - + pla rts *-------------------------------------- -CIFS.RWGetFidOfs - ldx #6 +IO.RWGetFidOfs ldx #6 ldy #S.FD.REG.REF .1 lda (pFD),y @@ -1250,18 +1318,18 @@ CIFS.RWGetFidOfs rts *-------------------------------------- -CIFS2.RWSetOfsY phy +IO.RWSetPFosY phy ldy #4 hFILE lda (pStack),y - jsr CIFS.GetFD + jsr IO.GetFD ply Count LO phy lda (ZPRespPtr),y - ldy #S.FD.REG.REF+2 + ldy #S.FD.REG.FPOS clc adc (pFD),y sta (pFD),y @@ -1270,7 +1338,7 @@ CIFS2.RWSetOfsY phy iny Count HI lda (ZPRespPtr),y - ldy #S.FD.REG.REF+3 + ldy #S.FD.REG.FPOS+1 adc (pFD),y sta (pFD),y bcc .8 @@ -1288,7 +1356,8 @@ CIFS2.RWSetOfsY phy .8 rts *-------------------------------------- -CIFS.CopyX ldy #0 +IO.CopyXPtr1Ptr2 + ldy #0 .1 lda (ZPPtr1),y sta (ZPPtr2),y @@ -1298,18 +1367,181 @@ CIFS.CopyX ldy #0 rts *-------------------------------------- -CIFS.Seek0 ldx #4 - ldy #S.FD.REG.REF+2 +IO.AddA2Ptr1 adc ZPPtr1 + sta ZPPtr1 + bcc .8 + + inc ZPPtr1+1 + +.8 rts +*-------------------------------------- +IO.StatBuf2Ptr2 ldy #S.STAT-1 + +.1 lda StatBuf,y + sta (ZPPtr2),y + dey + bpl .1 + + rts +*-------------------------------------- +IO.AddSTAT2Ptr2 lda #S.STAT + clc +*-------------------------------------- +IO.AddA2Ptr2 adc ZPPtr2 + sta ZPPtr2 + bcc .8 + + inc ZPPtr2+1 + +.8 rts +*-------------------------------------- +IO.Seek0 ldy #S.FD.REG.FPOS+3 + lda #0 .1 sta (pFD),y - iny - dex + dey + cpy #S.FD.REG.FPOS-1 bne .1 rts *-------------------------------------- +IO.ReadSocket stz hResp + + lda hSocket + ldx #LIBTCPIP.Recv + jsr IO.GoLIBTCPIP + clv + + bcc .8 + + cmp #E.NODATA + bne .99 + + lda TimeOut + beq .98 + + bit .99 set V + + lda #0 + sec + rts + +.98 lda #MLI.E.OFFLINE + sec +.99 rts + +.8 jmp CORE.GetRespData +*-------------------------------------- +IO.WriteSocket >PUSHB hSocket + >PUSHW ZPReqPtr + >PUSHW ZPReqLen + ldx #LIBTCPIP.Send +*-------------------------------------- +IO.GoLIBTCPIP jmp (pLIBTCPIP) +*-------------------------------------- +IO.FileInfo2StatBuf + ldx #S.STAT-1 + +.1 stz StatBuf,x + dex + bpl .1 + + ldy #0 Creation Date/Time + ldx #S.STAT.CTIME + + jsr IO.FileInfo2StatBufDT + + ldy #4 Last Access Date/Time + ldx #S.STAT.ATIME + + jsr IO.FileInfo2StatBufDT + + ldy #8 Last Write Date/Time + ldx #S.STAT.MTIME + + jsr IO.FileInfo2StatBufDT + + ldy #12+3 Data Size + ldx #3 + +.7 lda (ZPPtr1),y + sta StatBuf+S.STAT.SIZE,x + dey + dex + bpl .7 + + ldy #20 File Attribute + lda (ZPPtr1),y + and #$10 + beq .8 + + lda /S.STAT.MODE.DIR + sta StatBuf+S.STAT.MODE+1 + +.8 rts +*-------------------------------------- +* YYYYYYYM MMM DDDDD +* HHHHHmmm mmm SSSSS +*-------------------------------------- +IO.FileInfo2StatBufDT + iny + lda (ZPPtr1),y + lsr + + php + + clc + adc #80 + sta StatBuf+S.TIME.YEAR,x + lda #19 + adc #0 + sta StatBuf+S.TIME.CENTURY,x + + dey + + plp + lda (ZPPtr1),y + ror + lsr + lsr + lsr + lsr + sta StatBuf+S.TIME.MONTH,x + + lda (ZPPtr1),y + and #$1F + sta StatBuf+S.TIME.DAY,x + + iny + iny + + lda (ZPPtr1),y + and #$1F + asl + sta StatBuf+S.TIME.SECOND,x + + lda (ZPPtr1),y + and #$E0 + sta StatBuf+S.TIME.MINUTE,x + + lda (ZPPtr1),y + lsr + ror StatBuf+S.TIME.MINUTE,x + lsr + ror StatBuf+S.TIME.MINUTE,x + lsr + ror StatBuf+S.TIME.MINUTE,x + lsr StatBuf+S.TIME.MINUTE,x + lsr StatBuf+S.TIME.MINUTE,x + + sta StatBuf+S.TIME.HOUR,x + +* TODO : S.TIME.WDAY + + rts +*-------------------------------------- MAN -SAVE usr/src/lib/libcifs.io.s -LOAD usr/src/lib/libcifs.s +SAVE usr/src/sbin/cifsd.s.io +LOAD usr/src/sbin/cifsd.s ASM diff --git a/SBIN/CIFSD.S.txt b/SBIN/CIFSD.S.txt index 02a526d4..78311585 100644 --- a/SBIN/CIFSD.S.txt +++ b/SBIN/CIFSD.S.txt @@ -9,11 +9,12 @@ AUTH .EQ 0 *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i + .INB inc/kernel.i .INB inc/mli.e.i .INB inc/eth.i .INB inc/libtcpip.i + .INB inc/net.tcpip.i .INB inc/net.smb.i - .INB inc/libcifs.i .DO AUTH .INB inc/libcrypt.i .FIN @@ -25,11 +26,16 @@ TIMEOUT.MAX .EQ 250 25 sec. .DUMMY .OR ZPBIN ZS.START -ZPIPCfgPtr .BS 2 -hSocket .BS 1 -TimeOut .BS 1 -hSMBContext .BS 1 -hMount .BS 1 +ZPCtxPtr .BS 2 +ZPReqPtr .BS 2 +ZPReqLen .BS 2 +ZPRespPtr .BS 2 + +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 +pPath .BS 2 +pFD .BS 2 + ZS.END .ED *-------------------------------------- * File Header (16 Bytes) @@ -53,7 +59,6 @@ CS.START cld .DA CS.DOEVENT .DA CS.QUIT L.LIBTCPIP .DA LIBTCPIP -L.LIBCIFS .DA LIBCIFS .DO AUTH L.LIBCRYPT .DA LIBCRYPT .FIN @@ -63,6 +68,120 @@ L.MSG.UNKNOWN .DA MSG.UNKNOWN L.MSG.CONNECTED .DA MSG.CONNECTED L.MSG.NOCONN .DA MSG.NOCONN L.MSG.MOUNTED .DA MSG.MOUNTED +*-------------------------------------- +L.NETBIOS.H .DA NETBIOS.H +L.IO.CallBack .DA IO.CallBack +*-------------------------------------- +J.IO.Q .DA A2osX.BADCALL + .DA IO.Q.ChMod + .DA IO.Q.FStat + .DA IO.Q.Stat + .DA IO.Q.MKDir + .DA A2osX.BADCALL MKNod + .DA A2osX.BADCALL MKFIFO + .DA A2osX.BADCALL Pipe + + .DA IO.Q.OpenDir + .DA IO.Q.ReadDir + .DA IO.Q.CloseDir + + .DA A2osX.BADCALL Open + .DA A2osX.BADCALL Close + .DA A2osX.BADCALL Read + .DA A2osX.BADCALL Write + .DA IO.Q.ChOwn + + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + + .DA IO.Q.FOpen + .DA IO.Q.FClose + .DA IO.Q.FRead + .DA IO.Q.FWrite + .DA IO.Q.FFlush + .DA IO.Q.FSeek + .DA IO.Q.FTell + .DA IO.Q.FEOF + + .DA IO.Q.Remove + .DA IO.Q.Rename + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA IO.Q.ChTyp + .DA IO.Q.ChAux + .DA IO.Q.SetAttr +*-------------------------------------- +J.IO.R .DA A2osX.BADCALL + .DA IO.R.ChMod + .DA IO.R.FStat + .DA IO.R.Stat + .DA IO.R.MKDir + .DA A2osX.BADCALL MKNod + .DA A2osX.BADCALL MKFIFO + .DA A2osX.BADCALL Pipe + + .DA A2osX.BADCALL IO.R.OpenDir + .DA IO.R.ReadDir + .DA A2osX.BADCALL IO.R.CloseDir + + .DA A2osX.BADCALL Open + .DA A2osX.BADCALL Close + .DA A2osX.BADCALL Read + .DA A2osX.BADCALL Write + .DA IO.R.ChOwn + + .DA A2osX.BADCALL FPutC... + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL ...UngetC + + .DA IO.R.FOpen + .DA IO.R.FClose + .DA IO.R.FRead + .DA IO.R.FWrite + .DA IO.R.FFlush + .DA A2osX.BADCALL IO.R.FSeek + .DA A2osX.BADCALL IO.R.FTell + .DA IO.R.FEOF + + .DA IO.R.Remove + .DA IO.R.Rename + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA IO.R.ChTyp + .DA IO.R.ChAux + .DA IO.R.SetAttr + .DA 0 *-------------------------------------- * Called once at process creation @@ -73,12 +192,8 @@ CS.INIT >LDYA L.LIBTCPIP bcs .9 sta hLIBTCPIP - - >LDYA L.LIBCIFS - >SYSCALL LoadLib - bcs .9 - - sta hLIBCIFS + >SYSCALL2 GetMemPtr + >STYA pLIBTCPIP .DO AUTH >LDYA L.LIBCRYPT @@ -88,63 +203,26 @@ CS.INIT >LDYA L.LIBTCPIP sta hLIBCRYPT .FIN * clc -.9 -CS.INIT.RTS rts +.9 rts *-------------------------------------- * Called until exit with CS * if RUN exits with CC, RUN entered again *-------------------------------------- CS.RUN lda hSocket - beq .1 + bne .8 - lda #0 - clc - rts - -.1 jsr CS.RUN.CheckTCPIP - bcs CS.INIT.RTS + jsr CS.RUN.CheckTCPIP + bcs .9 jsr CS.RUN.CheckArgs - bcs CS.INIT.RTS + bcs .9 jsr CS.RUN.Connect - bcs CS.INIT.RTS - - >PUSHB hSocket - >PUSHBI 0 - >LIBCALL hLIBCIFS,LIBCIFS.Negotiate - bcs CS.INIT.RTS - - sta hSMBContext - - >PUSHB hSocket - >PUSHB hSMBContext - >PUSHWZ - >PUSHWZ - >PUSHWZ - >PUSHBI 0 - >LIBCALL hLIBCIFS,LIBCIFS.SessionSetup - bcs CS.INIT.RTS - - >PUSHB hSocket - >PUSHB hSMBContext - lda #2 - >SYSCALL ArgV - >PUSHYA - >PUSHBI 0 - >LIBCALL hLIBCIFS,LIBCIFS.TreeConnect bcs .9 - >PUSHB hSocket - >PUSHB hSMBContext - lda #3 - >SYSCALL ArgV - >PUSHYA - >LIBCALL hLIBCIFS,LIBCIFS.Mount + jsr INIT.Setup bcs .9 - sta hMount - >PUSHW L.MSG.MOUNTED lda #2 @@ -158,7 +236,7 @@ CS.RUN lda hSocket >PUSHBI 4 >SYSCALL PrintF - lda #0 +.8 lda #0 clc .9 rts *-------------------------------------- @@ -166,8 +244,8 @@ CS.RUN.CheckTCPIP >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ? bcs .9 - >STYA ZPIPCfgPtr - lda (ZPIPCfgPtr) Configured ? + >STYA ZPPtr1 + lda (ZPPtr1) Configured ? bmi .1 >LDYA L.MSG.TCPIPERR @@ -183,7 +261,7 @@ CS.RUN.CheckTCPIP ldy #S.IPCFG.IP+3 -.3 lda (ZPIPCfgPtr),y +.3 lda (ZPPtr1),y pha dey cpy #S.IPCFG.IP-1 @@ -245,10 +323,10 @@ CS.RUN.CheckArgs .3 lda #4 >SYSCALL ArgV bcc .4 - - - -.4 + + + +.4 .8 clc CS.RUN.CheckArgs.RTS @@ -320,13 +398,15 @@ CS.QUIT lda hMount >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown -.2 - .DO AUTH +.2 lda hSMBContext + beq .3 + + >SYSCALL FreeMem + +.3 .DO AUTH lda hLIBCRYPT jsr .7 .FIN - lda hLIBCIFS - jsr .7 lda hLIBTCPIP .7 beq .8 @@ -335,6 +415,10 @@ CS.QUIT lda hMount .8 clc rts +*-------------------------------------- + .INB usr/src/sbin/cifsd.s.init + .INB usr/src/sbin/cifsd.s.core + .INB usr/src/sbin/cifsd.s.io *-------------------------------------- CS.END *-------------------------------------- @@ -342,8 +426,7 @@ CS.END *-------------------------------------- LIBTCPIP .AZ "libtcpip" hLIBTCPIP .BS 1 -LIBCIFS .AZ "libcifs" -hLIBCIFS .BS 1 +pLIBTCPIP .BS 2 .DO AUTH LIBCRYPT .AZ "libcrypt" hLIBCRYPT .BS 1 @@ -355,6 +438,249 @@ MSG.UNKNOWN .CZ "CIFSD:%s: Unknown host\r\n" MSG.NOCONN .CZ "CIFSD:No Connection To %s\r\n" MSG.CONNECTED .CZ "CIFSD:Connected To %s\r\n" MSG.MOUNTED .CZ "CIFSD:%s Mounted As %s\r\n" +*-------------------------------------- +PRODOS.FT.HEX .HS 0406FAFCFDCBCCCFFF +PRODOS.FT.TXT .AZ "txt" + .AZ "bin" + .AZ "asm" + .AZ "bas" + .AZ "var" + .AZ "pix" + .AZ "fon" + .AZ "pak" + .AZ "sys" +PRODOS.FT.END .EQ *-PRODOS.FT.TXT +PRODOS.FT.DFLT .AZ "$ " +*-------------------------------------- +SMBERR01 .DA #2,#3,#32 +MLIERR01 .DA #MLI.E.FNOTFND,#MLI.E.PNOTFND,#MLI.E.OPEN +*-------------------------------------- +NETBIOS.H .DA #0 DIRECT TCP TRANSPORT + .DA #0 24 BITS LENGTH + .DA /SMB.NegReq.end-SMB.H + .DA #SMB.NegReq.end-SMB.H +*-------------------------------------- +SMB.H .DA #$FF + .AS "SMB" + .DA #S.SMB.H.CMD.NEGOTIATE + .HS 00000000 + .DA #0 S.SMB.H.FLAGS + .DA S.SMB.H.FLAGS2.LONGNAMES + .DA 0 PIDHI + .HS 0000000000000000 SECFEAT + .DA 0 RSVD + .DA $FFFF TID + .DA $FFFE PIDLO + .BS 2 UID + .DA 0 MID +*-------------------------------------- +SMB.NegReq .DA #0 WORD COUNT + + .DA #SMB.NegReq.end-2-* ByteCount + .DA #0 + +* .DA #2 +* .AZ "PC NETWORK PROGRAM 1.0" +* .DA #2 +* .AZ "LANMAN1.0" +* .DA #2 +* .AZ "Windows for Workgroups 3.1a" +* .DA #2 +* .AZ "LM1.2X002" +* .DA #2 +* .AZ "LANMAN2.1" + .DA #2 + .AZ "NT LM 0.12" +* .DA #2 +* .AZ "SMB 2.002" +* .DA #2 +* .AZ "SMB 2.???" +SMB.NegReq.end .EQ * +*-------------------------------------- +SMB.SessionSetup.H + .DA #13 WORD COUNT + .HS FF000000 NO MORE CMD + .DA 1280 MAX BUFFER + .DA 2 MAX MPX COUNT + .HS 0000 VC NUMBER + .HS 00000000 SESSION KEY + .BS 2 CI PASS LEN (ANSI) + .DA 0 CS PASS LEN (UNICODE) + .HS 00000000 + .HS 00000000 CAPABILITIES +SMB.SessionSetup.H.Len .EQ *-SMB.SessionSetup.H +* .BS 2 ByteCount +SMB.SessionSetup.Guest +* .AZ "" Password + .AZ "Guest" Account Name + .AZ "?" Primary Domain +SMB.SessionSetup.Guest.Len .EQ *-SMB.SessionSetup.Guest +SMB.SessionSetup.T + .AZ "A2osX" Native OS + .AZ "A2osX-CIFSD" Native LANMAN +SMB.SessionSetup.T.Len .EQ *-SMB.SessionSetup.T +*-------------------------------------- +SMB.TreeConnect.H + .DA #4 WORD COUNT + .HS FF000000 NO MORE CMD + .DA 0 + .DA 1 PASSWORD LEN (1 for "\0") +SMB.TreeConnect.H.Len .EQ *-SMB.TreeConnect.H +* .BS 2 ByteCount +* .AZ "" PASSWORD +* .AZ "_temp" PATH +SMB.TreeConnect.T + .AZ "A:" Disk Share +SMB.TreeConnect.T.Len .EQ *-SMB.TreeConnect.T +*-------------------------------------- +SMB.ComCreate.H .DA #24 WORD COUNT + .HS FF000000 NO MORE CMD + .HS 00 Reserved + .BS 2 NameLength + .HS 00000000 Flags + .HS 00000000 RootDirectoryFID + .HS 00000010 DesiredAccess = GENERIC_ALL + .HS 0000000000000000 AllocationSize + .HS 00000000 ExtFileAttributes + .HS 00000000 ShareAccess + .BS 4 CreateDisposition + .HS 00000000 CreateOptions + .HS 00000000 ImpersonationLevel + .HS 00 SecurityFlags +SMB.ComCreate.H.Len .EQ *-SMB.ComCreate.H +* .BS 2 ByteCount +* .AZ "path\file" +*-------------------------------------- +SMB.ComClose.H .DA #3 WORD COUNT + .BS 2 FID + .HS 00000000 LastTimeModified + .HS 0000 ByteCount +SMB.ComClose.H.Len .EQ *-SMB.ComClose.H +*-------------------------------------- +SMB.ComFlush.H .DA #1 WORD COUNT + .BS 2 FID + .HS 0000 ByteCount +SMB.ComFlush.H.Len .EQ *-SMB.ComFlush.H +*-------------------------------------- +SMB.ComDelete.H .DA #1 WORD COUNT + .HS 0000 SearchAttributes +SMB.ComDelete.H.Len .EQ *-SMB.ComDelete.H +* .BS 2 ByteCount +* .HS 04 BufferFormat +* .AZ "path\file" +*-------------------------------------- +SMB.ComRename.H .DA #1 WORD COUNT + .HS 0000 SearchAttributes +SMB.ComRename.H.Len .EQ *-SMB.ComRename.H +* .BS 2 ByteCount +* .HS 04 BufferFormat +* .AZ "oldpath" +* .HS 04 BufferFormat +* .AZ "newpath" +*-------------------------------------- +SMB.ComRead.H .DA #10 WORD COUNT + .HS FF000000 NO MORE CMD + .BS 2 FID + .BS 4 Offset + .BS 2 MaxCountOfBytesToReturn + .HS 0000 MinCountOfBytesToReturn + .HS 00000000 Timeout + .HS 0000 Remaining +SMB.ComRead.H.Len .EQ *-SMB.ComRead.H +* .BS 2 ByteCount +*-------------------------------------- +SMB.ComWrite.H .DA #12 WORD COUNT + .HS FF000000 NO MORE CMD + .BS 2 FID + .BS 4 Offset + .HS 00000000 Timeout + .HS 0000 +* .HS 0100 WriteMode=WritethroughMode + .HS 0000 Remaining + .HS 0000 Reserved + .BS 2 DataLength + .DA S.SMB.H+SMB.ComWrite.H.Len+2 DataOffset (+2 skip ByteCount) +SMB.ComWrite.H.Len .EQ *-SMB.ComWrite.H +* .BS 2 ByteCount +* DATA..... +*-------------------------------------- +SMB.Trans2.H .DA #15 WORD COUNT + .BS 2 TotalParamCount + .DA 0 TotalDataCount + .DA 10 MaxParameterCount + .DA 450 MaxDataCount + .DA #0 MaxSetupCount + .HS 00 Reserved1 + .DA 0 Flags + .HS 00000000 Timeout + .HS 0000 Reserved2 + .BS 2 ParameterCount + .DA 68 ParameterOffset + .HS 0000 DataCount + .HS 0000 DataOffset + .DA #1 SetupCount + .HS 00 Reserved3 +SMB.Trans2.H.Len .EQ *-SMB.Trans2.H +*-------------------------------------- +SMB.FindFirst2 .DA 1 TRANS2_FIND_FIRST2 + .BS 2 PrmCnt + .HS 000000 Padding + .DA $0037 SearchAttributes + .DA 1024 SearchCount + .DA 2 Flags + .DA SMB_INFO_STANDARD InformationLevel + .HS 00000000 SearchStorageType +* .AZ "path\*" +SMB.FindFirst2.Len .EQ *-SMB.FindFirst2 +*-------------------------------------- +SMB.FindNext2 .DA 2 TRANS2_FIND_NEXT2 + .BS 2 PrmCnt + .HS 000000 Padding + .BS 2 SID + .DA 1024 SearchCount + .DA SMB_INFO_STANDARD InformationLevel + .HS 00000000 ResumeKey + .DA 2+8 Flags +* .AZ "path\*" +SMB.FindNext2.Len .EQ *-SMB.FindNext2 +*-------------------------------------- +SMB.QueryPathInfo + .DA 5 TRANS2_QUERY_PATH_INFORMATION + .BS 2 PrmCnt + .HS 000000 Padding + .DA SMB_INFO_STANDARD InformationLevel + .HS 00000000 SearchStorageType +* .AZ "filename" +SMB.QueryPathInfo.Len .EQ *-SMB.QueryPathInfo +*-------------------------------------- +SMB.CreateDirectory + .DA 13 TRANS2_CREATE_DIRECTORY + .BS 2 PrmCnt + .HS 000000 Padding + .HS 00000000 Reserved +* .AZ "DirName" +SMB.CreateDirectory.Len .EQ *-SMB.CreateDirectory +*-------------------------------------- +CIFS.Status .BS 1 +CIFS.PID .BS 1 +CIFS.Cnt .BS 2 +*-------------------------------------- +hSocket .BS 1 +hSMBContext .BS 1 +hMount .BS 1 +hReq .BS 1 +hResp .BS 1 +hBuf .BS 1 +hFD .BS 1 +hFILE .BS 1 + +TimeOut .BS 1 +bFlag .BS 1 +ByteCountOfs .BS 1 + +StatBuf .BS S.STAT +SaveYA .BS 2 +SaveZP .BS ZS.END-ZS.START *-------------------------------------- .DUMMY .OR 0 diff --git a/SHARED/X.CPMVRM.S.txt b/SHARED/X.CPMVRM.S.txt index 2d86989c..9e3314cb 100644 --- a/SHARED/X.CPMVRM.S.txt +++ b/SHARED/X.CPMVRM.S.txt @@ -73,9 +73,8 @@ CS.INIT dex bpl .2 -.99 >PUSHW L.MSG.USAGE - >PUSHBI 0 - >SYSCALL PrintF +.99 >LDYA L.MSG.USAGE + >SYSCALL PutS lda #E.SYN sec rts diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index 1ca06fae..c56295c9 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -25,9 +25,8 @@ K.OpenDir jsr PFT.CheckPathYA */-------------------------------------- * # ReadDir * ## C -* `int readdir (int hDIR, S.DIRENT * dirent);` +* `struct dirent *readdir (short int hDIR);` * ## ASM -* `>PUSHW dirent` * `lda hDIR` * `>SYSCALL readdir` * ## RETURN VALUE diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 49046402..e7ac188c 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -465,7 +465,6 @@ CPU.Init >PUSHWI MSG.CPU stz A2osX.CPUSPEED+1 - ldx A2osX.HZ ldy #0 php @@ -481,29 +480,31 @@ CPU.Init >PUSHWI MSG.CPU .2 lda VBL //e : wait VBL low bmi .2 -.3 pha (3) - pla (4) - pha (3) - pla (4) - pha (3) - pla (4) - pha (3) +.3 ldx A2osX.HZ + +.4 pha (3) pla (4) + nop + nop + nop pha (3) pla (4) + + dex + bne .4 iny cpy #100 bne .5 - ldy #0 inc A2osX.CPUSPEED+1 + ldy #0 -.5 eor VBL (4) - bpl .3 (2*) - - dex - bne .3 +.5 eor VBL + bpl .3 + + lda VBL + bmi .3 bra CPU.InitOK *-------------------------------------- @@ -522,14 +523,14 @@ CPU.Init2c lda RDIOUDIS bit IO.IIC.CLRVBLIRQ clear //c IRQ -.3 lda #60 - +.3 ldx A2osX.HZ + .4 pha (3) pla (4) pha (3) pla (4) - dec + dex bne .4 iny @@ -544,9 +545,6 @@ CPU.Init2c lda RDIOUDIS bit IO.IIC.CLRVBLIRQ clear //c IRQ - dex - bne .3 - pla Disable VBLIRQ ? bpl .8 diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index ab40af55..86f5fef5 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -366,14 +366,14 @@ K.FreeMem.ERR >PUSHWI .1 tya hMem n Y >PUSHA -* >DEBUG + ldy #S.PS.PID lda (pPS),y >PUSHA >PUSHBI 2 >SYSCALL2 printf - +* >DEBUG lda #E.INVH sec rts diff --git a/SYS/KERNEL.S.PFT.txt b/SYS/KERNEL.S.PFT.txt index 1e8e3f70..e1bd885a 100644 --- a/SYS/KERNEL.S.PFT.txt +++ b/SYS/KERNEL.S.PFT.txt @@ -104,13 +104,13 @@ PFT.CheckNodeA stx .80+1 Save SYSCALL # tax beq .9 - + cpx #K.hFD.MAX+1 bcs .9 lda hFDs-1,x beq .9 - + jsr DEV.GetPFD ldy #S.FD.PFT