A2osX/BIN/PING.S.txt

444 lines
7.8 KiB
Plaintext
Raw Normal View History

NEW
2019-05-02 09:52:32 +00:00
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
2019-12-04 13:46:58 +00:00
.TF bin/ping
*--------------------------------------
2020-08-17 13:03:39 +00:00
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/eth.i
2022-11-02 06:54:30 +00:00
.INB inc/net.tcpip.i
2020-08-17 13:03:39 +00:00
.INB inc/libtcpip.i
*--------------------------------------
TIMEOUT.MAX .EQ 40 4 sec.
*--------------------------------------
2019-06-21 06:33:46 +00:00
.DUMMY
.OR ZPBIN
ZS.START
2019-11-15 07:17:31 +00:00
ZPIPCfgPtr .BS 2
ZPTmpPtr .BS 2
Identifier .BS 2
Sequence .BS 2
TimeOut.ms .BS 2
ArgIndex .BS 1
ArgHostName .BS 1
hSocket .BS 1
hFrame .BS 1
PingCount .BS 1
TimeOut .BS 1
2019-12-07 17:53:45 +00:00
IP.Remote .BS 4
2019-06-21 06:33:46 +00:00
ZS.END .ED
*--------------------------------------
2015-06-03 18:30:57 +00:00
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
2015-06-03 18:30:57 +00:00
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
2018-09-11 13:32:56 +00:00
.DA #S.PS.F.EVENT S.PS.F
.DA #0
2019-06-21 06:33:46 +00:00
.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
2015-06-03 18:30:57 +00:00
.DA 0
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
2022-11-02 06:54:30 +00:00
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
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.REPLY .DA MSG.REPLY
L.MSG.UNREACH .DA MSG.UNREACH
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
2018-07-19 15:33:55 +00:00
>SYSCALL LoadLib
bcs .9
sta hLIBTCPIP
.9 rts
*--------------------------------------
2019-01-16 21:51:57 +00:00
CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ?
>STYA ZPIPCfgPtr
lda (ZPIPCfgPtr) Configured ?
2019-12-07 17:53:45 +00:00
bmi .1
2019-11-15 07:17:31 +00:00
>LDYA L.MSG.IPKO
2020-02-28 07:21:46 +00:00
>SYSCALL PutS
2018-10-21 20:54:07 +00:00
lda #E.SYN
2019-10-03 06:25:27 +00:00
sec
2017-01-29 21:47:19 +00:00
rts
2022-11-02 06:54:30 +00:00
2019-12-07 17:53:45 +00:00
.1 ldy #DATA.Len-1
.2 lda ICMP.Request,y
sta (pData),y
dey
bpl .2
2022-11-02 06:54:30 +00:00
2019-11-15 07:17:31 +00:00
CS.RUN.IPOK inc ArgIndex
lda ArgIndex
2018-10-16 15:48:03 +00:00
>SYSCALL ArgV
2018-09-11 13:32:56 +00:00
bcs .8
2019-11-15 07:17:31 +00:00
2018-09-11 13:32:56 +00:00
>STYA ZPTmpPtr
lda (ZPTmpPtr)
cmp #'-'
2019-11-15 07:17:31 +00:00
bne .1
2017-12-22 21:24:30 +00:00
2022-11-02 06:54:30 +00:00
ldy #1
2018-09-11 13:32:56 +00:00
lda (ZPTmpPtr),y
beq .9
2018-09-11 13:32:56 +00:00
cmp #'0'
bcc .9
2019-11-15 07:17:31 +00:00
2018-09-11 13:32:56 +00:00
cmp #'9'+1
bcs .9
2019-11-15 07:17:31 +00:00
2018-09-11 13:32:56 +00:00
and #$0F
2019-11-15 07:17:31 +00:00
sta PingCount
2022-11-02 06:54:30 +00:00
bra CS.RUN.IPOK
2019-11-15 07:17:31 +00:00
.1 lda #TIMEOUT.MAX
2020-08-17 13:03:39 +00:00
sta TimeOut
2019-11-15 07:17:31 +00:00
2019-12-07 17:53:45 +00:00
.2 >PUSHEA.G SA.REMOTE+S.SOCKADDR.ADDR
2018-09-11 13:32:56 +00:00
>PUSHW ZPTmpPtr
2020-08-17 13:03:39 +00:00
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GetByName
2018-09-11 13:32:56 +00:00
bcc .3
2019-11-15 07:17:31 +00:00
>SLEEP
2020-08-17 13:03:39 +00:00
lda TimeOut
2019-11-15 07:17:31 +00:00
bne .2
2020-04-07 06:01:38 +00:00
>PUSHW L.MSG.UNKNOWN
2018-09-11 13:32:56 +00:00
>PUSHW ZPTmpPtr
2018-08-25 11:23:59 +00:00
>PUSHBI 2
bra .99
2019-11-15 07:17:31 +00:00
.3 lda ArgIndex
sta ArgHostName
2020-04-07 06:01:38 +00:00
jmp CS.RUN.IPOK
2019-11-15 07:17:31 +00:00
2019-12-07 17:53:45 +00:00
.8 >LDA.G SA.REMOTE+S.SOCKADDR.ADDR
2018-09-11 13:32:56 +00:00
bne CS.RUN.ARGSOK
2019-11-15 07:17:31 +00:00
2022-11-02 06:54:30 +00:00
.9 >PUSHW L.MSG.USAGE
2020-04-07 06:01:38 +00:00
>PUSHBI 0
2022-11-02 06:54:30 +00:00
2020-02-28 07:21:46 +00:00
.99 >SYSCALL PrintF
2018-08-25 11:23:59 +00:00
2018-10-21 20:54:07 +00:00
lda #E.SYN
2019-10-03 06:25:27 +00:00
sec
rts
2020-04-07 06:01:38 +00:00
CS.RUN.ARGSOK >PUSHW L.MSG.HOSTOK
2022-11-02 06:54:30 +00:00
2020-04-07 06:01:38 +00:00
ldx #4
ldy #SA.REMOTE+S.SOCKADDR.ADDR
2019-11-15 07:17:31 +00:00
2019-12-07 17:53:45 +00:00
.1 lda (pData),y
>PUSHA
2020-04-07 06:01:38 +00:00
iny
dex
2020-04-07 06:01:38 +00:00
bne .1
lda ArgHostName
>SYSCALL ArgV
>PUSHYA
2019-11-15 07:17:31 +00:00
2018-08-23 15:16:20 +00:00
>PUSHBI 6
2020-02-28 07:21:46 +00:00
>SYSCALL PrintF
2022-11-02 06:54:30 +00:00
CS.RUN.OPENSKT ldx #3
ldy #S.IPCFG.IP+3
2019-11-15 07:17:31 +00:00
.1 lda (ZPIPCfgPtr),y
2019-12-07 17:53:45 +00:00
sta IP.Remote,x
dey
dex
bpl .1
2019-11-15 07:17:31 +00:00
2019-12-07 17:53:45 +00:00
ldx #3
ldy #SA.LOCAL+S.SOCKADDR.ADDR+3
.2 lda IP.Remote,x
sta (pData),y
dey
dex
bpl .2
2022-11-02 06:54:30 +00:00
2023-11-12 13:20:15 +00:00
lda A2osX.R16
eor A2osX.T16+1
2019-12-07 17:53:45 +00:00
>STA.G SA.LOCAL+S.SOCKADDR.PORT
>STA.G SA.REMOTE+S.SOCKADDR.PORT
2019-11-15 07:17:31 +00:00
sta Identifier
2023-11-12 13:20:15 +00:00
lda A2osX.R16+1
eor A2osX.T16
2019-12-07 17:53:45 +00:00
>STA.G SA.LOCAL+S.SOCKADDR.PORT+1
>STA.G SA.REMOTE+S.SOCKADDR.PORT+1
2019-11-15 07:17:31 +00:00
sta Identifier+1
2021-05-19 12:44:47 +00:00
>PUSHBI S.SOCKET.T.RAW
2018-11-05 07:12:31 +00:00
>PUSHBI S.IP.PROTOCOL.ICMP
2020-08-17 13:03:39 +00:00
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
2018-11-05 16:28:40 +00:00
bcs .9
2019-11-15 07:17:31 +00:00
sta hSocket
2022-11-02 06:54:30 +00:00
2021-05-19 12:44:47 +00:00
>PUSHB hSocket
2019-12-07 17:53:45 +00:00
>PUSHEA.G SA.LOCAL
2018-11-05 07:12:31 +00:00
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
2018-11-05 16:28:40 +00:00
bcs .9
2019-11-15 07:17:31 +00:00
2021-05-19 12:44:47 +00:00
>PUSHB hSocket
2019-12-07 17:53:45 +00:00
>PUSHEA.G SA.REMOTE
2018-11-07 21:48:48 +00:00
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
2019-12-07 17:53:45 +00:00
bcc CS.RUN.SEND.ECHO
2019-11-15 07:17:31 +00:00
2018-11-05 16:28:40 +00:00
.9 >LDYA L.MSG.SKTKO
2020-02-28 07:21:46 +00:00
>SYSCALL PutS
2018-11-05 16:28:40 +00:00
lda #E.SYN
2019-10-03 06:25:27 +00:00
sec
2018-11-05 07:12:31 +00:00
rts
2022-11-02 06:54:30 +00:00
2019-10-03 06:25:27 +00:00
CS.RUN.SEND.ECHO
2019-12-07 17:53:45 +00:00
>SLEEP
2022-11-02 06:54:30 +00:00
2019-11-15 07:17:31 +00:00
lda Identifier
2020-08-17 20:47:31 +00:00
>STA.G Request+S.ICMP.IDENTIFIER-S.IP+1
2019-11-15 07:17:31 +00:00
lda Identifier+1
dey
sta (pData),y
2019-11-15 07:17:31 +00:00
inc Sequence
bne .1
2022-11-02 06:54:30 +00:00
2019-11-15 07:17:31 +00:00
inc Sequence+1
2022-11-02 06:54:30 +00:00
2019-11-15 07:17:31 +00:00
.1 lda Sequence
2020-08-17 20:47:31 +00:00
>STA.G Request+S.ICMP.SEQUENCE-S.IP+1
2019-11-15 07:17:31 +00:00
lda Sequence+1
dey
sta (pData),y
2021-05-19 12:44:47 +00:00
>PUSHB hSocket
2019-11-15 07:17:31 +00:00
>PUSHW pData
2021-05-19 12:44:47 +00:00
>PUSHWI ICMP.RequestLen
2020-08-17 13:03:39 +00:00
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcs CS.RUN.ERR
2022-11-02 06:54:30 +00:00
2019-11-15 07:17:31 +00:00
lda #TIMEOUT.MAX
2020-08-17 13:03:39 +00:00
sta TimeOut
CS.RUN.WAIT.REPLY
>SLEEP
2019-02-22 21:54:47 +00:00
ldy #S.PS.hStdIn
lda (pPS),y
2020-08-17 20:47:31 +00:00
>SYSCALL FEOF
2019-02-22 21:54:47 +00:00
bcs CS.RUN.ERR
tay
2022-11-02 06:54:30 +00:00
bne .1
2019-11-15 07:17:31 +00:00
2017-12-22 21:24:30 +00:00
>SYSCALL GetChar
2019-02-22 21:54:47 +00:00
bcs CS.RUN.ERR
2019-11-15 07:17:31 +00:00
cmp #3 Ctrl-C
2018-09-11 13:32:56 +00:00
beq CS.RUN.ERR CS
2019-08-06 07:14:22 +00:00
2019-11-15 07:17:31 +00:00
.1 lda hSocket
2018-10-29 08:41:10 +00:00
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv
2018-09-11 13:32:56 +00:00
bcc .2
2019-11-15 07:17:31 +00:00
2020-08-17 13:03:39 +00:00
lda TimeOut
2019-11-15 07:17:31 +00:00
bne CS.RUN.WAIT.REPLY
2018-09-11 13:32:56 +00:00
jsr CS.Print.UNREACH
bcs CS.RUN.ERR
bra .7
2019-11-15 07:17:31 +00:00
.2 sta hFrame
2018-07-18 15:30:42 +00:00
>SYSCALL GetMemPtr
2018-09-11 13:32:56 +00:00
>STYA ZPTmpPtr
2022-11-02 06:54:30 +00:00
ldy #S.ICMP.SEQUENCE
lda (ZPTmpPtr),y
cmp Sequence+1
bne .3
iny
lda (ZPTmpPtr),y
cmp Sequence
beq .4
.3 jsr CS.FrameDiscard
bra CS.RUN.WAIT.REPLY
2022-11-02 06:54:30 +00:00
.4 jsr CS.Print.REPLY
bcs CS.RUN.ERR
jsr CS.FrameDiscard
2019-11-15 07:17:31 +00:00
.7 lda PingCount
2018-09-11 13:32:56 +00:00
beq .8
2019-11-15 07:17:31 +00:00
dec PingCount
2019-12-06 07:15:51 +00:00
dec A=0
beq .80
2018-09-11 13:32:56 +00:00
.8 jmp CS.RUN.SEND.ECHO
2019-12-06 07:15:51 +00:00
.80 sec
CS.RUN.ERR rts
*--------------------------------------
2015-06-03 18:30:57 +00:00
CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event?
2019-11-15 07:17:31 +00:00
lda TimeOut
beq .9
2019-11-15 07:17:31 +00:00
dec TimeOut
.9 sec do not discard TIMER event
rts
*--------------------------------------
CS.Print.UNREACH
2020-04-07 06:01:38 +00:00
>PUSHW L.MSG.UNREACH
2022-11-02 06:54:30 +00:00
2020-04-07 06:01:38 +00:00
ldx #4
ldy #SA.REMOTE+S.SOCKADDR.ADDR
2019-11-15 07:17:31 +00:00
2019-12-07 17:53:45 +00:00
.1 lda (pData),y
>PUSHA
2020-04-07 06:01:38 +00:00
iny
2018-08-23 15:16:20 +00:00
dex
2020-04-07 06:01:38 +00:00
bne .1
2019-11-15 07:17:31 +00:00
2018-08-23 15:16:20 +00:00
>PUSHBI 4
2020-02-28 07:21:46 +00:00
>SYSCALL PrintF
rts
*--------------------------------------
CS.Print.REPLY lda #TIMEOUT.MAX
sec
2019-11-15 07:17:31 +00:00
sbc TimeOut
stz TimeOut.ms
stz TimeOut.ms+1
2018-09-11 13:32:56 +00:00
tax
beq .3
2019-11-15 07:17:31 +00:00
.1 lda TimeOut.ms
2022-11-02 06:54:30 +00:00
clc
adc #100
2019-11-15 07:17:31 +00:00
sta TimeOut.ms
bcc .2
2019-11-15 07:17:31 +00:00
inc TimeOut.ms+1
2018-09-11 13:32:56 +00:00
.2 dex
bne .1
2019-11-15 07:17:31 +00:00
2020-04-07 06:01:38 +00:00
.3 >PUSHW L.MSG.REPLY
2022-11-02 06:54:30 +00:00
2020-04-07 06:01:38 +00:00
ldx #4
ldy #S.IP.SRC
.4 >PUSHB (ZPTmpPtr),y
iny
dex
bne .4
2018-08-23 15:16:20 +00:00
2019-11-15 07:17:31 +00:00
ldy #S.ICMP.SEQUENCE
2018-09-11 13:32:56 +00:00
>PUSHB (ZPTmpPtr),y
2022-11-02 06:54:30 +00:00
iny
2018-09-11 13:32:56 +00:00
>PUSHB (ZPTmpPtr),y
2019-11-15 07:17:31 +00:00
2020-04-07 06:01:38 +00:00
ldy #S.IP.TTL
>PUSHB (ZPTmpPtr),y
2019-11-15 07:17:31 +00:00
2020-04-07 06:01:38 +00:00
>PUSHW TimeOut.ms
2018-08-23 15:16:20 +00:00
>PUSHBI 9
2022-11-02 06:54:30 +00:00
2020-02-28 07:21:46 +00:00
>SYSCALL PrintF
rts
*--------------------------------------
CS.QUIT jsr CS.FrameDiscard
lda hSocket
2018-09-11 13:32:56 +00:00
beq .2
2018-07-24 06:24:23 +00:00
2018-11-06 07:09:44 +00:00
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
2018-09-11 13:32:56 +00:00
.2 lda hLIBTCPIP
beq .8
2018-07-20 14:10:10 +00:00
>SYSCALL UnloadLib
2018-09-11 13:32:56 +00:00
.8 clc
rts
*--------------------------------------
CS.FrameDiscard lda hFrame
beq .1
stz hFrame
>SYSCALL FreeMem
.1 rts
*--------------------------------------
CS.END
2019-12-03 15:42:17 +00:00
LIBTCPIP .AZ "libtcpip"
2022-11-02 06:54:30 +00:00
MSG.IPKO .CZ "TCP/IP Not Loaded/Configured."
MSG.USAGE .CS "Usage : PING <ip|host>\r\n"
.CZ " -1-9 : Ping Count\r\n"
MSG.UNKNOWN .CZ "%s: Unknown host\r\n"
MSG.HOSTOK .CZ "PING %d.%d.%d.%d (%s)\r\n"
MSG.SKTKO .CZ "Failed to Open Socket."
MSG.UNREACH .CZ "%d.%d.%d.%d: TimeOut/Host unreachable\r\n"
MSG.REPLY .CZ "32 bytes from %d.%d.%d.%d, icmp_seq=%D, ttl=%d, time=%D ms\r\n"
hLIBTCPIP .BS 1
2018-08-23 15:16:20 +00:00
*--------------------------------------
ICMP.Request .DA #S.ICMP.TYPE.ECHOREQ
.DA #0 CODE
.DA 0 CHECKSUM
2019-11-15 07:17:31 +00:00
.BS 2 ID
.BS 2 DQ
.AS "ABCDEFGHIJKLMNOP"
.AS "QRSTUVWXYZ012345"
ICMP.RequestLen .EQ *-ICMP.Request
2019-12-07 17:53:45 +00:00
*--------------------------------------
.DA #AF.INET S.SOCKADDR.AF
.BS 1
.BS 4 S.SOCKADDR.ADDR
.BS 2 S.SOCKADDR.PORT
*--------------------------------------
.DA #AF.INET S.SOCKADDR.AF
.BS 1
.BS 4 S.SOCKADDR.ADDR
.BS 2
DATA.Len .EQ *-ICMP.Request
2015-06-03 18:30:57 +00:00
*--------------------------------------
.DUMMY
.OR 0
DS.START
2019-11-15 07:17:31 +00:00
Request .BS ICMP.RequestLen
2019-12-07 17:53:45 +00:00
SA.LOCAL .BS S.SOCKADDR
SA.REMOTE .BS S.SOCKADDR
DS.END .ED
*--------------------------------------
MAN
2020-08-17 13:03:39 +00:00
SAVE usr/src/bin/ping.s
ASM