diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index edefffae..0a14d359 100644 Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index b78819a2..398ec8b1 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 19ed9eeb..6779b82c 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/.Tools/userDefineLang.xml b/.Tools/userDefineLang.xml index 2bd35e18..b890a643 100644 --- a/.Tools/userDefineLang.xml +++ b/.Tools/userDefineLang.xml @@ -24,11 +24,11 @@ - .BS .DA .AS .AT .AZ .EQ .MA .EM .OR .TF .LIST .HS .IN .INB .OP .TA .EM .PH .EP .DUMMY .ED .DO .ELSE .FIN + .BS .DA .AS .AT .AZ .EQ .MA .EM .OR .TF .LIST .HS .IN .INB .OP .TA .EM .PH .EP .DUMMY .ED adc and asl bit brk clc cld cli clv cmp cpx cpy dec dex dey eor inc inx iny lda ldx ldy lsr nop ora rmb rol ror rti rts sbc sec sed sei smb sta stp stx sty stz tax tay trb tsb tsx txa txs tya wai $ % / # & .1 .2 .3 .4 .5 .6 .7 .8 .9 - AUTO MAN LOAD SAVE ASM CREATE INC LOMEM PREFIX PR# NEW BLOAD BSAVE TEXT DELETE + AUTO MAN LOAD SAVE ASM CREATE INC LOMEM PREFIX PR# NEW BLOAD BSAVE TEXT DELETE .DO .ELSE .FIN pha php phx phy pla plp plx ply bbr bbs bcc bcs beq bmi bne bpl bra jmp jsr bvc bvs > @@ -43,7 +43,7 @@ - + diff --git a/DRV/UTHER2.AI.DRV.S.txt b/DRV/UTHER2.AI.DRV.S.txt index 15e65d5d..8b1e2d16 100644 --- a/DRV/UTHER2.AI.DRV.S.txt +++ b/DRV/UTHER2.AI.DRV.S.txt @@ -2,512 +2,17 @@ NEW PREFIX /A2OSX.BUILD AUTO 4,1 .LIST OFF - .OP 65C02 - .OR $2000 - .TF DRV/UTHER2.AI.DRV +*-------------------------------------- +U2AI .EQ 1 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/MLI.ERR.I .INB INC/NIC.I .INB INC/NIC.W5100.I - .INB INC/LIBTCPIP.I + .INB INC/ETH.I + .INB /A2OSX.SRC/DRV/X.U2.DRV.S *-------------------------------------- -ZPTmpPTR .EQ ZPDRV -RXTX.Size .EQ ZPDRV+2 -Counter .EQ ZPDRV+4 -Offset .EQ ZPDRV+6 -RX.IP .EQ ZPDRV+8 -*-------------------------------------- -* File Header (16 Bytes) -*-------------------------------------- -CS.START cld - jmp Dev.Detect cld,jmp abs=DRV - .DA #$61 6502,Level 1 (65c02) - .DA #1 DRV Layout Version 1 - .DA 0 - .DA CS.END-CS.START Code Length - .DA DEV.HEADER-CS.START Device Header Offset - .DA DRV.CS.START-CS.START Driver Code Offset - .DA DRV.CS.END-DRV.CS.START Drv Code Length -*-------------------------------------- -* Relocation Table -*-------------------------------------- -L.MSG.DETECT .DA MSG.DETECT -L.MSG.DETECT.OK .DA MSG.DETECT.OK -L.MSG.DETECT.KO .DA MSG.DETECT.KO -L.DEV.HEADER.NAME .DA DEV.HEADER.NAME - .DA 0 End Of Reloc Table -*-------------------------------------- -Dev.Detect >STYA Args - >LDYA L.MSG.DETECT - >SYSCALL printf - - 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 - - lda #W5100.MR.AI+W5100.MR.IND - sta W5100.MR,x - - pha - pla - - 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 DEV.HEADER.NAME+4 - txa - sec - sbc #$10 - tax - dey - bne .1 - - >LDYA L.MSG.DETECT.KO - >SYSCALL printf - - lda #MLI.E.NODEV - sec - rts - -.3 stx DEVSLOTx0 - lda #A2osX.S.NIC - sta A2osX.S,y - - >LDYA ARGS - >STYA ZPTmpPTR - lda (ZPTmpPTR) - bne .4 - - lda #$00 - sta MAC - lda #$08 - sta MAC+1 - lda #$DC - sta MAC+2 - lda A2osX.RANDOM16 - eor A2osX.TIMER16 - sta MAC+3 - eor A2osX.RANDOM16+1 - sta MAC+4 - eor A2osX.TIMER16+1 - sta MAC+5 - bra .8 - -.4 jsr DecodeMac - bcc .8 - lda #K.E.SYN - sec - rts - -.8 >PUSHW L.DEV.HEADER.NAME - >LDYA L.MSG.DETECT.OK - >SYSCALL printf - clc - rts -*-------------------------------------- - .INB /A2OSX.SRC/DRV/X.NET.DRV.S -*-------------------------------------- -CS.END -MSG.DETECT .AZ "UtherNet2/W5100 Driver.\r\n" -MSG.DETECT.OK .AZ "UtherNet2/W5100 Installed As Device : %S\r\n" -MSG.DETECT.KO .AZ "Hardware Not Found.\r\n" -Args .BS 2 -*-------------------------------------- -* Device Header (16 Bytes) -*-------------------------------------- -DEV.HEADER cld - jmp (DRV.CS.START,x) - .DA #0 - .BS 6 -DEV.HEADER.NAME >PSTR "ETH7" -*-------------------------------------- -* Driver Code -*-------------------------------------- -DRV.CS.START .DA STATUS - .DA READBLOCK - .DA WRITEBLOCK - .DA A2osX.BADCALL - .DA CONTROL - .DA A2osX.BADCALL - .DA OPEN - .DA CLOSE - .DA A2osX.BADCALL - .DA A2osX.BADCALL -L.DEVSTAT .DA DEVSTAT - .DA 0 end or relocation -*-------------------------------------- -STATUS >LDYA L.DEVSTAT - clc - rts -*-------------------------------------- -READBLOCK ldx DEVSLOTx0 - - >AR.SELECT S0.RX.RSR - lda W5100.DR,x get the received size HI - ora W5100.DR,x LO - bne READBLOCK.RxOK - - lda #MLI.E.EOF - - sec -READBLOCK.RTS rts - -READBLOCK.RxOK >AR.SELECT S0.RX.RD - lda W5100.DR,x get the received ptr HI - sta offset+1 - ldy W5100.DR,x get the received ptr LO - sty offset - - and /RXTX.MASK - ora /RX.BASE - sta W5100.AR,x - tya - sta W5100.AR+1,x - - 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 - tya - adc /S.IP - ply - - >SYSCALL getmem - bcs READBLOCK.RTS - - >STYA ZPTmpPTR - stx .8+1 - sty .8+3 - sta .8+5 - - lda RXTX.Size - sta (ZPTmpPTR) - pha - eor #$ff - sta Counter - pla -* clc - adc #6 Header Size - sta RXTX.Size - - ldy #1 - - lda RXTX.Size+1 - sta (ZPTmpPTR),y - pha - eor #$ff - sta Counter+1 - pla - adc #0 - sta RXTX.Size+1 - - ldy #S.IP.DST+3 - ldx #3 - -.1 lda RX.IP,x - sta (ZPTmpPTR),y - dey - dex - bpl .1 - - ldx DEVSLOTx0 - - ldy #S.IP - -.2 inc Counter - bne .3 - inc Counter+1 - beq .4 - -.3 lda W5100.DR,x - sta (ZPTmpPTR),y - iny - bne .2 - inc ZPTmpPTR+1 - bne .2 - -.4 >AR.SELECT S0.RX.RD - - lda Offset - clc - adc RXTX.Size - pha save LO - - lda Offset+1 - adc RXTX.Size+1 - - sta W5100.DR,x write HI - pla - sta W5100.DR,x write LO - - >AR.SELECT S0.CR - lda #W5100.AR.S0.CR.RCVD - sta W5100.DR,x - -.8 ldx #$ff hMem - ldy #$ff PtrLO - lda #$ff PtrHI - clc - rts -*-------------------------------------- -WRITEBLOCK >STYA ZPTmpPTR - - lda (ZPTmpPTR) - sec - sbc #S.IP-2 - sta RXTX.Size - eor #$ff - sta Counter - - ldy #1 - lda (ZPTmpPTR),y - sbc /S.IP-2 - sta RXTX.Size+1 - eor #$ff - sta Counter+1 - - ldx DEVSLOTx0 - >AR.SELECT S0.TX.FSR - - lda W5100.DR,x get send size HI - ldy W5100.DR,x LO - cpy RXTX.Size - sbc RXTX.Size+1 - bcs WRITEBLOCK.1 - - lda #MLI.E.EOF - sec - rts - -WRITEBLOCK.1 >AR.SELECT S0.DIPR - ldy #S.IP.DST - -.1 lda (ZPTmpPTR),y - sta W5100.DR,x - iny - cpy #S.IP.DST+4 - bne .1 - - >AR.SELECT S0.PROTO - ldy #S.IP.PROTOCOL - lda (ZPTmpPTR),y - sta W5100.DR,x - - >AR.SELECT S0.TX.WR - lda W5100.DR,x Get HI - ldy W5100.DR,x Get LO - and /RXTX.MASK - ora /TX.BASE - sta W5100.AR,x Write HI - sta Offset+1 - tya - sta W5100.AR+1,x Write LO - sta Offset - - ldy #S.IP - -.2 inc Counter - bne .3 - - inc Counter+1 - beq .8 - -.3 lda (ZPTmpPTR),y - sta W5100.DR,x - iny - bne .2 - inc ZPTmpPTR+1 - bne .2 - -.8 >AR.SELECT S0.TX.WR - - lda Offset - clc - adc RXTX.Size - pha save LO - - lda Offset+1 - adc RXTX.Size+1 - 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 - - clc - rts -*-------------------------------------- -OPEN jsr CLOSE - - lda #W5100.MR.AI+W5100.MR.IND - sta W5100.MR,x - - >AR.SELECT GAR - - ldy #4 - -.1 stz W5100.DR,x - dey - bne .1 - -* >AR.SELECT SUBR - - ldy #4 - lda #255 - -.2 sta W5100.DR,x - dey - bne .2 - -* >AR.SELECT SHAR - - ldy #0 - -.3 lda MAC,y - sta W5100.DR,x - iny - cpy #6 - bne .3 - -* >AR.SELECT SIPR - - ldy #4 - -.4 stz W5100.DR,x - dey - bne .4 - - >AR.SELECT RMSR - lda #3 8k,0k,0k,0k - sta W5100.DR,x ...for Socket RX Buffers - sta W5100.DR,x ...for Socket TX Buffers - - bra CONTROL.OPEN -*-------------------------------------- -CONTROL >STYA ZPTmpPTR - - ldx DEVSLOTx0 - - >AR.SELECT S0.CR - lda #W5100.AR.S0.CR.CLOSE - sta W5100.DR,x - -.10 >AR.SELECT S0.SR - lda W5100.DR,x - bne .10 CLOSED ??? - - >AR.SELECT GAR - - ldy #S.IPCFG.GW - -.1 lda (ZPTmpPTR),y - sta W5100.DR,x - iny - cpy #S.IPCFG.GW+4 - bne .1 - -* >AR.SELECT SUBR Implicit, next to GAR - - ldy #S.IPCFG.MASK - -.2 lda (ZPTmpPTR),y - sta W5100.DR,x - iny - cpy #S.IPCFG.MASK+4 - bne .2 - - >AR.SELECT SIPR - - ldy #S.IPCFG.IP - -.3 lda (ZPTmpPTR),y - sta W5100.DR,x - iny - cpy #S.IPCFG.IP+4 - bne .3 - -CONTROL.OPEN >AR.SELECT S0.MR - lda #W5100.AR.S0.MR.IPRAW+W5100.AR.S0.MR.MF - sta W5100.DR,x - - >AR.SELECT S0.TOS - stz W5100.DR,x - -* >AR.SELECT S0.TTL - lda #K.IP.TTL - sta W5100.DR,x - - >AR.SELECT S0.CR - lda #W5100.AR.S0.CR.OPEN - sta W5100.DR,x - - clc - rts -*-------------------------------------- -CLOSE ldx DEVSLOTx0 - lda #W5100.MR.RST - sta W5100.MR,x - - lda $C019 we can use VBL as we are not on //c -.1 eor $C019 - bpl .1 - - lda $C019 -.2 eor $C019 - bpl .2 - - clc - rts -*-------------------------------------- -DRV.CS.END -DEVSLOTx0 .BS 1 -*-------------------------------------- -DEVSTAT .DA #0 - .BS 3 size - >PSTR "UtherNetII/W5100" - .DA #S.DIB.T.NET - .BS 1 Subtype - .BS 2 Version -*-------------------------------------- -FLAGS .DA #S.DIB.NIC.FLAGS.ARPOFFLOAD+S.DIB.NIC.FLAGS.IPOFFLOAD -LINK.STATUS .DA #S.DIB.NIC.STATUS.OK+S.DIB.NIC.STATUS.FD+S.DIB.NIC.STATUS.100 -MAC .BS 6 MAN SAVE /A2OSX.SRC/DRV/UTHER2.AI.DRV.S ASM diff --git a/DRV/UTHERNET2.DRV.S.txt b/DRV/UTHERNET2.DRV.S.txt index ad5e83d2..ef74739c 100644 --- a/DRV/UTHERNET2.DRV.S.txt +++ b/DRV/UTHERNET2.DRV.S.txt @@ -2,9 +2,8 @@ NEW PREFIX /A2OSX.BUILD AUTO 4,1 .LIST OFF - .OP 65C02 - .OR $2000 - .TF DRV/UTHERNET2.DRV +*-------------------------------------- +U2AI .EQ 0 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I @@ -12,533 +11,8 @@ AUTO 4,1 .INB INC/NIC.I .INB INC/NIC.W5100.I .INB INC/ETH.I + .INB /A2OSX.SRC/DRV/X.U2.DRV.S *-------------------------------------- -ZPArgPtr .EQ ZPDRV -*-------------------------------------- -* File Header (16 Bytes) -*-------------------------------------- -CS.START cld - jmp Dev.Detect cld,jmp abs=DRV - .DA #$61 6502,Level 1 (65c02) - .DA #1 DRV Layout Version 1 - .DA 0 - .DA CS.END-CS.START Code Length - .DA 0 - .DA 0 - .DA 0 -*-------------------------------------- -* Relocation Table -*-------------------------------------- -L.MSG.DETECT .DA MSG.DETECT -L.MSG.DETECT.OK .DA MSG.DETECT.OK -L.MSG.DETECT.KO .DA MSG.DETECT.KO -L.DRV.CS.START .DA DRV.CS.START -L.FD.DEV .DA FD.DEV -L.FD.DEV.NAME .DA FD.DEV.NAME -L.SSCANF.MAC .DA SSCANF.MAC -L.MAC0 .DA DCB+S.DCB.NIC.MAC -L.MAC1 .DA DCB+S.DCB.NIC.MAC+1 -L.MAC2 .DA DCB+S.DCB.NIC.MAC+2 -L.MAC3 .DA DCB+S.DCB.NIC.MAC+3 -L.MAC4 .DA DCB+S.DCB.NIC.MAC+4 -L.MAC5 .DA DCB+S.DCB.NIC.MAC+5 - .DA 0 End Of Reloc Table -*-------------------------------------- -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 - - lda #W5100.MR.AI+W5100.MR.IND - sta W5100.MR,x - - pha - pla - - 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 - sbc #$10 - tax - dey - bne .1 - - >LDYA L.MSG.DETECT.KO - >SYSCALL puts - - lda #MLI.E.NODEV - sec - rts - -.3 stx DEVSLOTx0 - lda #A2osX.S.NIC - sta A2osX.S,y - - jsr Dev.ParseArgs - bcs .9 - -.8 >PUSHW L.FD.DEV.NAME - >PUSHBI 2 - >LDYA L.MSG.DETECT.OK - >SYSCALL printf - - >PUSHWI DRV.END - >PUSHWI DRV.CS.END - >PUSHWI DRV.CS.START - >LDYA L.DRV.CS.START - >SYSCALL InsDrv - bcs .9 - >STYA FD.DEV+S.FD.DEV.DRVPTR - - >LDYA L.FD.DEV - >SYSCALL MKDEV - -.9 rts -*-------------------------------------- -Dev.ParseArgs >LDYA ARGS - >STYA ZPArgPTR - lda (ZPArgPTR) - bne .1 - - lda A2osX.RANDOM16 - eor A2osX.TIMER16 - sta DCB+S.DCB.NIC.MAC+3 - eor A2osX.RANDOM16+1 - sta DCB+S.DCB.NIC.MAC+4 - eor A2osX.TIMER16+1 - sta DCB+S.DCB.NIC.MAC+5 - clc - rts - -.1 >PUSHW L.MAC5 - >PUSHW L.MAC4 - >PUSHW L.MAC3 - >PUSHW L.MAC2 - >PUSHW L.MAC1 - >PUSHW L.MAC0 - >PUSHBI 12 6 x byte PTRs - >PUSHW L.SSCANF.MAC - >LDYA ZPArgPtr - >SYSCALL sscanf - bcc .8 - - lda #K.E.SYN - sec -.8 rts -*-------------------------------------- -CS.END -ARGS .BS 2 -MSG.DETECT .AZ "UtherNet2/W5100 Driver." -MSG.DETECT.OK .AZ "UtherNet2/W5100 Installed As Device : %s\r\n" -MSG.DETECT.KO .AZ "Hardware Not Found." -SSCANF.MAC .AZ "%h:%h:%h:%h:%h:%h" -*-------------------------------------- -FD.DEV .DA #S.FD.T.CDEV - .DA #0 HANDLER - .DA #0 BUSID - .DA #0 DEVID - .DA 0 BUSPTR - .BS 2 DRVPTR -FD.DEV.NAME .AZ "ETH7" NAME - .HS 000000 -*-------------------------------------- -* Driver Code -*-------------------------------------- -ZPIOCTL .EQ ZPDRV -ZPBufPtr .EQ ZPDRV+2 -Counter .EQ ZPDRV+4 -Offset .EQ ZPDRV+6 -RXTX.Size .EQ ZPDRV+8 -*-------------------------------------- -DRV.CS.START cld - jmp (.1,x) -.1 .DA STATUS - .DA A2osX.BADCALL - .DA A2osX.BADCALL - .DA A2osX.BADCALL - .DA CONTROL - .DA A2osX.BADCALL - .DA OPEN - .DA CLOSE - .DA READ - .DA WRITE - .DA A2osX.BADCALL IRQ - .DA 0 end or relocation -*-------------------------------------- -STATUS >STYA ZPIOCTL - - 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 - 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 - - clc - rts - -STATUS.9 lda #MLI.E.BADCTL - sec - rts -*-------------------------------------- -CONTROL >STYA ZPIOCTL - - 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 - bpl .2 - - clc - rts -*-------------------------------------- -OPEN jsr CLOSE - -* ldx DEVSLOTx0 Done by CLOSE - - lda #W5100.MR.AI+W5100.MR.IND - sta W5100.MR,x - - >AR.SELECT SHAR - - ldy #0 - -.1 lda DCB+S.DCB.NIC.MAC,y - sta W5100.DR,x - iny - cpy #6 - bne .1 - - >AR.SELECT RMSR - lda #3 8k,0k,0k,0k - sta W5100.DR,x ...for Socket RX Buffers - sta W5100.DR,x ...for Socket TX Buffers - - >AR.SELECT S0.MR - lda #W5100.AR.S0.MR.MACRAW+W5100.AR.S0.MR.MF - sta W5100.DR,x - - >AR.SELECT S0.CR - lda #W5100.AR.S0.CR.OPEN - sta W5100.DR,x - - clc - rts -*-------------------------------------- -CLOSE ldx DEVSLOTx0 - - lda #W5100.MR.RST - sta W5100.MR,x - - lda $C019 we can use VBL as we are not on //c -.1 eor $C019 - bpl .1 - - lda $C019 -.2 eor $C019 - bpl .2 - - clc - rts -*-------------------------------------- -READ php - sei - - >STYA ZPIOCTL - - ldx DEVSLOTx0 - - >AR.SELECT S0.RX.RSR - lda W5100.DR,x get the received size HI - ora W5100.DR,x LO - bne .1 - - lda #MLI.E.EOF - -.9 plp - sec - rts - -.1 >AR.SELECT S0.RX.RD - lda W5100.DR,x get the received ptr HI - sta offset+1 - ldy W5100.DR,x get the received ptr LO - sty offset - - and /RXTX.MASK - ora /RX.BASE - sta W5100.AR,x - tya - sta W5100.AR+1,x - - lda W5100.DR,x get RX.Size HI - sta RXTX.Size+1 - - ldy W5100.DR,x get RX.Size LO - sty RXTX.Size - - >SYSCALL getmem - bcs .9 - - >STYA ZPBufPtr - stx .8+1 - - phy - ldy #S.IOCTL.BUFPTR+1 - sta (ZPIOCTL),y - dey - pla - sta (ZPIOCTL),y - - ldy #S.IOCTL.BYTECNT - - lda RXTX.Size - sec - sbc #2 Header Size - sta (ZPIOCTL),y - eor #$ff - sta Counter - - iny - - lda RXTX.Size+1 - sbc #0 - sta (ZPIOCTL),y - eor #$ff - sta Counter+1 - - ldx DEVSLOTx0 - - ldy #0 - -.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 - -.4 >AR.SELECT S0.RX.RD - - lda Offset - clc - adc RXTX.Size - pha save LO - - lda Offset+1 - adc RXTX.Size+1 - - sta W5100.DR,x write HI - pla - sta W5100.DR,x write LO - - >AR.SELECT S0.CR - lda #W5100.AR.S0.CR.RCVD - sta W5100.DR,x - -.8 ldx #$ff SELF MODIFIED hMem - - plp - clc - rts -*-------------------------------------- -WRITE php - sei - - >STYA ZPIOCTL - - ldx DEVSLOTx0 - - ldy #S.IOCTL.BYTECNT - lda (ZPIOCTL),y - sta RXTX.Size - eor #$ff - sta Counter - - iny - lda (ZPIOCTL),y - sta RXTX.Size+1 - eor #$ff - sta Counter+1 - - >AR.SELECT S0.TX.FSR - - lda W5100.DR,x get send size HI - ldy W5100.DR,x LO - cpy RXTX.Size - sbc RXTX.Size+1 - bcs WRITE.1 - - lda #MLI.E.EOF - - plp - sec - rts - -WRITE.1 ldy #S.IOCTL.BUFPTR - lda (ZPIOCTL),y - sta ZPBufPtr - iny - lda (ZPIOCTL),y - sta ZPBufPtr+1 - - ldy #S.ETH.SRCMAC+5 - ldx #5 - -.1 lda DCB+S.DCB.NIC.MAC,x - sta (ZPBufPtr),y - dey - dex - bpl .1 - - ldx DEVSLOTx0 - - >AR.SELECT S0.TX.WR - lda W5100.DR,x Get HI - ldy W5100.DR,x Get LO - and /RXTX.MASK - ora /TX.BASE - sta W5100.AR,x Write HI - sta Offset+1 - tya - sta W5100.AR+1,x Write LO - sta Offset - - ldy #0 - -.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 - -.8 >AR.SELECT S0.TX.WR - - lda Offset - clc - adc RXTX.Size - pha save LO - - lda Offset+1 - adc RXTX.Size+1 - 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 - - plp - clc - rts -*-------------------------------------- -DRV.CS.END -DEVSLOTx0 .BS 1 -*-------------------------------------- -DIB .DA #0 - .DA #0,#0,#0 size - >PSTR "UtherNetII/W5100" - .DA #S.DIB.T.NIC - .BS 1 Subtype - .DA K.VER Version -*-------------------------------------- -DCB .DA #S.DCB.T.NIC - .DA #0 FLAGS - .DA #S.DCB.NIC.LINK.OK+S.DCB.NIC.LINK.FD - .DA #S.DCB.NIC.SPEED.100 - .HS 0008DC123456 MAC - .BS 12 IP/MASK/GW -*-------------------------------------- -DRV.END MAN SAVE /A2OSX.SRC/DRV/UTHERNET2.DRV.S ASM diff --git a/DRV/X.U2.DRV.S.txt b/DRV/X.U2.DRV.S.txt new file mode 100644 index 00000000..851d21e0 --- /dev/null +++ b/DRV/X.U2.DRV.S.txt @@ -0,0 +1,555 @@ +NEW +PREFIX /A2OSX.BUILD +AUTO 4,1 + .OP 65C02 + .OR $2000 +*-------------------------------------- + .DO U2AI=1 + .TF DRV/UTHER2.AI.DRV + .ELSE + .TF DRV/UTHERNET2.DRV + .FIN +*-------------------------------------- +ZPArgPtr .EQ ZPDRV +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +CS.START cld + jmp Dev.Detect cld,jmp abs=DRV + .DA #$61 6502,Level 1 (65c02) + .DA #1 DRV Layout Version 1 + .DA 0 + .DA CS.END-CS.START Code Length + .DA 0 + .DA 0 + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +L.MSG.DETECT .DA MSG.DETECT +L.MSG.DETECT.OK .DA MSG.DETECT.OK +L.MSG.DETECT.KO .DA MSG.DETECT.KO +L.DRV.CS.START .DA DRV.CS.START +L.FD.DEV .DA FD.DEV +L.FD.DEV.NAME .DA FD.DEV.NAME +L.SSCANF.MAC .DA SSCANF.MAC +L.MAC0 .DA DCB+S.DCB.NIC.MAC +L.MAC1 .DA DCB+S.DCB.NIC.MAC+1 +L.MAC2 .DA DCB+S.DCB.NIC.MAC+2 +L.MAC3 .DA DCB+S.DCB.NIC.MAC+3 +L.MAC4 .DA DCB+S.DCB.NIC.MAC+4 +L.MAC5 .DA DCB+S.DCB.NIC.MAC+5 + .DA 0 End Of Reloc Table +*-------------------------------------- +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 + + lda #W5100.MR.AI+W5100.MR.IND + sta W5100.MR,x + + pha + pla + + 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 + sbc #$10 + tax + dey + bne .1 + + >LDYA L.MSG.DETECT.KO + >SYSCALL puts + + lda #MLI.E.NODEV + sec + rts + +.3 stx DEVSLOTx0 + lda #A2osX.S.NIC + sta A2osX.S,y + + jsr Dev.ParseArgs + bcs .9 + +.8 >PUSHW L.FD.DEV.NAME + >PUSHBI 2 + >LDYA L.MSG.DETECT.OK + >SYSCALL printf + + >PUSHWI DRV.END + >PUSHWI DRV.CS.END + >PUSHWI DRV.CS.START + >LDYA L.DRV.CS.START + >SYSCALL InsDrv + bcs .9 + >STYA FD.DEV+S.FD.DEV.DRVPTR + + >LDYA L.FD.DEV + >SYSCALL MKDEV + +.9 rts +*-------------------------------------- +Dev.ParseArgs >LDYA ARGS + >STYA ZPArgPTR + lda (ZPArgPTR) + bne .1 + + lda A2osX.RANDOM16 + eor A2osX.TIMER16 + sta DCB+S.DCB.NIC.MAC+3 + eor A2osX.RANDOM16+1 + sta DCB+S.DCB.NIC.MAC+4 + eor A2osX.TIMER16+1 + sta DCB+S.DCB.NIC.MAC+5 + clc + rts + +.1 >PUSHW L.MAC5 + >PUSHW L.MAC4 + >PUSHW L.MAC3 + >PUSHW L.MAC2 + >PUSHW L.MAC1 + >PUSHW L.MAC0 + >PUSHBI 12 6 x byte PTRs + >PUSHW L.SSCANF.MAC + >LDYA ZPArgPtr + >SYSCALL sscanf + bcc .8 + + lda #K.E.SYN + sec +.8 rts +*-------------------------------------- +CS.END +ARGS .BS 2 + .DO U2AI=1 +MSG.DETECT .AZ "UtherNet2/W5100 Driver (ARP/IP Offload)." + .ELSE +MSG.DETECT .AZ "UtherNet2/W5100 Driver." + .FIN +MSG.DETECT.OK .AZ "UtherNet2/W5100 Installed As Device : %s\r\n" +MSG.DETECT.KO .AZ "Hardware Not Found." +SSCANF.MAC .AZ "%h:%h:%h:%h:%h:%h" +*-------------------------------------- +FD.DEV .DA #S.FD.T.CDEV + .DA #0 HANDLER + .DA #0 BUSID + .DA #0 DEVID + .DA 0 BUSPTR + .BS 2 DRVPTR +FD.DEV.NAME .AZ "ETH7" NAME + .HS 000000 +*-------------------------------------- +* Driver Code +*-------------------------------------- +ZPIOCTL .EQ ZPDRV +ZPBufPtr .EQ ZPDRV+2 +Counter .EQ ZPDRV+4 +Offset .EQ ZPDRV+6 +RXTX.Size .EQ ZPDRV+8 + .DO U2AI=1 +RX.IP .EQ ZPDRV+10 + .FIN +*-------------------------------------- +DRV.CS.START cld + jmp (.1,x) +.1 .DA STATUS + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA A2osX.BADCALL + .DA CONTROL + .DA A2osX.BADCALL + .DA OPEN + .DA CLOSE + .DA READ + .DA WRITE + .DA A2osX.BADCALL IRQ + .DA 0 end or relocation +*-------------------------------------- +STATUS >STYA ZPIOCTL + + 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 + 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 + + clc + rts + +STATUS.9 lda #MLI.E.BADCTL + sec + rts +*-------------------------------------- +CONTROL >STYA ZPIOCTL + + 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 + bpl .2 + + clc + rts +*-------------------------------------- +OPEN jsr CLOSE + +* ldx DEVSLOTx0 Done by CLOSE + + lda #W5100.MR.AI+W5100.MR.IND + sta W5100.MR,x + + >AR.SELECT SHAR + + ldy #0 + +.1 lda DCB+S.DCB.NIC.MAC,y + sta W5100.DR,x + iny + cpy #6 + bne .1 + + >AR.SELECT RMSR + lda #3 8k,0k,0k,0k + sta W5100.DR,x ...for Socket RX Buffers + sta W5100.DR,x ...for Socket TX Buffers + + >AR.SELECT S0.MR + lda #W5100.AR.S0.MR.MACRAW+W5100.AR.S0.MR.MF + sta W5100.DR,x + + >AR.SELECT S0.CR + lda #W5100.AR.S0.CR.OPEN + sta W5100.DR,x + + clc + rts +*-------------------------------------- +CLOSE ldx DEVSLOTx0 + + lda #W5100.MR.RST + sta W5100.MR,x + + lda $C019 we can use VBL as we are not on //c +.1 eor $C019 + bpl .1 + + lda $C019 +.2 eor $C019 + bpl .2 + + clc + rts +*-------------------------------------- +READ php + sei + + >STYA ZPIOCTL + + ldx DEVSLOTx0 + + >AR.SELECT S0.RX.RSR + lda W5100.DR,x get the received size HI + ora W5100.DR,x LO + bne .1 + + lda #MLI.E.EOF + +.9 plp + sec + rts + +.1 >AR.SELECT S0.RX.RD + lda W5100.DR,x get the received ptr HI + sta offset+1 + ldy W5100.DR,x get the received ptr LO + sty offset + + and /RXTX.MASK + ora /RX.BASE + sta W5100.AR,x + tya + sta W5100.AR+1,x + + lda W5100.DR,x get RX.Size HI + sta RXTX.Size+1 + + ldy W5100.DR,x get RX.Size LO + sty RXTX.Size + + >SYSCALL getmem + bcs .9 + + >STYA ZPBufPtr + stx .8+1 + + phy + ldy #S.IOCTL.BUFPTR+1 + sta (ZPIOCTL),y + dey + pla + sta (ZPIOCTL),y + + ldy #S.IOCTL.BYTECNT + + lda RXTX.Size + sec + sbc #2 Header Size + sta (ZPIOCTL),y + eor #$ff + sta Counter + + iny + + lda RXTX.Size+1 + sbc #0 + sta (ZPIOCTL),y + eor #$ff + sta Counter+1 + + ldx DEVSLOTx0 + + ldy #0 + +.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 + +.4 >AR.SELECT S0.RX.RD + + lda Offset + clc + adc RXTX.Size + pha save LO + + lda Offset+1 + adc RXTX.Size+1 + + sta W5100.DR,x write HI + pla + sta W5100.DR,x write LO + + >AR.SELECT S0.CR + lda #W5100.AR.S0.CR.RCVD + sta W5100.DR,x + +.8 ldx #$ff SELF MODIFIED hMem + + plp + clc + rts +*-------------------------------------- +WRITE php + sei + + >STYA ZPIOCTL + + ldx DEVSLOTx0 + + ldy #S.IOCTL.BYTECNT + lda (ZPIOCTL),y + sta RXTX.Size + eor #$ff + sta Counter + + iny + lda (ZPIOCTL),y + sta RXTX.Size+1 + eor #$ff + sta Counter+1 + + >AR.SELECT S0.TX.FSR + + lda W5100.DR,x get send size HI + ldy W5100.DR,x LO + cpy RXTX.Size + sbc RXTX.Size+1 + bcs WRITE.1 + + lda #MLI.E.EOF + + plp + sec + rts + +WRITE.1 ldy #S.IOCTL.BUFPTR + lda (ZPIOCTL),y + sta ZPBufPtr + iny + lda (ZPIOCTL),y + sta ZPBufPtr+1 + + ldy #S.ETH.SRCMAC+5 + ldx #5 + +.1 lda DCB+S.DCB.NIC.MAC,x + sta (ZPBufPtr),y + dey + dex + bpl .1 + + ldx DEVSLOTx0 + + >AR.SELECT S0.TX.WR + lda W5100.DR,x Get HI + ldy W5100.DR,x Get LO + and /RXTX.MASK + ora /TX.BASE + sta W5100.AR,x Write HI + sta Offset+1 + tya + sta W5100.AR+1,x Write LO + sta Offset + + ldy #0 + +.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 + +.8 >AR.SELECT S0.TX.WR + + lda Offset + clc + adc RXTX.Size + pha save LO + + lda Offset+1 + adc RXTX.Size+1 + 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 + + plp + clc + rts +*-------------------------------------- +DRV.CS.END +DEVSLOTx0 .BS 1 +*-------------------------------------- +DIB .DA #0 + .DA #0,#0,#0 size + >PSTR "UtherNetII/W5100" + .DA #S.DIB.T.NIC + .BS 1 Subtype + .DA K.VER Version +*-------------------------------------- +DCB .DA #S.DCB.T.NIC + .DO U2AI=1 + .DA #S.DCB.NIC.FLAGS.ARPOFFLOAD+S.DCB.NIC.FLAGS.IPOFFLOAD + .ELSE + .DA #0 FLAGS + .FIN + .DA #S.DCB.NIC.LINK.OK+S.DCB.NIC.LINK.FD + .DA #S.DCB.NIC.SPEED.100 + .HS 0008DC123456 MAC + .DA #0,#0,#0,#0 IP + .DA #255,#255,#255,#255 MASK + .DA #0,#0,#0,#0 GW +*-------------------------------------- +DRV.END +MAN +SAVE /A2OSX.SRC/DRV/X.U2.DRV.S +LOAD /A2OSX.SRC/DRV/UTHER2.AI.DRV.S +ASM