This commit is contained in:
Rémy GIBERT 2015-09-11 20:48:12 +02:00
parent 3e60ff3064
commit 3c12891610
8 changed files with 487 additions and 89 deletions

Binary file not shown.

Binary file not shown.

View File

@ -66,6 +66,7 @@ CS.INIT >LDYA L.LIBSTR
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>LIBCALL hLIBSTR,LIBSTR.SSCANF
bcs .9
stz bCTRLC
@ -133,6 +134,8 @@ CS.RUN lda #ARP.TIMEOUT
>PUSHW L.DST.MAC
>PUSHW L.DST.IP
>LIBCALL hLIBTCPIP,LIBTCPIP.ARP.QUERY
bra *
bcc .2 success, print & exit
lda TimeOut

View File

@ -0,0 +1,428 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BOOT/BIN/MOUNT
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I
.INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I
*--------------------------------------
ZPFrameBase1 .EQ ZPBIN
ZPFrameLen1 .EQ ZPBIN+2
ZPFramePtr1 .EQ ZPBIN+4
*--------------------------------------
* 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 Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBSTR .DA LIBSTR
L.LIBTCPIP .DA LIBTCPIP
L.SSCANF.IP .DA SSCANF.IP
L.MSG0 .DA MSG0
L.MSG1 .DA MSG1
L.MSG2 .DA MSG2
L.MSG3 .DA MSG3
.DA 0
*--------------------------------------
CS.INIT ldy #S.PS.hARGS
lda (pPs),y
bne .1
lda #SYSMGR.ERRSYN
sec
rts
.1 >LDYA L.LIBSTR
>LOADLIBYA
sta hLIBSTR
>LDYA L.LIBTCPIP
>LOADLIBYA
sta hLIBTCPIP
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
bcs .9
>STYA ZPQuickPtr1
lda (ZPQuickPtr1) Configured ?
bpl .9
ldy #S.IPCFG.HDEV
lda (ZPQuickPtr1),y
sta hDev
lda A2OSX.RANDOM16
ldy #Identifier
sta (pData),y
lda A2OSX.RANDOM16+1
iny
sta (pData),y
lda #0
ldy #Sequence
sta (pData),y
iny
sta (pData),y
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
.9 rts
*--------------------------------------
CS.RUN >PUSHW pData DST.IP
>PUSHW L.SSCANF.IP
ldy #S.PS.hARGS
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>LIBCALL hLIBSTR,LIBSTR.SSCANF
bcc CS.RUN.IPOK
lda #PING.TIMEOUT
ldy #TimeOut
sta (pData),y
CS.RUN.DNSQUERY >PUSHW pData DST.IP
ldy #S.PS.hARGS
lda (pPs),y
>PUSHA
>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.QUERY
bcc CS.RUN.IPOK
jsr A2osX.SLEEP
ldy #TimeOut
lda (pData),y
bne CS.RUN.DNSQUERY
ldy #S.PS.hARGS
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF
sec
CS.RUN.RTS rts
CS.RUN.IPOK ldy #S.PS.hARGS
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
ldy #3
>PUSHB (pData),y DST.IP+3
dey
>PUSHB (pData),y DST.IP+2
dey
>PUSHB (pData),y DST.IP+1
>PUSHB (pData) DST.IP
>PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF
CS.RUN.ECHO >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ICMP.FRAME
bcs CS.RUN.RTS
>STYA ZPFrameBase1
txa
ldy #hFrame
sta (pData),y
ldx #3
ldy #0
.10 lda (pData),y
pha
iny
dex
bpl .10
ldx #3
ldy #S.IP.DST+3
.1 pla
sta (ZPFrameBase1),y
dey
dex
bpl .1
ldy #S.ICMP.TYPE
lda #S.ICMP.TYPE.ECHOREQ
sta (ZPFrameBase1),y
ldy #Identifier
lda (pData),y
tax
iny
lda (pData),y
ldy #S.ICMP.IDENTIFIER+1
sta (ZPFrameBase1),y
dey
txa
sta (ZPFrameBase1),y
ldy #Sequence+1
lda (pData),y
tax
dey
lda (pData),y
inc
sta (pData),y
bne .2
pha
inx
txa
sta (pData),y
pla
.2 ldy #S.ICMP.SEQUENCE
sta (ZPFrameBase1),y
iny
txa
sta (ZPFrameBase1),y
lda #PING.TIMEOUT
ldy #TimeOut
sta (pData),y
.3 >PUSHWI S.ICMP+32
ldy #hFrame
lda (pData),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.SEND.ICMP.FRAME
bcc .4
jsr A2osX.SLEEP
ldy #TimeOut
lda (pData),y
bne .3
.4 ldy #hFrame
lda (pData),y
>SYSCALL SYS.FreeMemA
ldy #bReply
lda #0
sta (pData),y
lda #PING.TIMEOUT
ldy #TimeOut
sta (pData),y
CS.RUN.WAIT jsr A2osX.SLEEP
ldy #bReply
lda (pData),y
bne .1
ldy #bCTRLC
lda (pData),y
bne CS.RUN.ERROR
ldy #TimeOut
lda (pData),y
bne CS.RUN.WAIT
ldy #3
>PUSHB (pData),y DST.IP+3
dey
>PUSHB (pData),y DST.IP+2
dey
>PUSHB (pData),y DST.IP+1
>PUSHB (pData) DST.IP
>PUSHW L.MSG2
>LIBCALL hLIBSTR,LIBSTR.PRINTF
.1 ldy #bCTRLC
lda (pData),y
bne CS.RUN.ERROR
ldy #TimeOut
lda (pData),y
beq .2
jsr A2osX.SLEEP
bra .1
.2 jmp CS.RUN.ECHO
CS.RUN.ERROR sec
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
and #S.EVT.F.TIMER is it a TIMER event?
beq .1 no....
ldy #TimeOut
lda (pData),y
beq .10
dec
sta (pData),y
.10 sec do not discard TIMER event
rts
.1 lda (pEvent)
and #S.EVT.F.KEY is it a KEY event?
beq .2
ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y
ldy #S.PS.hINDEV
cmp (pPs),y
bne .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y
bne .9
ldy #S.EVT.DATALO
lda (pEvent),y
cmp #$03 Ctrl-C
bne .8
lda #$FF
ldy #bCTRLC
sta (pData),y
bra .8
.2 lda (pEvent)
and #S.EVT.F.NET
beq .9
ldy #S.EVT.hDEV
lda (pEvent),y
cmp hDev
bne .9
ldy #S.EVT.DATALO Get Frame hMem
lda (pEvent),y
>SYSCALL SYS.GetMemPtrA
>STYA ZPFrameBase1
ldy #S.IP.PROTOCOL
lda (ZPFrameBase1),y
cmp #S.IP.PROTOCOL.ICMP
bne .9
ldy #S.ICMP.TYPE
lda (ZPFrameBase1),y
cmp #S.ICMP.TYPE.ECHOREP
bne .9
ldy #S.ICMP.IDENTIFIER
lda (ZPFrameBase1),y
tax
iny
lda (ZPFrameBase1),y
ldy #Identifier+1
cmp (pData),y
bne .9
dey
txa
cmp (pData),y
bne .9
jsr CS.EVENT.REPLY
.8 clc
rts
.9 sec
rts
*--------------------------------------
CS.EVENT.REPLY lda #PING.TIMEOUT
sec
sbc TimeOut
stz TimeOut.ms
stz TimeOut.ms+1
tay
beq .3
.1 lda TimeOut.ms
clc
adc #K.TIMER16RESOLUTION*20
sta TimeOut.ms
bcc .2
inc TimeOut
.2 dey
bne .1
.3 >PUSHW TimeOut.ms
ldy #S.IP.TTL
>PUSHB (ZPFrameBase1),y
ldy #S.ICMP.SEQUENCE+1
>PUSHB (ZPFrameBase1),y
dey
>PUSHB (ZPFrameBase1),y
ldy #S.IP.SRC+3
>PUSHB (ZPFrameBase1),y
dey
>PUSHB (ZPFrameBase1),y
dey
>PUSHB (ZPFrameBase1),y
dey
>PUSHB (ZPFrameBase1),y
>PUSHW L.MSG3
>LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #bReply
lda (pData),y
inc
sta (pData),y
rts
*--------------------------------------
CS.QUIT lda hLIBTCPIP
>SYSCALL SYS.UnloadLibA
lda hLIBSTR
>SYSCALL SYS.UnloadLibA
clc
rts
*--------------------------------------
CS.END
LIBSTR >PSTRING "libstr.o"
LIBTCPIP >PSTRING "libtcpip.o"
SSCANF.IP >PSTRING "%d.%d.%d.%d"
MSG0 >CSTRING "%S: Unknown host\n"
MSG1 >CSTRING "PING %d.%d.%d.%d (%S)\n"
MSG2 >CSTRING "%d.%d.%d.%d: TimeOut/Host unreachable\n"
MSG3 >CSTRING "32 bytes from %d.%d.%d.%d, icmp_seq=%D, ttl=%d, time=%D ms\n"
hLIBSTR .BS 1
hLIBTCPIP .BS 1
hDev .BS 1
TimeOut.ms .BS 2
*--------------------------------------
.DUMMY
.OR 0
DS.START
DST.IP .BS 4
hFrame .BS 1
TimeOut .BS 1
Identifier .BS 2
Sequence .BS 2
bCTRLC .BS 1
bReply .BS 1
DS.END
.ED
*--------------------------------------
MAN
SAVE BIN/MOUNT.S
ASM

View File

@ -17,95 +17,47 @@ ZPTmpPTR .EQ ZPDRV
*--------------------------------------
DEVID .EQ $630E
*--------------------------------------
* CS8900A IO Registers
* WIZnet W5100 IO Registers
*--------------------------------------
RTDATA .EQ $C080 Receive/Transmit Data (DWORD)
TxCMD .EQ $C084 Transmit Command
TxLength .EQ $C086 Transmission Length
IntStatusQueue .EQ $C088 Interrupt Status Queue
PacketPagePTR .EQ $C08A PacketPage Pointer
PacketPageDATA .EQ $C08C PacketPage Data (DWORD)
*--------------------------------------
TxCMD.LID .EQ %00000000.00001001
TxCMD.TxStart5 .EQ %00000000.00000000 00 = start after 5 Bytes
TxCMD.TxStart381 .EQ %00000000.01000000 01 = start after 381 Bytes
TxCMD.TxStart1021 .EQ %00000000.10000000 10 = start after 1021 Bytes
TxCMD.TxStartFULL .EQ %00000000.11000000 11 = start after ENTIRE Frame
TxCMD.Force .EQ %00000001.00000000
TxCMD.OneColl .EQ %00000010.00000000
TxCMD.InhibitCRC .EQ %00010000.00000000
TxCMD.TxPadDis .EQ %00100000.00000000
*--------------------------------------
* PacketPage Offsets & Masks
*--------------------------------------
PP.ID .EQ $0000 Product ID code (RO)
PP.RFBCNT .EQ $0050 Received Frame Byte Counter (RO)
PP.RxCFG .EQ $0102 Receiver Configuration (RW)
PP.RxCFG.LID .EQ %00000000.00000011
PP.RxCTL .EQ $0104 Receiver Control (RW)
PP.RxCTL.LID .EQ %00000000.00000101
PP.RxCTL.IAHashA .EQ %00000000.01000000
PP.RxCTL.PromisA .EQ %00000000.10000000
PP.RxCTL.RxOKA .EQ %00000001.00000000
PP.RxCTL.MulticastA .EQ %00000010.00000000
PP.RxCTL.IA .EQ %00000100.00000000
PP.RxCTL.BroadcastA .EQ %00001000.00000000
PP.RxCTL.CRCerrorA .EQ %00010000.00000000
PP.RxCTL.RuntA .EQ %00100000.00000000
PP.RxCTL.ExtradataA .EQ %01000000.00000000
PP.TxCFG .EQ $0106 Transmit Configuration (RW)
PP.TxCMD .EQ $0108 Receiver Control (RW)
PP.BufCFG .EQ $010A
PP.LineCTL .EQ $0112 Line Control (RW)
PP.LineCTL.LID .EQ %00000000.00010011
PP.LineCTL.SerRxOn .EQ %00000000.01000000
PP.LineCTL.SerTxOn .EQ %00000000.10000000
PP.LineCTL.AUIonly .EQ %00000001.00000000
PP.LineCTL.Auto .EQ %00000010.00000000
PP.SelfCTL .EQ $0114 Self Control (RW)
PP.SelfCTL.LID .EQ %00000000.00010101
PP.SelfCTL.RESET .EQ %00000000.01000000
PP.SelfCTL.SWSuspnd .EQ %00000000.10000000
PP.SelfCTL.HWSleepE .EQ %00000001.00000000
PP.SelfCTL.HWStndby .EQ %00000010.00000000
PP.BufCTL .EQ $0116
PP.TestCTL .EQ $0118
PP.TestCTL.LID .EQ %00000000.00011001
PP.TestCTL.DisLT .EQ %00000000.10000000
PP.TestCTL.FDX .EQ %01000000.00000000
PP.ISQ .EQ $0120
PP.RxEvent .EQ $0124 Receiver Event (RO)
PP.RxEvent.LID .EQ %00000000.00000100
PP.RxEvent.RxOK .EQ %00000001.00000000
PP.RxEvent.IA .EQ %00000100.00000000
PP.RxEvent.Brdcast .EQ %00001000.00000000
PP.RxEvent.CRCerror .EQ %00010000.00000000
PP.RxEvent.Runt .EQ %00100000.00000000
PP.RxEvent.Xtradata .EQ %01000000.00000000
PP.TxEvent .EQ $0128 Transmitter Event (RO)
PP.TxEvent.LID .EQ %00000000.00001000
PP.BufEvent .EQ $012C
PP.RxMISS .EQ $0130
PP.TxCOL .EQ $0132
PP.LineST .EQ $0134 Line Status (RO)
PP.LineST.LID .EQ %00000000.00010100
PP.LineST.LinkOK .EQ %00000000.10000000
PP.LineST.AUI .EQ %00000001.00000000
PP.LineST.10BT .EQ %00000010.00000000
PP.LineST.PolOK .EQ %00010000.00000000
PP.LineST.CRS .EQ %01000000.00000000
PP.SelfST .EQ $0136 Self Status (RO)
PP.SelfST.INITD .EQ %00000000.10000000
PP.BusST .EQ $0138 Bus Status (RO)
PP.BusST.LID .EQ %00000000.00011000
PP.BusST.TxBidErr .EQ %00000000.10000000
PP.BusST.Rdy4TxNOW .EQ %00000001.00000000
PP.TDR .EQ $013C
PP.MAC .EQ $0158 MAC Address (RW)
PP.RxStatus .EQ $0400
PP.RxLength .EQ $0402
PP.RxFrame .EQ $0404
PP.TxFrame .EQ $0A00
W5100.MR .EQ $C084 Mode Register
W5100.MR.RST .EQ %10000000
W5100.MR.PB .EQ %00010000
W5100.MR.PPPOE .EQ %00001000
W5100.MR.AI .EQ %00000010
W5100.MR.IND .EQ %00000001
W5100.AR .EQ $C085 Memory Pointer
W5100.AR.GAR .EQ $0001
W5100.AR.SUBR .EQ $0005
W5100.AR.SHAR .EQ $0009
W5100.AR.IR .EQ $0015
W5100.AR.IMR .EQ $0016
W5100.AR.RTR .EQ $0017
W5100.AR.RCR .EQ $0019
W5100.AR.RMSR .EQ $001A
W5100.AR.TMSR .EQ $001B
W5100.AR.PATR .EQ $001C
W5100.AR.PTIMER .EQ $0028
W5100.AR.PMAGIC .EQ $0029
W5100.AR.UIPR .EQ $002A
W5100.AR.UPORT .EQ $002E
W5100.AR.S0.MR .EQ $0400
W5100.AR.S0.CR .EQ $0401
W5100.AR.S0.IR .EQ $0402
W5100.AR.S0.SR .EQ $0403
W5100.AR.S0.PORT .EQ $0404
W5100.AR.S0.DHAR .EQ $0406
W5100.AR.S0.DIPR .EQ $040C
W5100.AR.S0.DPORT .EQ $0410
W5100.AR.S0.MSSR .EQ $0412
W5100.AR.S0.PROTO .EQ $0414
W5100.AR.S0.TOS .EQ $0415
W5100.AR.S0.TTL .EQ $0416
W5100.AR.S0.TX.FSR .EQ $0420
W5100.AR.S0.TX.RD .EQ $0422
W5100.AR.S0.TX.WR .EQ $0424
W5100.AR.S0.RX.RSR .EQ $0426
W5100.AR.S0.RX.RD .EQ $0428
W5100.DR .EQ $C087
*--------------------------------------
ERRTNOFRAME .EQ 0
ERRNOBUFFER .EQ 1

View File

@ -42,6 +42,7 @@ TCP.PORT.TELNETS .EQ 23
UDP.PORT.DNS .EQ 53
UDP.PORT.DHCPC .EQ 68
UDP.PORT.DHCPS .EQ 67
UDP.PORT.PMAP .EQ 111
*--------------------------------------
S.IPCFG.STATUS .EQ 0
S.IPCFG.STATUS.OFF .EQ %00000000 TCPIP Unconfigured
@ -209,6 +210,16 @@ S.DNS.QTYPE.SRV .EQ 33
S.DNS.QTYPE.ANY .EQ 255
S.DNS.QCLASS.IN .EQ 1
*--------------------------------------
S.RPC.XID .EQ S.UDP+0
S.RPC.C.RPCVERS .EQ S.UDP+4
S.RPC.C.PROG .EQ S.UDP+8
S.RPC.C.VERS .EQ S.UDP+12
S.RPC.C.PROC .EQ S.UDP+16
S.RPC.C.CRED .EQ S.UDP+20
S.RPC.C.VERF .EQ S.UDP+24
*
S.RPC .EQ 28
*--------------------------------------
S.TCP.SRCPORT .EQ S.IP+0
S.TCP.DSTPORT .EQ S.IP+2
S.TCP.SEQ.NUMBER .EQ S.IP+4

View File

@ -144,6 +144,7 @@ ARP.QUERY.I ldx #0
jsr NEW.ARP.FRAME nothing in ARP cache, send ARP request
bcs .9
phx
ldy #S.ARP.OPERATION+1
lda #S.ARP.OPERATION.REQ
@ -185,7 +186,10 @@ ARP.QUERY.I ldx #0
cpy #S.ETH.DSTMAC+6
bne .75
>DEBUG
jsr SEND.ARP.FRAME.I
bcs .76
jsr ARP.ADD.PENDING ZPARPIP still pointing IP

View File

@ -77,7 +77,7 @@ L.DNS.CACHE .DA DNS.CACHE
.DA 0
*--------------------------------------
LIB.LOAD lda bFirstLoad
bne .8
bne *
jsr ARP.CLEAR
jsr DNS.CLEAR
inc bFirstLoad