NEW AUTO 3,1 Enable MASM3 auto line num .LIST OFF .OP 65C02 Target CPU, must match CPU level in header .OR $2000 usualy $2000, but any value > $100 allowed .TF SBIN/CIFSD *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/ETH.I .INB INC/LIBTCPIP.I .INB INC/NET.SMB.I *-------------------------------------- TIMEOUT.MAX .EQ 100 10 sec. *-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- .DUMMY .OR ZPBIN ZS.START ZPIPCfgPtr .BS 2 TimeOut .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 #S.PS.F.EVENT .DA #0 .DA CS.END-CS.START Code Size (without Constants) .DA DS.END-DS.START Data SegmentSize .DA #64 Stack Size .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT L.LIBTCPIP .DA LIBTCPIP L.MSG.USAGE .DA MSG.USAGE L.MSG.UNKNOWN .DA MSG.UNKNOWN L.SMB.Negotiate .DA SMB.Negotiate .DA 0 *-------------------------------------- * Called once at process creation * Put code for loading LIB here *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP >SYSCALL LoadLib bcs .9 sta hLIBTCPIP >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ? bcs .9 >STYA ZPIPCfgPtr lda (ZPIPCfgPtr) Configured ? bmi .8 lda #E.SYN sec rts .8 clc .9 rts *-------------------------------------- * Called until exit with CS * if RUN exits with CC, RUN entered again *-------------------------------------- CS.RUN jsr CS.RUN.CheckArgs bcs .90 jsr CS.RUN.Connect >DEBUG bcs .9 jsr CS.RUN.Negotiate lda #0 sec .9 rts .90 >LDYA L.MSG.USAGE >SYSCALL puts lda #E.SYN sec rts *-------------------------------------- CS.RUN.CheckArgs ldy #S.PS.ARGC lda (pPs),y cmp #3 bcc .9 lda #TIMEOUT.MAX sta TimeOut .1 >PUSHEA.G SA.REMOTE+S.SOCKADDR.ADDR lda #1 >SYSCALL ArgV >PUSHYA >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME bcc .2 >SLEEP lda TimeOut bne .1 lda #1 >SYSCALL ArgV >PUSHYA >PUSHBI 2 >LDYA L.MSG.UNKNOWN >SYSCALL printf sec .9 rts .2 lda #AF.INET >STA.G SA.LOCAL >STA.G SA.REMOTE ldy #S.IPCFG.IP+3 .3 lda (ZPIPCfgPtr),y pha dey cpy #S.IPCFG.IP-1 bne .3 ldy #SA.REMOTE+S.SOCKADDR.PORT .4 pla sta (pData),y iny cpy #SA.REMOTE+S.SOCKADDR.PORT+4 bne .4 lda #TCP.PORT.CIFS >STA.G SA.REMOTE+S.SOCKADDR.PORT iny lda /TCP.PORT.CIFS sta (pData),y clc rts *-------------------------------------- CS.RUN.Connect >PUSHBI 0 no protocol lda #S.SOCKET.T.SEQPACKET >LIBCALL hLIBTCPIP,LIBTCPIP.Socket bcs .9 >STA.G hSocket >PUSHEA.G SA.LOCAL >LDA.G hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Bind bcs .9 >PUSHEA.G SA.REMOTE >LDA.G hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Connect .9 rts *-------------------------------------- CS.RUN.Negotiate >PUSHWI SMB.Negotiate.end-SMB.Negotiate >PUSHW L.SMB.Negotiate >LDA.G hSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Send rts *-------------------------------------- * Called if option S.PS.F.EVENT enabled in Header * Timer Event : every 10th seconds *-------------------------------------- CS.DOEVENT lda (pEvent) bpl .9 is it a TIMER event? lda TimeOut beq .9 dec TimeOut .9 sec do not discard TIMER event rts *-------------------------------------- * Called once, when RUN exited with CS * Put code for unloading LIB here *-------------------------------------- CS.QUIT lda hLIBTCPIP beq .8 >SYSCALL UnloadLib .8 clc rts *-------------------------------------- CS.END *-------------------------------------- * Initialized DATA *-------------------------------------- LIBTCPIP .AZ "LIBTCPIP" hLIBTCPIP .BS 1 MSG.USAGE .AZ "Usage : CIFSD sharename mountpoint" MSG.UNKNOWN .AZ "%s: Unknown host\r\n" *-------------------------------------- SMB.Negotiate .DA #$FF .AS "SMB" .DA #S.SMB.HEADER.CMD.NEGOTIATE .HS 00000000 .DA #0 S.SMB.HEADER.FLAGS .DA /S.SMB.HEADER.FLAGS2.LONGNAMES .DA #S.SMB.HEADER.FLAGS2.LONGNAMES .DA 0 PIDHI .HS 0000000000000000 SECFEAT .DA 0 RSVD .DA $FFFF TID .DA $FEFF PIDLO .DA 0 UID .DA 0 MID .DA #0 WORD COUNT .DA /SMB.Negotiate.end-* .DA #SMB.Negotiate.end-* .DA #2 .AZ "NT LM 0.12" SMB.Negotiate.end .EQ * *-------------------------------------- * Per Process DATA segement (0 filled before INIT) *-------------------------------------- .DUMMY .OR 0 DS.START SA.LOCAL .BS 1 S.SOCKADDR.AF .BS 1 .BS 4 S.SOCKADDR.ADDR .BS 2 S.SOCKADDR.PORT SA.REMOTE .BS 1 S.SOCKADDR.AF .BS 1 .BS 4 S.SOCKADDR.ADDR .BS 2 S.SOCKADDR.PORT hSocket .BS 1 DS.END .ED *-------------------------------------- MAN SAVE USR/SRC/SBIN/CIFSD ASM