diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 6fbbfb69..0820a7bb 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/DRV/X.U2.DRV.S.txt b/DRV/X.U2.DRV.S.txt index 1ee726e7..4dbae7e3 100644 --- a/DRV/X.U2.DRV.S.txt +++ b/DRV/X.U2.DRV.S.txt @@ -45,14 +45,18 @@ Dev.Detect >STYA ARGS >LDYA L.MSG.DETECT >SYSCALL puts + ldx #$70+$88 ldy #7 + .1 lda A2osX.S,y IO based detection, avoid scanning in Disk Controller IO!!!! bne .2 + lda #W5100.MR.RST sta W5100.MR,x lda #0 + .10 dec give some time.... bne .10 @@ -65,13 +69,16 @@ Dev.Detect >STYA ARGS lda W5100.MR,x cmp #W5100.MR.AI+W5100.MR.IND bne .2 + >AR.SELECT RTR lda W5100.DR,x Get RTR HI cmp /2000 bne .2 + lda W5100.DR,x Get RTR LO cmp #2000 beq .3 + .2 dec FD.DEV.NAME+3 txa sec @@ -79,33 +86,41 @@ Dev.Detect >STYA ARGS tax dey bne .1 + >LDYA L.MSG.DETECT.KO >SYSCALL puts lda #MLI.E.NODEV sec rts + .3 stx DEVSLOTx0 sty DEVSLOT0x + lda #A2osX.S.NIC sta A2osX.S,y + jsr Dev.ParseArgs bcs .9 -.8 >PUSHW L.FD.DEV.NAME + + >PUSHW L.FD.DEV.NAME >PUSHBI 2 >LDYA L.MSG.DETECT.OK >SYSCALL printf + >PUSHWI DRV.END >PUSHWI DRV.CS.END-DRV.CS.START >PUSHWI DRV.CS.START >LDYA L.DRV.CS.START >SYSCALL InsDrv bcs .9 + >STYA FD.DEV+S.FD.DEV.DRVPTR >PUSHW L.FD.DEV.NAME >LDYA L.FD.DEV >SYSCALL MKDEV bcs .9 + ldx DEVSLOT0x lda #A2osX.S.NIC sta A2osX.S,x @@ -116,6 +131,7 @@ Dev.ParseArgs >LDYA ARGS >STYA ZPArgPTR lda (ZPArgPTR) bne .1 + lda A2osX.RANDOM16 eor A2osX.TIMER16 sta DCB+S.DCB.NIC.MAC+3 @@ -125,6 +141,7 @@ Dev.ParseArgs >LDYA ARGS sta DCB+S.DCB.NIC.MAC+5 clc rts + .1 >PUSHW L.MAC5 >PUSHW L.MAC4 >PUSHW L.MAC3 @@ -136,8 +153,9 @@ Dev.ParseArgs >LDYA ARGS >LDYA ZPArgPtr >SYSCALL sscanf bcc .8 + lda #E.SYN - sec +* sec .8 rts *-------------------------------------- CS.END @@ -192,44 +210,41 @@ DRV.CS.START cld *-------------------------------------- STATUS >STYA ZPIOCTL + jsr GET.BUFPTR + ldy #S.IOCTL.STATCODE lda (ZPIOCTL),y beq .1 + cmp #S.IOCTL.STATCODE.GETDIB bne STATUS.DCB - ldx #S.DIB-1 - .HS 2C bit abs -.1 ldx #3 - ldy #S.IOCTL.BUFPTR - lda (ZPIOCTL),y - sta .3+1 - iny - lda (ZPIOCTL),y - sta .3+2 -.2 lda DIB,x -.3 sta $ffff,x SELF MODIFIED - dex + ldy #S.DIB-1 + .HS 2C bit abs + +.1 ldy #3 + +.2 lda DIB,y + sta (ZPBufPtr),y + dey bpl .2 + clc rts + STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB bne STATUS.9 -.1 ldy #S.IOCTL.BUFPTR - lda (ZPIOCTL),y - sta .3+1 - iny - lda (ZPIOCTL),y - sta .3+2 - ldx #S.DCB.NIC-1 -.2 lda DCB,x -.3 sta $ffff,x SELF MODIFIED - dex - bpl .2 + ldy #S.DCB.NIC-1 + +.1 lda DCB,y + sta (ZPBufPtr),y + dey + bpl .1 clc rts + STATUS.9 lda #MLI.E.BADCTL sec rts @@ -237,31 +252,32 @@ STATUS.9 lda #MLI.E.BADCTL .DO U2AI=1 CONTROL >STYA ZPIOCTL + jsr GET.BUFPTR + ldy #S.IOCTL.CTRLCODE lda (ZPIOCTL),y cmp #S.IOCTL.CTRLCODE.SETDCB bne STATUS.9 -.1 ldy #S.IOCTL.BUFPTR - lda (ZPIOCTL),y - sta .2+1 - iny - lda (ZPIOCTL),y - sta .2+2 - ldx #S.DCB.NIC-1 -.2 lda $ffff,x SELF MODIFIED - sta DCB,x - dex + + ldy #S.DCB.NIC-1 + +.2 lda (ZPBufPtr),y + sta DCB,y + dey bpl .2 + + bra OPEN.I .FIN *-------------------------------------- OPEN lda #S.DIB.S.OPENED bit DIB+S.DIB.S - beq .10 + beq OPEN.I lda #MLI.E.OPEN sec rts -.10 jsr CLOSE + +OPEN.I jsr CLOSE * ldx DEVSLOTx0 Done by CLOSE @@ -299,30 +315,40 @@ OPEN lda #S.DIB.S.OPENED >AR.SELECT GAR ldy #0 + .2 lda DCB+S.DCB.NIC.GW,y sta W5100.DR,x iny cpy #4 bne .2 + * >AR.SELECT SUBR Implicit, next to GAR ldy #0 + .3 lda DCB+S.DCB.NIC.MASK,y sta W5100.DR,x iny cpy #4 bne .3 + >AR.SELECT SIPR + ldy #0 + .4 lda DCB+S.DCB.NIC.IP,y sta W5100.DR,x iny cpy #4 bne .4 .FIN + >AR.SELECT S0.CR lda #W5100.AR.S0.CR.OPEN sta W5100.DR,x + lda #S.DIB.S.OPENED + tsb DIB+S.DIB.S + clc rts *-------------------------------------- @@ -337,9 +363,19 @@ CLOSE ldx DEVSLOTx0 lda $C019 .2 eor $C019 bpl .2 + + lda #S.DIB.S.OPENED + trb DIB+S.DIB.S + clc rts *-------------------------------------- +READWRITE.9 lda #E.NODATA + +READWRITE.99 plp + sec + rts +*-------------------------------------- READ php sei @@ -350,13 +386,7 @@ READ php >AR.SELECT S0.RX.RSR lda W5100.DR,x get the received size HI ora W5100.DR,x LO - bne .1 - - lda #E.NODATA - -.9 plp - sec - rts + beq READWRITE.9 .1 >AR.SELECT S0.RX.RD lda W5100.DR,x get the received ptr HI @@ -372,15 +402,18 @@ READ php .DO U2AI=1 ldy #0 + .10 lda W5100.DR,x sta RX.IP,y iny cpy #4 bne .10 + ldy W5100.DR,x get RX.Size HI sty RXTX.Size+1 lda W5100.DR,x get RX.Size LO sta RXTX.Size + clc adc #S.IP pha @@ -395,7 +428,7 @@ READ php .FIN >SYSCALL2 getmem - bcs .9 + bcs READWRITE.99 >STYA ZPBufPtr phx @@ -443,6 +476,7 @@ READ php .DO U2AI=1 ldx #3 ldy #S.IP.SRC+3 + .11 lda RX.IP,x sta (ZPBufPtr),y dey @@ -458,12 +492,15 @@ READ php .2 inc Counter bne .3 + inc Counter+1 beq .4 + .3 lda W5100.DR,x sta (ZPBufPtr),y iny bne .2 + inc ZPBufPtr+1 bne .2 @@ -518,18 +555,12 @@ WRITE php ldy W5100.DR,x LO cpy RXTX.Size sbc RXTX.Size+1 - bcs WRITE.1 + bcs .10 + + jmp READWRITE.9 + +.10 jsr GET.BUFPTR - lda #E.NODATA - plp - sec - rts -WRITE.1 ldy #S.IOCTL.BUFPTR - lda (ZPIOCTL),y - sta ZPBufPtr - iny - lda (ZPIOCTL),y - sta ZPBufPtr+1 .DO U2AI=1 >AR.SELECT S0.DIPR ldy #S.IP.DST @@ -539,6 +570,7 @@ WRITE.1 ldy #S.IOCTL.BUFPTR iny cpy #S.IP.DST+4 bne .1 + >AR.SELECT S0.PROTO ldy #S.IP.PROTOCOL lda (ZPBufPtr),y @@ -546,6 +578,7 @@ WRITE.1 ldy #S.IOCTL.BUFPTR .ELSE ldy #S.ETH.SRCMAC+5 ldx #5 + .1 lda DCB+S.DCB.NIC.MAC,x sta (ZPBufPtr),y dey @@ -569,17 +602,21 @@ WRITE.1 ldy #S.IOCTL.BUFPTR .ELSE ldy #0 .FIN + .2 inc Counter bne .3 inc Counter+1 beq .8 + .3 lda (ZPBufPtr),y sta W5100.DR,x iny bne .2 + inc ZPBufPtr+1 - bne .2 + bra .2 + .8 >AR.SELECT S0.TX.WR lda Offset clc @@ -590,6 +627,7 @@ WRITE.1 ldy #S.IOCTL.BUFPTR sta W5100.DR,x write HI pla sta W5100.DR,x write LO + >AR.SELECT S0.CR lda #W5100.AR.S0.CR.SEND sta W5100.DR,x @@ -598,6 +636,14 @@ WRITE.1 ldy #S.IOCTL.BUFPTR clc rts *-------------------------------------- +GET.BUFPTR ldy #S.IOCTL.BUFPTR + lda (ZPIOCTL),y + sta ZPBufPtr + iny + lda (ZPIOCTL),y + sta ZPBufPtr+1 + rts +*-------------------------------------- DRV.CS.END DEVSLOTx0 .BS 1 *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.CFG.txt b/LIB/LIBTCPIP.S.CFG.txt index 7527dfac..971f850a 100644 --- a/LIB/LIBTCPIP.S.CFG.txt +++ b/LIB/LIBTCPIP.S.CFG.txt @@ -17,42 +17,53 @@ CFG.SET >PULLW ZPTmpPtr1 IPCFG sta ARP.REP.SHA,x dex bpl .2 + ldx #3 + .3 lda IPCFG+S.IPCFG.IP,x sta SA.LOCAL+S.SOCKADDR.ADDR,x sta ARP.REQ.SPA,x sta ARP.REP.SPA,x dex bpl .3 + lda IPCFG+S.NETCFG.DevFlags and #S.DCB.NIC.FLAGS.ARPOFFLOAD beq .5 + >LDYA L.DCB.NIC >STYA IOCTL+S.IOCTL.BUFPTR + lda #S.IOCTL.STATCODE.GETDCB sta IOCTL+S.IOCTL.STATCODE + >PUSHW L.IOCTL >PUSHBI IOCTL.STATUS lda IPCFG+S.NETCFG.DevID >SYSCALL2 IOCTL ldx #11 IP/MASK/GW + .4 lda IPCFG+S.IPCFG.IP,x sta DCB.NIC+S.DCB.NIC.IP,x dex bpl .4 - lda S.IOCTL.CTRLCODE.SETDCB - sta S.IOCTL.CTRLCODE + + lda #S.IOCTL.CTRLCODE.SETDCB + sta IOCTL+S.IOCTL.CTRLCODE >PUSHW L.IOCTL >PUSHBI IOCTL.CONTROL lda IPCFG+S.NETCFG.DevID >SYSCALL2 IOCTL bcs .9 + .5 lda hDNSSocket beq .6 + jsr SKT.Shutdown stz hDNSSocket + .6 lda IPCFG+S.IPCFG.DNS1 beq .8 @@ -68,6 +79,7 @@ CFG.SET >PULLW ZPTmpPtr1 IPCFG lda hDNSSocket jsr SKT.Bind bcs .9 + >LDYAI UDP.PORT.DNS >STYA SA.REMOTE+S.SOCKADDR.PORT >PUSHW L.SA.REMOTE diff --git a/SBIN/NETWORKD.S.txt b/SBIN/NETWORKD.S.txt index ba15aa65..97dd6669 100644 --- a/SBIN/NETWORKD.S.txt +++ b/SBIN/NETWORKD.S.txt @@ -90,6 +90,7 @@ CS.INIT.DEV >PUSHBI 0 lda #MLI.E.NODEV sec rts + .8 sta DevID >PUSHW L.DEVNAME diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index 97040e2c..2ec04e5a 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -17,9 +17,12 @@ K.GetDevByName >STYA ZPPtr1 requested dev name sta ZPPtr2 lda Dev.Table,x beq K.GetDev.NODEV + adc /S.FD.DEV sta ZPPtr2+1 + ldy #$ff + .2 iny lda (ZPPtr1),y cmp (ZPPtr2),y @@ -27,10 +30,12 @@ K.GetDevByName >STYA ZPPtr1 requested dev name ora (ZPPtr2),y Both char are 0 ? bne .2 no....loop -.3 ldy Dev.Table-1,x -.4 lda Dev.Table,x + + ldy Dev.Table-1,x + lda Dev.Table,x clc rts + .7 inx inx cpx #K.DEV.MAX*2+1 @@ -81,56 +86,72 @@ K.GetDevStatus.I * ## RETURN VALUE * A = hDEV *\-------------------------------------- -K.MKDev jsr SHARED.SPtr1PPtr2 ptr1=fd, ptr2=name +K.MKDev jsr SHARED.SPtr1PPtr2 ptr1=fd, ptr2=name ldx DevMgr.DevIdx cpx #K.DEV.MAX*2+1 beq .9 + ldy #$ff ldx #S.FD.DEV + .1 iny Get DEV name length inx compute FD+NAME+\0 in X lda (ZPPtr2),y bne .1 + txa tay lda #0 + jsr MEM.GetKrnlBuf bcs .99 + >STYA pFD >STYA .4+1 + ldx DevMgr.DevIdx sta Dev.Table,x tya sta Dev.Table-1,x + ldy #S.FD.DEV-1 + .2 lda (ZPPtr1),y sta (pFD),y dey bpl .2 + ldy #$ff ldx #S.FD.DEV-1 + .3 iny inx lda (ZPPtr2),y .4 sta $ffff,x bne .3 + >LDYAI K.IOBuf >STYA K.S.IOCTL+S.IOCTL.BUFPTR lda #S.IOCTL.STATCODE.STATUS jsr K.GetDevStatus.I bcs .99 + lda K.IOBuf Get Status byte bit #S.DIB.S.IRQ beq .8 + ldx #0 + .5 lda IRQ.Vectors+1,x beq .7 + inx inx cpx #K.IRQDEV.MAX*2+1 bne .5 + .9 lda #E.OOH * sec .99 rts