A2osX/SYS/PM.VEDRIVE.S.IP.txt
2022-04-19 20:24:34 +02:00

537 lines
8.1 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*--------------------------------------
VEDRIVE.MACInit ldx #5
.1 lda CONF.SRCMAC,x
sta DHCP.DISC.SRCMAC,x
sta DHCP.REQ.SRCMAC,x
sta DHCP.DISC.CHADDR,x
sta DHCP.REQ.CHADDR,x
sta ARP.REQ.SRCMAC,x
sta ARP.REQ.SHA,x
sta ARP.REP.SRCMAC,x
sta ARP.REP.SHA,x
sta ADT.REQ.SRCMAC,x
dex
bpl .1
rts
*--------------------------------------
VEDRIVE.IPInit ldx #3
.1 lda CONF.ADDRESS,x
sta ARP.REQ.SPA,x
sta ARP.REP.SPA,x
sta ADT.REQ.IP.SRC,x
lda CONF.SERVER,x
sta ARP.REQ.TPA,x
sta ADT.REQ.IP.DST,x
sta ARP.REP.TPA,x
dex
bpl .1
rts
*--------------------------------------
VEDRIVE.DHCPReq >LDYAI DHCP.DISC
>STYA ZPBufPtr
>LDYAI DHCP.DISC.LEN
>STYA ZPBufCnt
jsr VEDRIVE.SendUDP
bcs .9
jsr VEDRIVE.InitTimer
.2 jsr VEDRIVE.READ
bcc .3
jsr VEDRIVE.Wait
bcc .2
rts
.3 jsr VEDRIVE.CheckDHCPOffer
bcs .2
>LDYAI DHCP.REQ
>STYA ZPBufPtr
>LDYAI DHCP.REQ.LEN
>STYA ZPBufCnt
jsr VEDRIVE.SendUDP
bcs .9
jsr VEDRIVE.InitTimer
.4 jsr VEDRIVE.READ
bcc .5
jsr VEDRIVE.Wait
bcc .4
rts
.5 >LDYAI FRAMEBUF
>STYA ZPBufPtr
jsr VEDRIVE.CheckDHCPFrame
bcs .4
eor #S.DHCP.OPTIONS.DHCPAck
bne .4
* clc
rts
.9 sec
rts
*--------------------------------------
VEDRIVE.IPChecksum
ldy #S.IP.TOTAL.LENGTH+1
lda ZPBufCnt
sec
sbc #S.ETH.EII
sta (ZPBufPtr),y
dey
lda ZPBufCnt+1
sbc /S.ETH.EII
sta (ZPBufPtr),y
lda #0
ldy #S.IP.HDR.CHECKSUM
sta (ZPBufPtr),y
iny
sta (ZPBufPtr),y
stz ZPCheckSum RESET IP CHECKSUM
stz ZPCheckSum+1
clc
ldy #S.IP.V.IHL
ldx #10 10 words for IP Header
.2 lda (ZPBufPtr),y
adc ZPCheckSum
sta ZPCheckSum
iny
lda (ZPBufPtr),y
adc ZPCheckSum+1
sta ZPCheckSum+1
iny
dex
bne .2
ldy #S.IP.HDR.CHECKSUM
lda ZPCheckSum
adc #0
eor #$FF
sta (ZPBufPtr),y
iny
lda ZPCheckSum+1
adc #0
eor #$FF
sta (ZPBufPtr),y
rts
*--------------------------------------
VEDRIVE.UDPChecksum
clc
ldy #S.UDP.LENGTH+1
lda (ZPBufPtr),y
adc #S.IP.PROTOCOL.UDP
sta ZPCheckSum+1
dey
lda (ZPBufPtr),y
adc /S.IP.PROTOCOL.UDP (all zero)
sta ZPCheckSum
ldy #S.IP.SRC
ldx #4 4 words for SRC & DST IP
.1 lda (ZPBufPtr),y
adc ZPCheckSum
sta ZPCheckSum
iny
lda (ZPBufPtr),y
adc ZPCheckSum+1
sta ZPCheckSum+1
iny
dex
bne .1
ldy #S.UDP.LENGTH+1
lda (ZPBufPtr),y
eor #$ff
tax
dey
lda (ZPBufPtr),y
eor #$ff
ldy #S.UDP.CHECKSUM
*--------------------------------------
* X,A = !ByteCount, Y = Offset in Frame
*--------------------------------------
VEDRIVE.ComputeChecksum
phy Save Offset
pha Save !ByteCount.HI
lda #0 Reset Checksum
sta (ZPBufPtr),y
iny
sta (ZPBufPtr),y
>LDYA ZPBufPtr
>STYA ZPPtr1
ldy #S.IP
.1 inx
bne .11
pla
inc
beq .8
pha
.11 lda (ZPPtr1),y
adc ZPCheckSum
sta ZPCheckSum
iny
bne .20
inc ZPPtr1+1
.20 inx
bne .2
pla
inc
beq .7
pha
.2 lda (ZPPtr1),y
adc ZPCheckSum+1
sta ZPCheckSum+1
iny
bne .1
inc ZPPtr1+1
bra .1
.7 adc ZPCheckSum+1 A=0 from beq .7
sta ZPCheckSum+1
.8 ply
lda ZPCheckSum
adc #0 Don't forget to add last carry!!!
eor #$FF
sta (ZPBufPtr),y
iny
lda ZPCheckSum+1
adc #0 Don't forget to add last carry!!!
eor #$FF
sta (ZPBufPtr),y
rts
*--------------------------------------
VEDRIVE.CheckDHCPOffer
>LDYAI FRAMEBUF
>STYA ZPBufPtr
jsr VEDRIVE.CheckDHCPFrame
bcs .9
cmp #S.DHCP.OPTIONS.DHCPOffer
bne .9
ldy #S.DHCP.YIADDR+3
ldx #3
.2 lda (ZPBufPtr),y
sta DHCP.REQ.OPT.REQIP,x
sta CONF.ADDRESS,x
dey
dex
bpl .2
ldy #S.DHCP.SIADDR+3
lda (ZPBufPtr),y
bne .3
ldy #S.IP.SRC+3
.3 ldx #3
.4 lda (ZPBufPtr),y
sta DHCP.REQ.OPT.SVRIP,x
dey
dex
bpl .4
.5 inc ZPPtr1 skip Option 53 (DHCPOffer:530102)
bne .6
inc ZPPtr1+1
.6 lda (ZPPtr1)
sec
adc ZPPtr1 add option len + 1
sta ZPPtr1
bcc .7
inc ZPPtr1+1
.7 lda (ZPPtr1)
cmp #S.DHCP.OPTIONS.END
beq .8
jsr VEDRIVE.GetDHCPOption
bra .5
.8 clc
rts
.9 sec
rts
*--------------------------------------
VEDRIVE.CheckDHCPFrame
jsr VEDRIVE.CheckUDPFrame
bcs .9
ldy #S.DHCP.XID+3
ldx #3
.1 lda (ZPBufPtr),y
cmp DHCP.DISC.XID,x same XID ?
bne .9
dey
dex
bpl .1
lda ZPBufPtr
clc
adc #S.DHCP.OPTIONS
sta ZPPtr1
lda ZPBufPtr+1
adc /S.DHCP.OPTIONS
sta ZPPtr1+1
lda (ZPPtr1)
cmp #S.DHCP.OPTIONS.MSGTYPE
bne .9
ldy #2
lda (ZPPtr1),y
clc
rts
.9 sec
rts
*--------------------------------------
VEDRIVE.GetDHCPOption
cmp #S.DHCP.OPTIONS.MASK
bne .1
ldx #CONF.MASK-CONF.IPCFG
bra .5
.1 cmp #S.DHCP.OPTIONS.GW
bne .2
ldx #CONF.GATEWAY-CONF.IPCFG
bra .5
.2 cmp #S.DHCP.OPTIONS.SRVID
bne .9
ldy #5
ldx #3
.3 lda (ZPPtr1),y
sta DHCP.REQ.OPT.SVRIP,x
dey
dex
bpl .3
rts
.5 ldy #2 Skip Byte count
lda #4
.6 pha
lda (ZPPtr1),y
sta CONF.IPCFG,x
iny
inx
pla
dec
bne .6
.9 rts
*--------------------------------------
VEDRIVE.CheckADTRep
jsr VEDRIVE.CheckUDPFrame
bcs .9
ldy #S.TCPUDP.DSTPORT
lda (ZPBufPtr),y
cmp #$C0
bne .9
iny
lda (ZPBufPtr),y
bne .9
clc
rts
.9 sec
rts
*--------------------------------------
VEDRIVE.CheckUDPFrame
ldy #S.ETH.EII.TYPE
lda (ZPBufPtr),y
cmp /S.ETH.EII.TYPE.IP
bne .9
iny
lda (ZPBufPtr),y
cmp #S.ETH.EII.TYPE.IP
bne .9
ldy #S.IP.PROTOCOL
lda (ZPBufPtr),y
cmp #S.IP.PROTOCOL.UDP
bne .9
clc
rts
.9 sec
rts
*--------------------------------------
VEDRIVE.ARPReq >LDYAI ARP.REQ
>STYA ZPBufPtr
>LDYAI S.ARP
>STYA ZPBufCnt
jsr VEDRIVE.SendARP
bcs .9
jsr VEDRIVE.InitTimer
stz bRemoteMac
.2 jsr VEDRIVE.READ
bcc .3
jsr VEDRIVE.Wait
bcc .2
rts
.3 jsr VEDRIVE.CheckARPFrame
bit bRemoteMac
bpl .2
clc
.9 rts
*--------------------------------------
VEDRIVE.CheckARPFrame
ldy #S.ETH.EII.TYPE
lda (ZPBufPtr),y
cmp /S.ETH.EII.TYPE.ARP
bne .9
iny
lda (ZPBufPtr),y
cmp #S.ETH.EII.TYPE.ARP
bne .9
ldy #S.ARP.OPERATION+1
lda (ZPBufPtr),y
cmp #S.ARP.OPERATION.REP
bne .5
*--------------------------------------
ldy #S.ARP.SPA+3
ldx #3
.1 lda (ZPBufPtr),y
cmp CONF.SERVER,x
bne .8
dey
dex
bpl .1
ldy #S.ARP.SHA+5
ldx #5
.2 lda (ZPBufPtr),y
sta ADT.REQ.DSTMAC,x
sta ARP.REP.DSTMAC,x
sta ARP.REP.THA,x
dey
dex
bpl .2
dec bRemoteMac
clc
rts
*--------------------------------------
.5 cmp #S.ARP.OPERATION.REQ
bne .8
ldy #S.ARP.TPA+3
ldx #3
.6 lda (ZPBufPtr),y
cmp CONF.ADDRESS,x
bne .8
dey
dex
bpl .6
ldy #S.ARP.SHA+9
ldx #9
.7 lda (ZPBufPtr),y
sta ARP.REP.THA,x
dey
dex
bpl .7
>LDYAI ARP.REP
>STYA ZPBufPtr
>LDYAI S.ARP
>STYA ZPBufCnt
jsr VEDRIVE.SendARP
.8 clc
rts
.9 sec
rts
*--------------------------------------
MAN
SAVE usr/src/sys/pm.vedrive.s.ip
LOAD usr/src/sys/pm.vedrive.s
ASM