diff --git a/A2OSX.BOOT.DSK b/A2OSX.BOOT.DSK index f01b39b3..878b22f7 100644 Binary files a/A2OSX.BOOT.DSK and b/A2OSX.BOOT.DSK differ diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index c97a5164..79339d14 100644 Binary files a/A2OSX.SRC.po and b/A2OSX.SRC.po differ diff --git a/BIN/ARP.S.txt b/BIN/ARP.S.txt index b249c860..842d627f 100644 --- a/BIN/ARP.S.txt +++ b/BIN/ARP.S.txt @@ -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 diff --git a/BIN/MOUNT.S.txt b/BIN/MOUNT.S.txt index e69de29b..f5d1657f 100644 --- a/BIN/MOUNT.S.txt +++ b/BIN/MOUNT.S.txt @@ -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 diff --git a/DRV/UTHERNET2.DRV.S.txt b/DRV/UTHERNET2.DRV.S.txt index edab3662..d2cc2e25 100644 --- a/DRV/UTHERNET2.DRV.S.txt +++ b/DRV/UTHERNET2.DRV.S.txt @@ -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 diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index 13c858c9..a16787d1 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -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 diff --git a/LIB/LIBTCPIP.S.ARP.txt b/LIB/LIBTCPIP.S.ARP.txt index b24289d3..96db196a 100644 --- a/LIB/LIBTCPIP.S.ARP.txt +++ b/LIB/LIBTCPIP.S.ARP.txt @@ -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 diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index c78743ea..4f41f3d6 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -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