2022-04-19 18:24:34 +00:00
|
|
|
|
NEW
|
|
|
|
|
AUTO 3,1
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* Drivers
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* OP = 2 : Write drv1
|
|
|
|
|
* OP = 3 : Read drv1
|
|
|
|
|
* OP = 4 : Write drv2
|
|
|
|
|
* OP = 5 : Read drv2
|
|
|
|
|
* CMD = $C5+OP+BLKLO+BLKHI+CHKSUM
|
|
|
|
|
* DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS
|
|
|
|
|
* reuses them after Block operation
|
|
|
|
|
* A1,A2 are used by Disk II Driver,
|
|
|
|
|
* so we use it safely as Tmp Ptr
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
DRV.A1L .EQ $3C
|
|
|
|
|
DRV.A1H .EQ $3D
|
|
|
|
|
DRV.A2L .EQ $3E
|
|
|
|
|
DRV.A2H .EQ $3F
|
|
|
|
|
DRV.COMMAND .EQ $42
|
|
|
|
|
DRV.UNITNUM .EQ $43
|
|
|
|
|
DRV.BUFF .EQ $44
|
|
|
|
|
DRV.BLKNUM .EQ $46
|
|
|
|
|
*--------------------------------------
|
2022-09-17 11:35:52 +00:00
|
|
|
|
DRV.BLK .PH DRV.BLK.START Main LC Bnk 2 $D400->$DFFF
|
2022-04-19 18:24:34 +00:00
|
|
|
|
|
2022-09-17 11:35:52 +00:00
|
|
|
|
DRV.BLK.Slot0n .BS 1
|
|
|
|
|
|
|
|
|
|
lda DRV.COMMAND S=0,R=1,W=2,F=3
|
2022-04-19 18:24:34 +00:00
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
bit DRV.UNITNUM return Status
|
|
|
|
|
bmi .3
|
|
|
|
|
|
|
|
|
|
ldx DRV.D1TotalBlks
|
|
|
|
|
ldy DRV.D1TotalBlks+1
|
|
|
|
|
bra .8
|
|
|
|
|
|
|
|
|
|
.3 ldx DRV.D2TotalBlks
|
|
|
|
|
ldy DRV.D2TotalBlks+1
|
|
|
|
|
|
|
|
|
|
.8 lda #0
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
.1 cmp #3
|
|
|
|
|
beq .8 Format ....
|
|
|
|
|
|
|
|
|
|
bcs DRV.BLK.CMD.ERR more....IO error
|
|
|
|
|
|
|
|
|
|
ora #2 W=2,R=3
|
|
|
|
|
ldy DRV.UNITNUM
|
|
|
|
|
bpl .2
|
|
|
|
|
|
|
|
|
|
adc #2 CC from bcs
|
|
|
|
|
|
|
|
|
|
.2 sta DRV.UDPBuf.Cmd store cmd
|
|
|
|
|
eor #ADT.CMD.VSD
|
|
|
|
|
eor DRV.BLKNUM
|
|
|
|
|
eor DRV.BLKNUM+1
|
|
|
|
|
sta DRV.UDPBuf.Sum Compute & store CheckSum
|
|
|
|
|
|
|
|
|
|
lda DRV.BLKNUM
|
|
|
|
|
sta DRV.UDPBuf.BlkL
|
|
|
|
|
lda DRV.BLKNUM+1
|
|
|
|
|
sta DRV.UDPBuf.BlkH
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
lda DRV.COMMAND
|
|
|
|
|
dec 1-1=0 if read
|
|
|
|
|
bne DRV.BLK.CMD.W go write
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* Read block
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
DRV.BLK.CMD.R >LDYAI S.UDP+5
|
|
|
|
|
jsr DRV.NIC.SendUDP
|
|
|
|
|
bcs DRV.BLK.CMD.ERR
|
|
|
|
|
|
|
|
|
|
jsr DRV.BLK.GetFrame
|
|
|
|
|
bcs .9
|
|
|
|
|
|
|
|
|
|
ldy #DRV.R200.L
|
|
|
|
|
|
|
|
|
|
.6 lda DRV.R200-1,y
|
|
|
|
|
sta $200-1,y
|
|
|
|
|
dey
|
|
|
|
|
bne .6
|
|
|
|
|
|
|
|
|
|
inc DRV.BUFF+1
|
|
|
|
|
|
|
|
|
|
jsr $200
|
|
|
|
|
|
|
|
|
|
dec DRV.R200.DEC
|
|
|
|
|
dec DRV.BUFF+1
|
|
|
|
|
|
|
|
|
|
jsr $200
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
.9 rts
|
|
|
|
|
|
|
|
|
|
DRV.BLK.CMD.ERR lda #MLI.E.IO
|
|
|
|
|
sec
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* Write Block
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
DRV.BLK.CMD.W ldy #DRV.W200.L
|
|
|
|
|
|
|
|
|
|
.1 lda DRV.W200-1,y
|
|
|
|
|
sta $200-1,y
|
|
|
|
|
dey
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
inc DRV.BUFF+1
|
|
|
|
|
|
|
|
|
|
stz DRV.UDPBuf.Data+512
|
|
|
|
|
|
|
|
|
|
jsr $200
|
|
|
|
|
|
|
|
|
|
dec DRV.W200.DEC
|
|
|
|
|
dec DRV.BUFF+1
|
|
|
|
|
|
|
|
|
|
jsr $200
|
|
|
|
|
|
|
|
|
|
>LDYAI S.UDP+5+512+1
|
|
|
|
|
jsr DRV.NIC.SendUDP
|
|
|
|
|
|
|
|
|
|
bcs DRV.BLK.CMD.ERR
|
|
|
|
|
|
|
|
|
|
jsr DRV.BLK.GetFrame
|
|
|
|
|
bcs .9
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
.9 rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
DRV.BLK.GetFrame
|
|
|
|
|
stz DRV.TimeOut
|
|
|
|
|
|
|
|
|
|
.1 lda VBL
|
|
|
|
|
|
|
|
|
|
.2 pha
|
|
|
|
|
jsr DRV.NIC.Rcvd
|
|
|
|
|
pla
|
|
|
|
|
bcc .3
|
|
|
|
|
|
|
|
|
|
eor VBL
|
|
|
|
|
bpl .2
|
|
|
|
|
|
|
|
|
|
dec DRV.TimeOut
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
lda #MLI.E.IO
|
|
|
|
|
* sec
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
.3 jsr DRV.BLK.CheckFrame
|
|
|
|
|
bcs .1
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
DRV.BLK.CheckFrame
|
|
|
|
|
lda DRV.InBuf+S.ETH.EII.TYPE
|
|
|
|
|
cmp /S.ETH.EII.TYPE.IP
|
|
|
|
|
bne .9
|
|
|
|
|
|
|
|
|
|
lda DRV.InBuf+S.ETH.EII.TYPE+1
|
|
|
|
|
cmp #S.ETH.EII.TYPE.IP
|
|
|
|
|
beq .4
|
|
|
|
|
|
|
|
|
|
cmp #S.ETH.EII.TYPE.ARP
|
|
|
|
|
bne .9
|
|
|
|
|
|
|
|
|
|
lda DRV.InBuf+S.ARP.OPERATION+1
|
|
|
|
|
|
|
|
|
|
cmp #S.ARP.OPERATION.REQ
|
|
|
|
|
bne .9
|
|
|
|
|
|
|
|
|
|
ldx #3
|
|
|
|
|
|
|
|
|
|
.1 lda DRV.InBuf+S.ARP.SPA,x
|
|
|
|
|
cmp DRV.UDPBuf+S.IP.DST,x
|
|
|
|
|
bne .9
|
|
|
|
|
|
|
|
|
|
dex
|
|
|
|
|
bpl .1
|
|
|
|
|
|
|
|
|
|
jsr DRV.NIC.SendARP
|
|
|
|
|
|
|
|
|
|
.9 sec
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
.4 lda DRV.InBuf+S.IP.PROTOCOL
|
|
|
|
|
cmp #S.IP.PROTOCOL.UDP
|
|
|
|
|
bne .9
|
|
|
|
|
|
|
|
|
|
ldx #3
|
|
|
|
|
|
|
|
|
|
.5 lda DRV.InBuf+S.IP.SRC,x
|
|
|
|
|
cmp DRV.UDPBuf+S.IP.DST,x
|
|
|
|
|
bne .9
|
|
|
|
|
|
|
|
|
|
lda DRV.InBuf+S.IP.DST,x
|
|
|
|
|
cmp DRV.UDPBuf+S.IP.SRC,x
|
|
|
|
|
bne .9
|
|
|
|
|
|
|
|
|
|
dex
|
|
|
|
|
bpl .5
|
|
|
|
|
|
|
|
|
|
lda DRV.InBuf+S.TCPUDP.SRCPORT
|
|
|
|
|
cmp DRV.UDPBuf+S.TCPUDP.DSTPORT
|
|
|
|
|
bne .9
|
|
|
|
|
|
|
|
|
|
lda DRV.InBuf+S.TCPUDP.SRCPORT+1
|
|
|
|
|
cmp DRV.UDPBuf+S.TCPUDP.DSTPORT+1
|
|
|
|
|
bne .9
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
DRV.BLK.IPUDPCheksum
|
|
|
|
|
stz DRV.UDPBuf+S.IP.HDR.CHECKSUM
|
|
|
|
|
stz DRV.UDPBuf+S.IP.HDR.CHECKSUM+1
|
|
|
|
|
|
|
|
|
|
stz DRV.CheckSum
|
|
|
|
|
stz DRV.CheckSum+1
|
|
|
|
|
|
|
|
|
|
lda DRV.FrameSize
|
|
|
|
|
sec
|
|
|
|
|
sbc #S.ETH.EII
|
|
|
|
|
sta DRV.UDPBuf+S.IP.TOTAL.LENGTH+1
|
|
|
|
|
|
|
|
|
|
lda DRV.FrameSize+1
|
|
|
|
|
sbc /S.ETH.EII
|
|
|
|
|
sta DRV.UDPBuf+S.IP.TOTAL.LENGTH
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
|
|
|
|
|
ldy #S.IP.V.IHL
|
|
|
|
|
|
|
|
|
|
ldx #10 10 words for IP Header
|
|
|
|
|
|
|
|
|
|
.1 lda DRV.UDPBuf,y
|
|
|
|
|
adc DRV.CheckSum
|
|
|
|
|
sta DRV.CheckSum
|
|
|
|
|
iny
|
|
|
|
|
lda DRV.UDPBuf,y
|
|
|
|
|
adc DRV.CheckSum+1
|
|
|
|
|
sta DRV.CheckSum+1
|
|
|
|
|
iny
|
|
|
|
|
dex
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
lda DRV.CheckSum
|
|
|
|
|
adc #0
|
|
|
|
|
eor #$FF
|
|
|
|
|
sta DRV.UDPBuf+S.IP.HDR.CHECKSUM
|
|
|
|
|
|
|
|
|
|
lda DRV.CheckSum+1
|
|
|
|
|
adc #0
|
|
|
|
|
eor #$FF
|
|
|
|
|
sta DRV.UDPBuf+S.IP.HDR.CHECKSUM+1
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
stz DRV.UDPBuf+S.UDP.CHECKSUM
|
|
|
|
|
stz DRV.UDPBuf+S.UDP.CHECKSUM+1
|
|
|
|
|
|
|
|
|
|
lda DRV.FrameSize
|
|
|
|
|
sec
|
|
|
|
|
sbc #S.IP
|
|
|
|
|
sta DRV.UDPBuf+S.UDP.LENGTH+1
|
|
|
|
|
|
|
|
|
|
pha
|
|
|
|
|
|
|
|
|
|
eor #$ff
|
|
|
|
|
sta DRV.nCnt
|
|
|
|
|
|
|
|
|
|
lda DRV.FrameSize+1
|
|
|
|
|
sbc /S.IP
|
|
|
|
|
sta DRV.UDPBuf+S.UDP.LENGTH
|
|
|
|
|
|
|
|
|
|
tax
|
|
|
|
|
|
|
|
|
|
eor #$ff
|
|
|
|
|
sta DRV.nCnt+1
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
|
|
|
|
|
pla A,X = UDP Len
|
|
|
|
|
adc #S.IP.PROTOCOL.UDP
|
|
|
|
|
sta DRV.CheckSum+1
|
|
|
|
|
|
|
|
|
|
txa
|
|
|
|
|
adc /S.IP.PROTOCOL.UDP (all zero)
|
|
|
|
|
sta DRV.CheckSum
|
|
|
|
|
|
|
|
|
|
ldy #S.IP.SRC
|
|
|
|
|
ldx #4 4 words for SRC & DST IP
|
|
|
|
|
|
|
|
|
|
.2 lda DRV.UDPBuf,y
|
|
|
|
|
adc DRV.CheckSum
|
|
|
|
|
sta DRV.CheckSum
|
|
|
|
|
iny
|
|
|
|
|
lda DRV.UDPBuf,y
|
|
|
|
|
adc DRV.CheckSum+1
|
|
|
|
|
sta DRV.CheckSum+1
|
|
|
|
|
iny
|
|
|
|
|
dex
|
|
|
|
|
bne .2
|
|
|
|
|
|
|
|
|
|
>LDYAI DRV.UDPBuf
|
|
|
|
|
>STYA DRV.A1L
|
|
|
|
|
|
|
|
|
|
ldy #S.IP
|
|
|
|
|
|
|
|
|
|
.3 inc DRV.nCnt
|
|
|
|
|
bne .4
|
|
|
|
|
|
|
|
|
|
inc DRV.nCnt+1
|
|
|
|
|
beq .8
|
|
|
|
|
|
|
|
|
|
.4 lda (DRV.A1L),y
|
|
|
|
|
adc DRV.CheckSum
|
|
|
|
|
sta DRV.CheckSum
|
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
bne .5
|
|
|
|
|
|
|
|
|
|
inc DRV.A1H
|
|
|
|
|
|
|
|
|
|
.5 inc DRV.nCnt
|
|
|
|
|
bne .6
|
|
|
|
|
|
|
|
|
|
inc DRV.nCnt+1
|
|
|
|
|
beq .7
|
|
|
|
|
|
|
|
|
|
.6 lda (DRV.A1L),y
|
|
|
|
|
adc DRV.CheckSum+1
|
|
|
|
|
sta DRV.CheckSum+1
|
|
|
|
|
iny
|
|
|
|
|
bne .3
|
|
|
|
|
|
|
|
|
|
inc DRV.A1H
|
|
|
|
|
bra .3
|
|
|
|
|
|
|
|
|
|
.7 lda #0
|
|
|
|
|
adc DRV.CheckSum+1
|
|
|
|
|
sta DRV.CheckSum+1
|
|
|
|
|
|
|
|
|
|
.8 lda DRV.CheckSum
|
|
|
|
|
adc #0 Don't forget to add last carry!!!
|
|
|
|
|
eor #$FF
|
|
|
|
|
sta DRV.UDPBuf+S.UDP.CHECKSUM
|
|
|
|
|
|
|
|
|
|
lda DRV.CheckSum+1
|
|
|
|
|
adc #0 Don't forget to add last carry!!!
|
|
|
|
|
eor #$FF
|
|
|
|
|
sta DRV.UDPBuf+S.UDP.CHECKSUM+1
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
DRV.R200 lda DRV.InBuf+S.UDP+10+256,y
|
|
|
|
|
DRV.R200.DEC .EQ *-DRV.R200+$1ff
|
|
|
|
|
bit RRAMWRAMBNK1
|
|
|
|
|
sta (DRV.BUFF),y
|
|
|
|
|
bit RRAMWRAMBNK2
|
|
|
|
|
iny
|
|
|
|
|
bne DRV.R200
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
DRV.R200.L .EQ *-DRV.R200
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
DRV.W200 bit RRAMWRAMBNK1
|
|
|
|
|
lda (DRV.BUFF),y
|
|
|
|
|
bit RRAMWRAMBNK2
|
|
|
|
|
sta DRV.UDPBuf.Data+256,y
|
|
|
|
|
DRV.W200.DEC .EQ *-DRV.W200+$1ff
|
|
|
|
|
eor DRV.UDPBuf.Data+512
|
|
|
|
|
sta DRV.UDPBuf.Data+512
|
|
|
|
|
iny
|
|
|
|
|
bne DRV.W200
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
DRV.W200.L .EQ *-DRV.W200
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
DRV.D1TotalBlks .BS 2
|
|
|
|
|
DRV.D2TotalBlks .BS 2
|
2022-09-17 11:35:52 +00:00
|
|
|
|
DRV.BLK.Slotn0 .BS 1 SELF MODIFIED slot n0
|
2022-04-19 18:24:34 +00:00
|
|
|
|
DRV.TimeOut .BS 1
|
|
|
|
|
DRV.FrameSize .BS 2
|
|
|
|
|
DRV.nCnt .BS 2
|
|
|
|
|
DRV.CheckSum .BS 2
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.EP
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.LIST ON
|
|
|
|
|
DRV.BLK.SIZE .EQ *-DRV.BLK
|
|
|
|
|
.LIST OFF
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
MAN
|
|
|
|
|
SAVE usr/src/sys/pm.vedrive.s.bk
|
|
|
|
|
LOAD usr/src/sys/pm.vedrive.s
|
|
|
|
|
ASM
|