A2osX/BIN/ADT.S.txt

404 lines
7.9 KiB
Plaintext
Raw Normal View History

2018-12-11 06:44:57 +00:00
NEW
PREFIX
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/DEV/ADT
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MLI.E.I
.INB INC/ETH.I
.INB INC/LIBTCPIP.I
*--------------------------------------
RESP.BUFSIZE .EQ 1024
TIMEOUT.MAX .EQ 100 10 sec.
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPIPCfgPtr .BS 2
ZPHostPtr .BS 2
ZPPtr .BS 2
ZPCnt .BS 2
ZPReqBufPtr .BS 2
ZPReqBufLen .BS 2
ZPRespBufPtr .BS 2
ZPPayloadPtr .BS 2
ZPPayloadLen .BS 2
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 S.PS.F
.DA #0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA #16 SS
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
L.SA.LOCAL .DA SA.LOCAL
L.SA.REMOTE .DA SA.REMOTE
L.SA.REMOTE.AD .DA SA.REMOTE+S.SOCKADDR.ADDR
L.MSG.IPKO .DA MSG.IPKO
L.MSG.USAGE .DA MSG.USAGE
L.MSG.UNKNOWN .DA MSG.UNKNOWN
L.MSG.HOSTOK .DA MSG.HOSTOK
L.MSG.SKTKO .DA MSG.SKTKO
L.MSG.SKTOK .DA MSG.SKTOK
L.MSG.SKTERR .DA MSG.SKTERR
L.MSG.IOERR .DA MSG.IOERR
L.ADT.DIR .DA ADT.DIR
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib
bcs .9
sta hLIBTCPIP
.9 rts
*--------------------------------------
CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
>STYA ZPIPCfgPtr
lda (ZPIPCfgPtr) Configured ?
bmi CS.RUN.IPOK
>LDYA L.MSG.IPKO
>SYSCALL puts
lda #E.SYN
sec
rts
CS.RUN.IPOK ldy #S.IPCFG.IP+3
ldx #3
.1 lda (ZPIPCfgPtr),y
sta SA.LOCAL+S.SOCKADDR.ADDR,x
dey
dex
bpl .1
>INC.G ArgIndex
>SYSCALL ArgV
bcs .9
>STYA ZPHostPtr
jsr Init.Timeout
.2 >PUSHW L.SA.REMOTE.AD
>PUSHW ZPHostPtr
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME
bcc CS.RUN.HOSTOK
>SLEEP
jsr Wait.Timeout
bcc .2
>PUSHW ZPHostPtr
>PUSHBI 2
>LDYA L.MSG.UNKNOWN
>SYSCALL printf
bra CS.RUN.ESYN
.9 >PUSHBI 0
>LDYA L.MSG.USAGE
>SYSCALL printf
CS.RUN.ESYN lda #E.SYN
2019-10-03 06:25:27 +00:00
secCS.RUN.RTS
rts
2018-12-11 06:44:57 +00:00
CS.RUN.HOSTOK >INC.G ArgIndex
>SYSCALL ArgV
bcc .10
jmp CS.RUN.PORTOK
.10 >STYA ZPPtr
lda (ZPPtr)
cmp #'-'
beq .1
2019-10-03 06:25:27 +00:00
>LDYA ZPPtr
2018-12-11 06:44:57 +00:00
>SYSCALL atoi
bcs CS.RUN.RTS
>STYA SA.REMOTE+S.SOCKADDR.PORT
>INC.G ArgIndex
>SYSCALL ArgV
bcs .8
>STYA ZPPtr
lda (ZPPtr)
cmp #'-'
bne CS.RUN.ESYN
.1 ldy #1
lda (ZPPtr),y
cmp #'U'
bne .2
>INC.G ArgIndex
>SYSCALL ArgV
.9 bcs CS.RUN.ESYN
>STYA ZPReqBufPtr
>SYSCALL strlen
>STYA ZPReqBufLen
.8 bra CS.RUN.PORTOK
.2 cmp #'F'
bne CS.RUN.ESYN
>INC.G ArgIndex
>SYSCALL ArgV
bcs CS.RUN.RTS
CS.RUN.PORTOK >PUSHW ZPHostPtr
>PUSHW SA.REMOTE+S.SOCKADDR.PORT
ldx #3
.1 >PUSHB SA.REMOTE+S.SOCKADDR.ADDR,x
dex
bpl .1
>PUSHBI 8
>LDYA L.MSG.HOSTOK
>SYSCALL printf
CS.RUN.OPENSKT >PUSHBI 0 no protocol
lda #S.SOCKET.T.DGRAM
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs .9
>STA.G hSocket
pha
>PUSHW L.SA.LOCAL
pla
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcc .2
.9 >LDYA L.MSG.SKTKO
>SYSCALL puts
lda #E.SYN
2019-10-03 06:25:27 +00:00
sec
c rts
2018-12-11 06:44:57 +00:00
.2 >PUSHW L.SA.REMOTE
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcs .9
>LDYA L.MSG.SKTOK
>SYSCALL puts
>LDYAI RESP.BUFSIZE
>SYSCALL getmem
bcs .9
>STYA ZPRespBufPtr
txa
>STA.G hRespBuf
CS.RUN.GET jsr CS.RUN.DIR
bcs .99
jsr CS.RUN.DIRDECODE
bcs .99
.9 lda #0
sec
.99 rts
*--------------------------------------
CS.RUN.SKTERR pha
>PUSHA
>PUSHBI 1
>LDYA L.MSG.SKTERR
>SYSCALL printf
pla
sec
rts
*--------------------------------------
CS.RUN.IOERR pha
>PUSHA
>PUSHBI 1
>LDYA L.MSG.IOERR
>SYSCALL printf
pla
sec
rts
*--------------------------------------
CS.RUN.DIR jsr Init.Timeout
.10 >PUSHWI ADT.DIR.LEN
>PUSHW L.ADT.DIR
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcc .8
tay
bne .99
>SLEEP
jsr Wait.TimeOut
bcc .10
.99 lda #MLI.E.IO
sec
rts
.8 clc
rts
*--------------------------------------
CS.RUN.DIRDECODE
jsr Init.Timeout
.1 >SLEEP
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcc .2
tay
bne .8
>LDA.G bResponse
bne .81
jsr Wait.Timeout
bcs .99
bra .1
.2 >STA.G hFrame
>SYSCALL GetMemPtr
>STYA ZPRespBufPtr
ldy #S.UDP+1
lda (ZPRespBufPtr),y
cmp #$C1
bne .99
iny
lda (ZPRespBufPtr),y
sta ZPPayloadLen
iny
lda (ZPRespBufPtr),y
sta ZPPayloadLen+1
iny
lda (ZPRespBufPtr),y
cmp #$D3
bne .99
>DEBUG
jsr CS.RUN.UNRLE
>PUSHW ZPPayloadLen
>PUSHW ZPPayloadPtr
ldy #S.PS.hStdOut
lda (pPs),y
>SYSCALL fwrite
>INC.G bResponse
bra .1
.8 cmp #MLI.E.IO SKT Close ?
bne .9
.80 >LDA.G bResponse
beq .99
.81 clc
rts
.99 lda #MLI.E.IO
.9 sec
rts
*--------------------------------------
CS.RUN.UNRLE >LDYA ZPPayloadLen
>SYSCALL getmem
bcs .9
>STYA ZPPayloadPtr
>STYA ZPPtr
txa
>STA.G hPayloadBuf
lda ZPPayloadLen
eor #$ff
sta ZPCnt
lda ZPPayloadLen+1
eor #$ff
sta ZPCnt+1
ldx #0
ldy #S.UDP+8
.1 inc ZPCnt
bne .2
inc ZPCnt+1
beq .8
.2 txa
clc
adc (ZPRespBufPtr),y
tax
jsr .80
iny
bne .3
inc ZPRespBufPtr+1
2019-10-03 06:25:27 +00:00
.3 bra .1
.8 clc.9
rts
2018-12-11 06:44:57 +00:00
.80 sta (ZPPtr)
inc ZPPtr
bne .81
inc ZPPtr+1
.81 rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event?
>LDA.G TimeOut
beq .9
dec
sta (pData),y
.9 sec do not discard TIMER event
rts
*--------------------------------------
CS.QUIT >LDA.G hSocket
beq .1
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.1 lda hLIBTCPIP
beq .8
>SYSCALL UnloadLib
.8 clc
rts
*--------------------------------------
Init.Timeout lda #TIMEOUT.MAX
>STA.G TimeOut
rts
*--------------------------------------
Wait.TimeOut sec
>LDA.G TimeOut
beq .9
clc
.9 rts
*--------------------------------------
CS.END
LIBTCPIP .AZ "libtcpip"
hLIBTCPIP .BS 1
MSG.IPKO .AZ "TCP/IP Not Loaded/Configured."
MSG.USAGE .AS "Usage : ADT <ip|host> [port]\r\n"
.AS " -U Url\r\n"
.AZ " -F UrlFile\r\n"
MSG.UNKNOWN .AZ "%s: Unknown host\r\n"
MSG.HOSTOK .AZ "Connecting to %d.%d.%d.%d:%D (%s)..."
MSG.SKTKO .AZ "Failed to Open Socket."
MSG.SKTOK .AZ "Connected."
MSG.SKTERR .AZ "Socket Error : $%h\r\n"
MSG.IOERR .AZ "I/O Error : $%h\r\n"
*--------------------------------------
SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
.BS 1
.BS 4 S.SOCKADDR.ADDR
.BS 2 S.SOCKADDR.PORT
*--------------------------------------
SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
.BS 1
.BS 4 S.SOCKADDR.ADDR
.DA 6502
*--------------------------------------
ADT.DIR .HS C10100C4040101
ADT.DIR.LEN .EQ *-ADT.DIR
*--------------------------------------
.DUMMY
.OR 0
DS.START
ArgIndex .BS 1
hSocket .BS 1
hFrame .BS 1
hPayloadBuf .BS 1
hRespBuf .BS 1
bResponse .BS 1
TimeOut .BS 1
DS.END
.ED
*--------------------------------------
MAN
SAVE USR/SRC/BIN/ADT.S
ASM