Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-11-15 08:17:31 +01:00
parent 786a283d88
commit a4c15ff86a
2 changed files with 123 additions and 88 deletions

Binary file not shown.

View File

@ -15,8 +15,19 @@ TIMEOUT.MAX .EQ 100 10 sec.
.DUMMY .DUMMY
.OR ZPBIN .OR ZPBIN
ZS.START ZS.START
ZPIPCfgPtr .EQ ZPBIN ZPIPCfgPtr .BS 2
ZPTmpPtr .EQ ZPBIN+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
ZS.END .ED ZS.END .ED
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
@ -41,7 +52,6 @@ L.LIBTCPIP .DA LIBTCPIP
L.SA.LOCAL .DA SA.LOCAL L.SA.LOCAL .DA SA.LOCAL
L.SA.REMOTE .DA SA.REMOTE L.SA.REMOTE .DA SA.REMOTE
L.SA.REMOTE.AD .DA SA.REMOTE+S.SOCKADDR.ADDR L.SA.REMOTE.AD .DA SA.REMOTE+S.SOCKADDR.ADDR
L.ICMP.Request .DA ICMP.Request
L.MSG.IPKO .DA MSG.IPKO L.MSG.IPKO .DA MSG.IPKO
L.MSG.USAGE .DA MSG.USAGE L.MSG.USAGE .DA MSG.USAGE
L.MSG.UNKNOWN .DA MSG.UNKNOWN L.MSG.UNKNOWN .DA MSG.UNKNOWN
@ -62,19 +72,22 @@ CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ?
>STYA ZPIPCfgPtr >STYA ZPIPCfgPtr
lda (ZPIPCfgPtr) Configured ? lda (ZPIPCfgPtr) Configured ?
bmi CS.RUN.IPOK bmi CS.RUN.IPOK
>LDYA L.MSG.IPKO >LDYA L.MSG.IPKO
>SYSCALL puts >SYSCALL puts
lda #E.SYN lda #E.SYN
sec sec
rts rts
CS.RUN.IPOK
.1 >INC.G ArgIndex CS.RUN.IPOK inc ArgIndex
lda ArgIndex
>SYSCALL ArgV >SYSCALL ArgV
bcs .8 bcs .8
>STYA ZPTmpPtr >STYA ZPTmpPtr
lda (ZPTmpPtr) lda (ZPTmpPtr)
cmp #'-' cmp #'-'
bne .21 bne .1
ldy #1 ldy #1
lda (ZPTmpPtr),y lda (ZPTmpPtr),y
@ -82,29 +95,38 @@ CS.RUN.IPOK
cmp #'0' cmp #'0'
bcc .9 bcc .9
cmp #'9'+1 cmp #'9'+1
bcs .9 bcs .9
and #$0F and #$0F
>STA.G PingCount sta PingCount
bra .1 bra CS.RUN.IPOK
.21 jsr Init.Timeout
.1 lda #TIMEOUT.MAX
sta Timeout
.2 >PUSHW L.SA.REMOTE.AD .2 >PUSHW L.SA.REMOTE.AD
>PUSHW ZPTmpPtr >PUSHW ZPTmpPtr
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME
bcc .3 bcc .3
>SLEEP >SLEEP
jsr Wait.Timeout lda Timeout
bcc .2 bne .2
>PUSHW ZPTmpPtr >PUSHW ZPTmpPtr
>PUSHBI 2 >PUSHBI 2
>LDYA L.MSG.UNKNOWN >LDYA L.MSG.UNKNOWN
bra .99 bra .99
.3 >LDA.G ArgIndex
>STA.G ArgHostName .3 lda ArgIndex
jmp .1 sta ArgHostName
bra CS.RUN.IPOK
.8 lda SA.REMOTE+S.SOCKADDR.ADDR .8 lda SA.REMOTE+S.SOCKADDR.ADDR
bne CS.RUN.ARGSOK bne CS.RUN.ARGSOK
.9 >PUSHBI 0 .9 >PUSHBI 0
>LDYA L.MSG.USAGE >LDYA L.MSG.USAGE
.99 >SYSCALL printf .99 >SYSCALL printf
@ -113,81 +135,99 @@ CS.RUN.IPOK
sec sec
rts rts
CS.RUN.ARGSOK >LDA.G ArgHostName CS.RUN.ARGSOK lda ArgHostName
>SYSCALL ArgV >SYSCALL ArgV
>PUSHYA >PUSHYA
ldx #3 ldx #3
.1 lda SA.REMOTE+S.SOCKADDR.ADDR,x .1 lda SA.REMOTE+S.SOCKADDR.ADDR,x
>PUSHA >PUSHA
dex dex
bpl .1 bpl .1
>PUSHBI 6 >PUSHBI 6
>LDYA L.MSG.HOSTOK >LDYA L.MSG.HOSTOK
>SYSCALL printf >SYSCALL printf
CS.RUN.OPENSKT ldx #3 CS.RUN.OPENSKT ldx #3
ldy #S.IPCFG.IP+3 ldy #S.IPCFG.IP+3
.1 lda (ZPIPCfgPtr),y .1 lda (ZPIPCfgPtr),y
sta SA.LOCAL+S.SOCKADDR.ADDR,x sta SA.LOCAL+S.SOCKADDR.ADDR,x
dey dey
dex dex
bpl .1 bpl .1
ldy #Identifier
lda A2OSX.RANDOM16 lda A2OSX.RANDOM16
sta SA.LOCAL+S.SOCKADDR.PORT sta SA.LOCAL+S.SOCKADDR.PORT
sta SA.REMOTE+S.SOCKADDR.PORT sta SA.REMOTE+S.SOCKADDR.PORT
sta (pData),y sta Identifier
iny
lda A2OSX.RANDOM16+1 lda A2OSX.RANDOM16+1
sta SA.LOCAL+S.SOCKADDR.PORT+1 sta SA.LOCAL+S.SOCKADDR.PORT+1
sta SA.REMOTE+S.SOCKADDR.PORT+1 sta SA.REMOTE+S.SOCKADDR.PORT+1
sta (pData),y sta Identifier+1
>PUSHBI S.IP.PROTOCOL.ICMP >PUSHBI S.IP.PROTOCOL.ICMP
lda #S.SOCKET.T.RAW lda #S.SOCKET.T.RAW
>LIBCALL hLIBTCPIP,LIBTCPIP.socket >LIBCALL hLIBTCPIP,LIBTCPIP.socket
bcs .9 bcs .9
>STA.G hSocket
pha sta hSocket
>PUSHW L.SA.LOCAL >PUSHW L.SA.LOCAL
pla lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind >LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcs .9 bcs .9
>PUSHW L.SA.REMOTE >PUSHW L.SA.REMOTE
>LDA.G hSocket lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect >LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcc CS.RUN.SEND.ECHO bcc CS.RUN.SEND
.9 >LDYA L.MSG.SKTKO .9 >LDYA L.MSG.SKTKO
>SYSCALL puts >SYSCALL puts
lda #E.SYN lda #E.SYN
sec sec
rts rts
CS.RUN.SEND ldy #ICMP.RequestLen-1
.1 lda ICMP.Request,y
sta (pData),y
dey
bpl .1
CS.RUN.SEND.ECHO CS.RUN.SEND.ECHO
>LDA.G Identifier lda Identifier
sta ICMP.Request.ID+1 >STA.G Request-S.IP+S.ICMP.IDENTIFIER+1
iny
lda (pData),y
sta ICMP.Request.ID
>LDA.G Sequence
sec
adc #0
sta (pData),y
sta ICMP.Request.SQ+1
iny lda Identifier+1
lda (pData),y dey
adc #0 sta (pData),y
inc Sequence
bne .1
inc Sequence+1
.1 lda Sequence
>STA.G Request-S.IP+S.ICMP.SEQUENCE+1
lda Sequence+1
dey
sta (pData),y sta (pData),y
sta ICMP.Request.SQ
jsr Init.Timeout
>PUSHWI ICMP.RequestLen >PUSHWI ICMP.RequestLen
>PUSHW L.ICMP.Request >PUSHW pData
>LDA.G hSocket lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.send >LIBCALL hLIBTCPIP,LIBTCPIP.send
bcs CS.RUN.ERR bcs CS.RUN.ERR
jsr Init.Timeout
lda #TIMEOUT.MAX
sta Timeout
CS.RUN.WAIT.REPLY CS.RUN.WAIT.REPLY
>SLEEP >SLEEP
ldy #S.PS.hStdIn ldy #S.PS.hStdIn
@ -196,35 +236,38 @@ CS.RUN.WAIT.REPLY
bcs CS.RUN.ERR bcs CS.RUN.ERR
tay tay
bne .1 bne .1
>SYSCALL GetChar >SYSCALL GetChar
bcs CS.RUN.ERR bcs CS.RUN.ERR
cmp #3 Ctrl-C cmp #3 Ctrl-C
beq CS.RUN.ERR CS beq CS.RUN.ERR CS
.1 >LDA.G hSocket
.1 lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv >LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcc .2 bcc .2
jsr Wait.Timeout
bcc CS.RUN.WAIT.REPLY lda Timeout
bne CS.RUN.WAIT.REPLY
jsr CS.Print.UNREACH jsr CS.Print.UNREACH
bcs CS.RUN.ERR bcs CS.RUN.ERR
bra .7 bra .7
.2 >STA.G hFrame
.2 sta hFrame
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPTmpPtr >STYA ZPTmpPtr
jsr CS.Print.REPLY jsr CS.Print.REPLY
bcs CS.RUN.ERR bcs CS.RUN.ERR
>LDA.G hFrame lda hFrame
>SYSCALL FreeMem >SYSCALL FreeMem
>STZ.G hFrame stz hFrame
.7 >LDA.G PingCount .7 lda PingCount
beq .8 beq .8
dec dec PingCount
beq .9 A=0 beq .9 A=0
sta (pData),y
.8 jmp CS.RUN.SEND.ECHO .8 jmp CS.RUN.SEND.ECHO
.9 sec .9 sec
@ -232,18 +275,22 @@ CS.RUN.ERR rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT lda (pEvent) CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event? bpl .9 is it a TIMER event?
>LDA.G TimeOut
lda TimeOut
beq .9 beq .9
dec
sta (pData),y dec TimeOut
.9 sec do not discard TIMER event .9 sec do not discard TIMER event
rts rts
*-------------------------------------- *--------------------------------------
CS.Print.UNREACH CS.Print.UNREACH
ldx #3 ldx #3
.1 >PUSHB SA.REMOTE+S.SOCKADDR.ADDR,x .1 >PUSHB SA.REMOTE+S.SOCKADDR.ADDR,x
dex dex
bpl .1 bpl .1
>PUSHBI 4 >PUSHBI 4
>LDYA L.MSG.UNREACH >LDYA L.MSG.UNREACH
>SYSCALL printf >SYSCALL printf
@ -251,44 +298,51 @@ CS.Print.UNREACH
*-------------------------------------- *--------------------------------------
CS.Print.REPLY lda #TIMEOUT.MAX CS.Print.REPLY lda #TIMEOUT.MAX
sec sec
ldy #TimeOut sbc TimeOut
sbc (pData),y
>STZ.G TimeOut.ms stz TimeOut.ms
>STA.G TimeOut.ms+1 stz TimeOut.ms+1
tax tax
beq .3 beq .3
.1 >LDA.G TimeOut.ms
.1 lda TimeOut.ms
clc clc
adc #100 adc #100
>STA.G TimeOut.ms sta TimeOut.ms
bcc .2 bcc .2
>INC.G TimeOut.ms+1
inc TimeOut.ms+1
.2 dex .2 dex
bne .1 bne .1
.3 >PUSHW.G TimeOut.ms
.3 >PUSHW TimeOut.ms
ldy #S.IP.TTL ldy #S.IP.TTL
>PUSHB (ZPTmpPtr),y >PUSHB (ZPTmpPtr),y
ldy #S.ICMP.SEQUENCE+1 ldy #S.ICMP.SEQUENCE
>PUSHB (ZPTmpPtr),y >PUSHB (ZPTmpPtr),y
dey iny
>PUSHB (ZPTmpPtr),y >PUSHB (ZPTmpPtr),y
ldx #4 ldx #4
ldy #S.IP.SRC+3 ldy #S.IP.SRC+3
.4 >PUSHB (ZPTmpPtr),y .4 >PUSHB (ZPTmpPtr),y
dey dey
dex dex
bne .4 bne .4
>PUSHBI 9 >PUSHBI 9
>LDYA L.MSG.REPLY >LDYA L.MSG.REPLY
>SYSCALL printf >SYSCALL printf
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT >LDA.G hFrame CS.QUIT lda hFrame
beq .1 beq .1
>SYSCALL FreeMem >SYSCALL FreeMem
.1 >LDA.G hSocket .1 lda hSocket
beq .2 beq .2
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
@ -299,17 +353,6 @@ CS.QUIT >LDA.G hFrame
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
Init.Timeout lda #TIMEOUT.MAX
>STA.G TimeOut
rts
*--------------------------------------
Wait.TimeOut sec
>LDA.G TimeOut
beq .9
clc
.9 rts
*--------------------------------------
CS.END CS.END
LIBTCPIP .AZ "LIBTCPIP" LIBTCPIP .AZ "LIBTCPIP"
MSG.IPKO .AZ "TCP/IP Not Loaded/Configured." MSG.IPKO .AZ "TCP/IP Not Loaded/Configured."
@ -335,8 +378,8 @@ SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
ICMP.Request .DA #S.ICMP.TYPE.ECHOREQ ICMP.Request .DA #S.ICMP.TYPE.ECHOREQ
.DA #0 CODE .DA #0 CODE
.DA 0 CHECKSUM .DA 0 CHECKSUM
ICMP.Request.ID .BS 2 .BS 2 ID
ICMP.Request.SQ .BS 2 .BS 2 DQ
.AS "ABCDEFGHIJKLMNOP" .AS "ABCDEFGHIJKLMNOP"
.AS "QRSTUVWXYZ012345" .AS "QRSTUVWXYZ012345"
ICMP.RequestLen .EQ *-ICMP.Request ICMP.RequestLen .EQ *-ICMP.Request
@ -344,15 +387,7 @@ ICMP.RequestLen .EQ *-ICMP.Request
.DUMMY .DUMMY
.OR 0 .OR 0
DS.START DS.START
ArgIndex .BS 1 Request .BS ICMP.RequestLen
PingCount .BS 1
ArgHostName .BS 1
hSocket .BS 1
hFrame .BS 1
Identifier .BS 2
Sequence .BS 2
TimeOut .BS 1
TimeOut.ms .BS 2
DS.END DS.END
.ED .ED
*-------------------------------------- *--------------------------------------