A2osX/SYS/PM.VEDRIVE.S.IP.txt

537 lines
8.1 KiB
Plaintext
Raw Normal View History

2022-03-13 12:58:15 +00:00
NEW
AUTO 3,1
*--------------------------------------
VEDRIVE.MACInit ldx #5
.1 lda CONF.SRCMAC,x
2022-04-19 18:24:34 +00:00
2022-03-13 12:58:15 +00:00
sta DHCP.DISC.SRCMAC,x
sta DHCP.REQ.SRCMAC,x
2022-04-19 18:24:34 +00:00
2022-03-13 12:58:15 +00:00
sta DHCP.DISC.CHADDR,x
sta DHCP.REQ.CHADDR,x
2022-04-19 18:24:34 +00:00
2022-03-13 12:58:15 +00:00
sta ARP.REQ.SRCMAC,x
sta ARP.REQ.SHA,x
2022-04-19 18:24:34 +00:00
2022-03-13 12:58:15 +00:00
sta ARP.REP.SRCMAC,x
sta ARP.REP.SHA,x
2022-04-19 18:24:34 +00:00
2022-03-13 12:58:15 +00:00
sta ADT.REQ.SRCMAC,x
2022-04-19 18:24:34 +00:00
2022-03-13 12:58:15 +00:00
dex
bpl .1
rts
*--------------------------------------
VEDRIVE.IPInit ldx #3
.1 lda CONF.ADDRESS,x
2022-04-19 18:24:34 +00:00
2022-03-13 12:58:15 +00:00
sta ARP.REQ.SPA,x
2022-04-19 18:24:34 +00:00
sta ARP.REP.SPA,x
2022-03-13 12:58:15 +00:00
sta ADT.REQ.IP.SRC,x
lda CONF.SERVER,x
sta ARP.REQ.TPA,x
sta ADT.REQ.IP.DST,x
2022-04-19 18:24:34 +00:00
sta ARP.REP.TPA,x
2022-03-13 12:58:15 +00:00
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
2022-04-19 18:24:34 +00:00
adc /S.IP.PROTOCOL.UDP (all zero)
2022-03-13 12:58:15 +00:00
sta ZPCheckSum
2022-04-19 18:24:34 +00:00
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
2022-03-13 12:58:15 +00:00
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
2022-04-19 18:24:34 +00:00
sta ARP.REP.DSTMAC,x
sta ARP.REP.THA,x
2022-03-13 12:58:15 +00:00
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