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 ce291868..39afc461 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index aaabfece..20c5e401 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ 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