ProDOS.FX:XCLK support, PM.VEDRIVE

This commit is contained in:
burniouf 2022-04-19 20:24:34 +02:00
parent d249f0c0b9
commit afc4e61dc9
23 changed files with 2444 additions and 486 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -900,7 +900,7 @@ LA021 jsr BS.KW.FRE
lda #$00
sta BS.MEMSIZE
jmp LA089 Z
bra LA089 Z
*--------------------------------------
BS.KW.FRE stz BS.TXTTAB
@ -937,7 +937,7 @@ LA07D lda AS.HIMEM+1
lda AS.HIMEM
sta BS.MEMSIZE
sta AS.STRINGSTART
*--------------------------------------
LA089 clc
beq LA08D
@ -999,7 +999,7 @@ LA0E0 sta XBBDA
LA0F8 lda #BS.E.NOBUFFER
LA0FA rts
*--------------------------------------
LA0FB clc
LA0FC lda ZP.A2L
@ -1039,7 +1039,7 @@ LA10E ldy #$00
LA12F clc
rts
*--------------------------------------
LA131 jsr LA160
bcs LA12F
@ -1119,15 +1119,15 @@ LA199 lda XBBD7
ldx XBBD9
inx
LA1AD lda (ZP.PCL),y
.1 lda (ZP.PCL),y
sta (ZP.A1L),y
iny
bne LA1AD
bne .1
inc ZP.A1H
inc ZP.PCH
dex
bne LA1AD
bne .1
rts
*--------------------------------------

View File

@ -321,7 +321,7 @@ LA3F2 cmp XBBDC
bne LA3E1
beq LA3DB
*--------------------------------------
LA3FD lda (ZP.A2L),y
beq LA410

View File

@ -967,7 +967,7 @@ LB481 inx
dec ZP.PCL
bne LB481
BS.KW.NOMON clc
clc
rts
*--------------------------------------
BS.CheckFilename
@ -1582,7 +1582,7 @@ BS.KW.ONLINE jsr MON.CROUT
pla
sta MLI.DEVNUM
clc
BS.KW.NOMON clc
rts
*--------------------------------------
BS.Expand2.P .DA #1

1374
BASIC.FX/BASIC.S.X.txt Normal file

File diff suppressed because it is too large Load Diff

131
BIN/IRC.S.TLS.txt Normal file
View File

@ -0,0 +1,131 @@
NEW
AUTO 3,1
*--------------------------------------
CS.RUN.TLS jsr CS.RUN.TLS.init
>PUSHB hSocket
>PUSHW L.TLS.CHELLO
>PUSHWI TLS.CHELLO.L
>LIBCALL hLIBTCPIP,LIBTCPIP.Write
bcs .9
lda #TIMEOUT.MAX
sta TimeOut
.1 jsr CS.RUN.TLS.Read
bcc .2
ldx TimeOut
bne .1
lda #MLI.E.IO
bra .9
.2
>DEBUG
bra .1
.9 pha
>LDYA L.MSG.TLSKO
>SYSCALL PutS
pla
sec
rts
*--------------------------------------
CS.RUN.TLS.init >LDYA L.MSG.TLS
>SYSCALL PutS
lda A2osX.RANDOM16
sta ZPPtr1
lda A2osX.RANDOM16+1
and #$7F
sta ZPPtr1+1
>LDYA L.TLS.CHELLO.UT
>STYA ZPPtr2
ldy #31
.10 lda (ZPPtr1),y
sta (ZPPtr2),y
dey
bpl .10
lda #50
sta TimeOut
rts
*--------------------------------------
CS.RUN.TLS.Read >SLEEP
>PUSHB hSocket
>PUSHW ZPBufPtr
>PUSHWI 11
>LIBCALL hLIBTCPIP,LIBTCPIP.Read
bcs .99
cpy #11
bne .9
ldy #TLS.HDR.L-1
.1 lda (ZPBufPtr),y
cmp TLS.HDR,y
bne .9
dey
bpl .1
>PUSHW L.MSG.TLS.HDR
ldy #TLS.LENGTH
lda (ZPBufPtr),y
>PUSHA
iny
lda (ZPBufPtr),y
>PUSHA
ldy #TLS.HS.MT
lda (ZPBufPtr),y
>PUSHA
>PUSHBI 3
>SYSCALL PrintF
>SLEEP
>PUSHB hSocket
>PUSHW ZPBufPtr
ldy #TLS.LENGTH+1
lda (ZPBufPtr),y
sec
sbc #6
tax
dey
lda (ZPBufPtr),y
sbc #0
>PUSHA
txa
>PUSHA
>LIBCALL hLIBTCPIP,LIBTCPIP.Read
bcs .99
>STYA ZPPtr2 RCVD len
.99 rts
.9 lda #MLI.E.IO
sec
rts
*--------------------------------------
MAN
SAVE usr/src/bin/irc.s.tls
LOAD usr/src/bin/irc.s
ASM

View File

@ -5,11 +5,12 @@ NEW
.OR $2000
.TF bin/irc
*--------------------------------------
TLS .EQ 0
TLS .EQ 1
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.i
.INB inc/mli.e.i
.INB inc/eth.i
.INB inc/libtcpip.i
.DO TLS=1
@ -120,7 +121,7 @@ J.ESC .DA CS.RUN.CHARIN.LEFT
.DA CS.RUN.CHARIN.RIGHT
.DO TLS=1
L.MSG.TLS .DA MSG.TLS
L.MSG.TLS.1 .DA MSG.TLS.1
L.MSG.TLS.HDR .DA MSG.TLS.HDR
L.MSG.TLSKO .DA MSG.TLSKO
L.TLS.CHELLO .DA TLS.CHELLO
L.TLS.CHELLO.UT .DA TLS.CHELLO.UT
@ -283,7 +284,7 @@ CS.RUN.CheckArgs
rts
*--------------------------------------
CS.RUN.GetBuffers
>LDYAI 2048
>LDYAI 5120
>SYSCALL GetMem
bcs .9
@ -353,73 +354,6 @@ CS.RUN.Connect >PUSHBI S.SOCKET.T.STREAM
>PUSHBI 0
>SYSCALL PrintF
rts
*--------------------------------------
.DO TLS=1
CS.RUN.TLS jsr CS.RUN.TLS.init
>PUSHB hSocket
>PUSHW L.TLS.CHELLO
>PUSHWI TLS.CHELLO.L
>LIBCALL hLIBTCPIP,LIBTCPIP.Write
bcs .9
lda #TIMEOUT.MAX
sta TimeOut
.1 >SLEEP
>PUSHB hSocket
>PUSHW ZPBufPtr
>PUSHWI 2048
>LIBCALL hLIBTCPIP,LIBTCPIP.Read
bcc .2
ldx TimeOut
bne .1
bra .9
.2 >STYA ZPPtr2 RCVD len
>PUSHW L.MSG.TLS.1
>PUSHW ZPPtr2
>PUSHBI 2
>SYSCALL PrintF
sec
rts
.9 pha
>LDYA L.MSG.TLSKO
>SYSCALL PutS
pla
sec
rts
*--------------------------------------
CS.RUN.TLS.init >LDYA L.MSG.TLS
>SYSCALL PutS
lda A2osX.RANDOM16
sta ZPPtr1
lda A2osX.RANDOM16+1
and #$7F
sta ZPPtr1+1
>LDYA L.TLS.CHELLO.UT
>STYA ZPPtr2
ldy #31
.10 lda (ZPPtr1),y
sta (ZPPtr2),y
dey
bpl .10
lda #50
sta TimeOut
rts
.FIN
*--------------------------------------
CS.RUN.Register >LDYA L.MSG.REGISTER
jsr CS.RUN.STATUSMSG
@ -1091,6 +1025,10 @@ CS.QUIT ldy #hOutputBuf
>SYSCALL FreeMem
.8 rts
*--------------------------------------
.DO TLS=1
.INB usr/src/bin/irc.s.tls
.FIN
*--------------------------------------
CS.END
LIBTCPIP .AZ "libtcpip"
@ -1104,7 +1042,7 @@ MSG.SKTOK .AZ "Connected\r\n(Exit key is Ctrl-T)\r\n"
MSG.SKTERR .AZ "Socket Error : $%h\r\n"
.DO TLS=1
MSG.TLS .AZ "TLS:Negociation..."
MSG.TLS.1 .AZ "TLS:Received %D bytes.\r\n"
MSG.TLS.HDR .AZ "TLS:Received %D bytes, Message Type:%h.\r\n"
MSG.TLSKO .AZ "TLS:Negotiation failed."
.FIN
MSG.REGISTER .AZ "Registering User..."
@ -1184,6 +1122,11 @@ TLS.CHELLO.L .EQ *-TLS.CHELLO
TLS.CHELLO.L1 .EQ *-TLS.CHELLO.1
TLS.CHELLO.L2 .EQ *-TLS.CHELLO.2
TLS.CHELLO.LE .EQ *-TLS.CHELLO.E
*--------------------------------------
TLS.HDR .DA #TLS.CT.HS
.DA TLS.LV.TLS12
TLS.HDR.L .EQ *-TLS.HDR
*--------------------------------------
.FIN
*--------------------------------------
.DUMMY

View File

@ -2,10 +2,10 @@ NEW
AUTO 3,1
*--------------------------------------
IO.D2.SeekTimeR .EQ 45 LIBBLKDEV Recalibration
IO.D2.SeekTimeF .EQ 30 LIBBLKDEV Track Formatter
IO.D2.SeekTimeB .EQ 30 LIBBLKDEV Boot Block
IO.D2.SeekTimeP .EQ 30 ProDOS.FX initial
IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128
IO.D2.SeekTimeF .EQ 56 LIBBLKDEV Track Formatter
IO.D2.SeekTimeB .EQ 56 LIBBLKDEV Boot Block
IO.D2.SeekTimeP .EQ 28 ProDOS.FX initial
IO.D2.SeekTimeI .EQ 14 ProDOS.FX increment -> until > 128
*--------------------------------------
IO.D2.Ph0Off .EQ $C080
IO.D2.Ph0On .EQ $C081

View File

@ -393,12 +393,11 @@ BB.Seek lda BB.HdrTrk get track we're on
lda #0
jsr BB.Wait100usecA
lda IO.D2.Ph0Off,y
bcc .11
lda IO.D2.Ph0Off,x
nop
nop
.11 lda IO.D2.Ph0Off,y
.11
*--------------------------------------
BB.Read ldx BB.Slotn0

View File

@ -136,14 +136,12 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
jsr D2.Wait25600usec
lda IO.D2.Ph0Off,y
bcc .90
lda IO.D2.Ph0Off,x
nop
nop
.90 lda IO.D2.Ph0Off,y
rts
.90 rts
*--------------------------------------
D2.SeekPhOnY and #6
ora D2.Slotn0

View File

@ -24,7 +24,7 @@ LDR.MSG.IIe .AT "//e"
LDR.MSG.IIc .AT "//c"
LDR.MSG.IIgs .AT "IIgs"
LDR.MSG.Unknown .AT "Unknown"
LDR.MSG.CLK .AT "XClk"
LDR.MSG.CLK .AT "?Clk"
LDR.MSG.RAM .AT "/RAM"
LDR.MSG.ROOTERR .AT "ERR reading CATALOG"
*--------------------------------------
@ -430,7 +430,7 @@ LDR.ClkDevDCLK php
ldy PAKME.DCLK+1
jmp LDR.SetupCLK
.9 cld
.9 cld
*--------------------------------------
LDR.ClkDevNCLK php
sei
@ -520,7 +520,7 @@ LDR.ClkDevNCLK php
bra LDR.SetupCLK
*--------------------------------------
LDR.ClkDevTCLK jsr LDR.IsIIc
bcs .9
bcs LDR.ClkDevXCLK
stz idxl
lda #$C1
@ -532,11 +532,6 @@ LDR.ClkDevTCLK jsr LDR.IsIIc
.1 jsr LDR.CheckTClkID
bcs .7
* sta SETPAGE2
* stz $478,x
* stz $7f8,x
* sta CLRPAGE2
stz $478,x
stz $7f8,x
@ -568,8 +563,31 @@ LDR.ClkDevTCLK jsr LDR.IsIIc
lda idxl+1
cmp #$C8
bne .1
*--------------------------------------
LDR.ClkDevXCLK bit RROMBNK2
sta $C070
bit $FACA
bit $FACA
bit $FAFE
lda $DFFE
cmp #$4A
bne .9
lda $DFFF
cmp #$CD
bne .9
lda $D8F0
bit $F851
cmp #$AD
beq .1
.9 rts
.1 lda #'X'
ldx PAKME.XCLK
ldy PAKME.XCLK+1
*--------------------------------------
LDR.SetupCLK stx ZPInBufPtr
sty ZPInBufPtr+1

100
ProDOS.FX/ProDOS.S.XCLK.txt Normal file
View File

@ -0,0 +1,100 @@
NEW
AUTO 3,1
*--------------------------------------
* Driver For ROMXce Clock
*--------------------------------------
* we can safely use $200, PCL/H, AIL/H (used by TCLK)
*--------------------------------------
XCLK.API.RTCBUF .EQ $2B0
XCLK.API.WRCLK .EQ $C803
XCLK.API.RDCLK .EQ $C806
*--------------------------------------
XCLK.START php
sei
ldx #XCLK.START2xx.L
.1 lda XCLK.START2xx,X
sta XCLK.CODE2xx,X
dex
bpl .1
jsr XCLK.CODE2xx
* Minutes
lda XCLK.API.RTCBUF+1
and #%01111111 59
jsr XCLK.BCD2BIN
sta TIMELO
* Hour
lda XCLK.API.RTCBUF+2
and #%00111111 23
jsr XCLK.BCD2BIN
sta TIMELO+1
* Day
lda XCLK.API.RTCBUF+4
and #%00111111 31
jsr XCLK.BCD2BIN
sta DATELO
* Year
lda XCLK.API.RTCBUF+6 99
jsr XCLK.BCD2BIN
sta DATELO+1
* Month
lda XCLK.API.RTCBUF+5
and #%00011111 12
jsr XCLK.BCD2BIN
asl
asl
asl
asl
asl
tsb DATELO
rol DATELO+1
plp
rts
XCLK.BCD2BIN tax
and #$F0
lsr CC
sta PCL temp location
lsr CC
lsr CC
adc PCL
sta PCL
txa
* clc
and #$0F
adc PCL
rts
XCLK.START2xx bit RROMBNK2
sta $C070
bit $FACA
bit $FACA
bit $FAFE
jsr XCLK.API.RDCLK
bit $F851
bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
rts
XCLK.START2xx.L .EQ *-XCLK.START2xx
*--------------------------------------
XCLK.CODE2xx .EQ XCLK.API.RTCBUF-XCLK.START2xx.L
*--------------------------------------
.LIST ON
XCLK.LEN .EQ *-XCLK.START
.LIST OFF
*--------------------------------------
* CONTROL SECTION :
*--------------------------------------
.DO XCLK.LEN>125
ERROR:XCLK Driver too big
.FIN
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/prodos.s.xclk
LOAD usr/src/prodos.fx/prodos.s
ASM

View File

@ -568,7 +568,7 @@ XRW.Wait100usec lda #1
XRW.Wait100usecA
phx
.1 ldx #18 (2)
.1 ldx #20 (2)
.2 dex (2)
bne .2 (3)
@ -836,15 +836,13 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
jsr XRW.Wait25600usec
lda IO.D2.Ph0Off,y
bcc .90
lda IO.D2.Ph0Off,x
nop
clc Exit wit CC (recalibrate)
.90 lda IO.D2.Ph0Off,y
rts
.90 rts
*--------------------------------------
XRW.SeekPhOnY and #6
ora A2L

View File

@ -220,6 +220,7 @@ PAKME.RAMX .DA RAMX.PAK
PAKME.DCLK .DA DCLK.PAK
PAKME.NCLK .DA NCLK.PAK
PAKME.TCLK .DA TCLK.PAK
PAKME.XCLK .DA XCLK.PAK
PAKME.CCLK .DA CCLK.PAK
PAKME.SEL1 .DA SEL1.PAK
PAKME.SEL2 .DA SEL2.PAK
@ -289,6 +290,12 @@ TCLK.PAK .DA #0
.INB usr/src/prodos.fx/prodos.s.tclk
.EP
XCLK.PAK .DA #0
.DA XCLK.LEN
.PH XDOS.ClockDrv
.INB usr/src/prodos.fx/prodos.s.xclk
.EP
CCLK.PAK .DA #0
.DA CCLK.LEN
.PH XDOS.ClockDrv
@ -309,7 +316,7 @@ SEL2.PAK .DA #0
*--------------------------------------
.AS "PAKME" TAG
.DA $2000 BIN ORG
.DA #13 Chunk Count
.DA #14 Chunk Count
.DA PAKME.Table Chunks
*--------------------------------------
MAN

408
SYS/PM.VEDRIVE.S.BK.txt Normal file
View File

@ -0,0 +1,408 @@
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
*--------------------------------------
DRV.BLK .PH DRV.BLK.START Main LC Bnk 2 $D001->$DFFF
DRV.BLK.1 lda DRV.COMMAND S=0,R=1,W=2,F=3
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
DRV.BLK.Slotn0 .BS 1 SELF MODIFIED slot 0n
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

View File

@ -4,12 +4,54 @@ NEW
GS.Init sec
rts
*--------------------------------------
DRV.GS .EQ *
.PH $D400
GS.Read php
sei
ldx Slotn0
*--------------------------------------
GS.READWRITE.9 plp
sec
rts
*--------------------------------------
GS.Write php
sei
ldx Slotn0
plp
sec
rts
*--------------------------------------
GS.Name >PSTR "LanCEgs"
*--------------------------------------
DRV.GS .PH DRV.NIC.START
jmp DRV.GS.Write
DRV.GS.Read php
sei
*--------------------------------------
DRV.GS.9 plp
sec
rts
*--------------------------------------
DRV.GS.Write php
sei
plp
sec
rts
*--------------------------------------
.EP
.LIST ON
DRV.GS.SIZE .EQ *-DRV.GS
.LIST OFF
*--------------------------------------
MAN
SAVE usr/src/sys/pm.vedrive.s.gs

View File

@ -4,15 +4,21 @@ NEW
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
@ -21,13 +27,17 @@ VEDRIVE.MACInit ldx #5
VEDRIVE.IPInit ldx #3
.1 lda CONF.ADDRESS,x
sta ARP.REQ.SPA,x
sta ARP.REP.TPA,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
@ -143,9 +153,22 @@ VEDRIVE.UDPChecksum
dey
lda (ZPBufPtr),y
adc /S.IP.PROTOCOL.UDP (all zero)
adc /S.IP.PROTOCOL.UDP (all zero)
sta ZPCheckSum
jsr VEDRIVE.AddSrcDstIPToChecksum
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
@ -223,23 +246,6 @@ VEDRIVE.ComputeChecksum
sta (ZPBufPtr),y
rts
*--------------------------------------
VEDRIVE.AddSrcDstIPToChecksum
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
rts
*--------------------------------------
VEDRIVE.CheckDHCPOffer
>LDYAI FRAMEBUF
>STYA ZPBufPtr
@ -459,7 +465,6 @@ VEDRIVE.CheckARPFrame
ldy #S.ARP.OPERATION+1
lda (ZPBufPtr),y
cmp #S.ARP.OPERATION.REP
bne .5
*--------------------------------------
@ -479,6 +484,8 @@ VEDRIVE.CheckARPFrame
.2 lda (ZPBufPtr),y
sta ADT.REQ.DSTMAC,x
sta ARP.REP.DSTMAC,x
sta ARP.REP.THA,x
dey
dex
bpl .2

View File

@ -234,10 +234,154 @@ U1.WRITE php
*--------------------------------------
U1.Name >PSTR "Uthernet V1"
*--------------------------------------
DRV.U1 .EQ *
.PH $D400
DRV.U1 .PH DRV.NIC.START
jmp DRV.U1.SendARP
jmp DRV.U1.SendUDP
DRV.U1.Rcvd php
sei
ldx DRV.BLK.Slotn0
lda /PP.RxEvent
sta PacketPagePTR+1,x
lda #PP.RxEvent
sta PacketPagePTR,x
lda PacketPageDATA+1,x
ldy PacketPageDATA,x
and /PP.RxEvent.RxOK+PP.RxEvent.IA+PP.RxEvent.Brdcast+PP.RxEvent.Runt
beq DRV.U1.9
lda RTDATA+1,x discard RxStatus
lda RTDATA,x
lda RTDATA+1,x get RxLength
sta DRV.FrameSize+1
eor #$ff
sta DRV.nCnt+1
lda RTDATA,x
sta DRV.FrameSize
eor #$ff
sta DRV.nCnt
>LDYAI DRV.InBuf
>STYA DRV.A1L
ldy #0
.2 inc DRV.nCnt
bne .3
inc DRV.nCnt+1
beq .8
.3 lda RTDATA,x
sta (DRV.A1L),y
iny
inc DRV.nCnt
bne .4
inc DRV.nCnt+1
beq .8
.4 lda RTDATA+1,x
sta (DRV.A1L),y
iny
bne .2
inc DRV.A1L+1
bra .2
.8 plp
clc
rts
*--------------------------------------
DRV.U1.9 plp
sec
rts
*--------------------------------------
DRV.U1.SendARP >LDYAI S.ARP
>STYA DRV.FrameSize
>LDYAI DRV.ARPBuf
bra DRV.U1.Send
*--------------------------------------
DRV.U1.SendUDP >STYA DRV.FrameSize
jsr DRV.BLK.IPUDPCheksum
>LDYAI DRV.UDPBuf
DRV.U1.Send >STYA DRV.A1L
php
sei
ldx DRV.BLK.Slotn0
lda /PP.TxCMD.LID+PP.TxCMD.TxStartFULL
sta TxCMD+1,x
lda #PP.TxCMD.LID+PP.TxCMD.TxStartFULL
sta TxCMD,x
lda DRV.FrameSize+1
sta TxLength+1,x
eor #$ff
sta DRV.nCnt+1
lda DRV.FrameSize
sta TxLength,x
eor #$ff
sta DRV.nCnt
lda /PP.BusST
sta PacketPagePTR+1,x
lda #PP.BusST
sta PacketPagePTR,x
lda PacketPageDATA+1,x
ldy PacketPageDATA,x
bit /PP.BusST.Rdy4TxNOW
beq DRV.U1.9
ldy #0
.1 inc DRV.nCnt
bne .2
inc DRV.nCnt+1
beq .8
.2 lda (DRV.A1L),y
sta RTDATA,x
iny
inc DRV.nCnt
bne .3
inc DRV.nCnt+1
beq .8
.3 lda (DRV.A1L),y
sta RTDATA+1,x
iny
bne .1
inc DRV.A1H
bra .1
.8 plp
clc
rts
*--------------------------------------
.EP
.LIST ON
DRV.U1.SIZE .EQ *-DRV.U1
.LIST OFF
*--------------------------------------
MAN
SAVE usr/src/sys/pm.vedrive.s.u1

View File

@ -250,15 +250,15 @@ U2.Name >PSTR "Uthernet II"
Offset .BS 2
TotalSize .BS 2
*--------------------------------------
DRV.U2 .EQ *
.PH DRV.NIC.START
DRV.U2 .PH DRV.NIC.START
DRV.U2.START jmp DRV.U2.Write
jmp DRV.U2.SendARP
jmp DRV.U2.SendUDP
DRV.U2.Read php
DRV.U2.Rcvd php
sei
ldx DRV.START
ldx DRV.BLK.Slotn0
>AR.SELECT S0.RX.RSR
lda W5100.DR,x get the received size HI
@ -289,18 +289,18 @@ DRV.U2.Read php
* lda DRV.TotalSize
sec
sbc #2 MACRAW:strip 2 bytes Header from Size
sta DRV.BufSize
sta DRV.FrameSize
eor #$ff
sta DRV.nCnt
lda DRV.TotalSize+1
sbc #0
sta DRV.BufSize+1
sta DRV.FrameSize+1
eor #$ff
sta DRV.nCnt+1
>LDYA DRV.InBuf
>STYA .4+1
>LDYAI DRV.InBuf
>STYA DRV.A1L
ldy #0
@ -311,11 +311,12 @@ DRV.U2.Read php
beq .8
.3 lda W5100.DR,x
.4 sta $FFFF,y SELF MODIFIED
sta (DRV.A1L),y
iny
bne .2
inc .4+2
inc DRV.A1H
bra .2
.8 >AR.SELECT S0.RX.RD
@ -343,30 +344,39 @@ DRV.U2.9 plp
sec
rts
*--------------------------------------
DRV.U2.Write php
sei
DRV.U2.SendARP >LDYAI S.ARP
>STYA DRV.FrameSize
>LDYAI DRV.ARPBuf
bra DRV.U2.Send
*--------------------------------------
DRV.U2.SendUDP >STYA DRV.FrameSize
>STYA DRV.BufSize
jsr DRV.BLK.IPUDPCheksum
>LDYAI DRV.UDPBuf
DRV.U2.Send >STYA DRV.A1L
lda DRV.FrameSize+1
eor #$ff
sta DRV.nCnt+1
tya
lda DRV.FrameSize
eor #$ff
sta DRV.nCnt
>LDYA DRV.OutBuf
>STYA .3+1
php
sei
ldx DRV.START
ldx DRV.BLK.Slotn0
>AR.SELECT S0.TX.FSR
lda W5100.DR,x get send size HI
nop
nop
ldy W5100.DR,x LO
cpy DRV.BufSize
sbc DRV.BufSize+1
cpy DRV.FrameSize
sbc DRV.FrameSize+1
bcc DRV.U2.9
>AR.SELECT S0.TX.WR
@ -390,21 +400,21 @@ DRV.U2.Write php
inc DRV.nCnt+1
beq .8
.3 lda $FFFF,y SELF MODIFIED
.3 lda (DRV.A1L),y
sta W5100.DR,x
iny
bne .2
inc .3+2
inc DRV.A1H
bra .2
.8 >AR.SELECT S0.TX.WR
lda DRV.Offset
clc
adc DRV.BufSize
adc DRV.FrameSize
pha save LO
lda DRV.Offset+1
adc DRV.BufSize+1
adc DRV.FrameSize+1
sta W5100.DR,x write HI
pla
sta W5100.DR,x write LO
@ -418,9 +428,7 @@ DRV.U2.Write php
rts
*--------------------------------------
DRV.Offset .BS 2
DRV.BufSize .BS 2
DRV.TotalSize .BS 2
DRV.nCnt .BS 2
*--------------------------------------
.EP

View File

@ -12,9 +12,9 @@ NEW
.INB inc/mli.i
.INB inc/mli.e.i
.INB inc/nic.i
.INB inc/nic.91c96.i
.INB inc/nic.8900a.i
.INB inc/nic.w5100.i
.INB inc/nic.91c96.i
.INB inc/eth.i
.INB inc/net.tcpip.i
.INB inc/net.dhcp.i
@ -33,16 +33,33 @@ timerC .EQ 17
bRemoteMac .EQ 18
Slotn0 .EQ 19
*--------------------------------------
ADT.CMD.VSD .EQ $C5 "E": Virtual Drive Command Envelope
ADT.CMD.PING .EQ $D9 "Y": PING
DRV.EntryPoint .EQ $BF41
DRV.NIC.START .EQ $D500
*--------------------------------------
CONF.FBUF .EQ $4000
CONF.LBUF .EQ $4400
CONF.FILEPATH .EQ $4500
FRAMEBUF .EQ $4600
*--------------------------------------
ADT.CMD.VSD .EQ $C5 "E": Virtual Drive Command Envelope
ADT.CMD.PING .EQ $D9 "Y": PING
DRV.EntryPoint .EQ $BF41
*--------------------------------------
DRV.BLK.START .EQ $D400
DRV.NIC.START .EQ $D800
*--------------------------------------
DRV.NIC.SendARP .EQ DRV.NIC.START
DRV.NIC.SendUDP .EQ DRV.NIC.START+3
DRV.NIC.Rcvd .EQ DRV.NIC.START+6
*--------------------------------------
DRV.ARPBuf .EQ $DA00-S.UDP-5-S.ARP
DRV.UDPBuf .EQ $DA00-S.UDP-5 Frame Buffer = S.UDP+5+512+1 bytes
DRV.UDPBuf.Env .EQ DRV.UDPBuf+S.UDP
DRV.UDPBuf.Cmd .EQ DRV.UDPBuf+S.UDP+1
DRV.UDPBuf.BlkL .EQ DRV.UDPBuf+S.UDP+2
DRV.UDPBuf.BlkH .EQ DRV.UDPBuf+S.UDP+3
DRV.UDPBuf.Sum .EQ DRV.UDPBuf+S.UDP+4
DRV.UDPBuf.Data .EQ DRV.UDPBuf+S.UDP+5
*--------------------------------------
DRV.InBuf .EQ $DA00 Frame Buffer = 1536 bytes
*--------------------------------------
VEDRIVE.Init >LDYAI VEDRIVE.MSG0
jsr PrintFYA
@ -111,8 +128,7 @@ VEDRIVE.Init >LDYAI VEDRIVE.MSG0
.7 >LDYAI VEDRIVE.SRVOK
jsr PrintFYA
* jsr VEDRIVE.SetSlot
sec
jsr VEDRIVE.SetSlot
bcc .8
>LDYAI VEDRIVE.NOSLOT
@ -124,7 +140,7 @@ VEDRIVE.Init >LDYAI VEDRIVE.MSG0
>LDYAI VEDRIVE.DEVOK
jsr PrintFYA
* jsr VEDRIVE.Install
jsr VEDRIVE.Install
bcc .9
>LDYAI VEDRIVE.DRVIKO
@ -133,6 +149,7 @@ VEDRIVE.Init >LDYAI VEDRIVE.MSG0
.9 >LDYAI VEDRIVE.DRVIOK
jsr PrintFYA
rts
*--------------------------------------
VEDRIVE.CheckDRV
@ -177,11 +194,17 @@ VEDRIVE.Ping lda CONF.PORT
.4 jsr VEDRIVE.CheckADTRep
bcc .8
jsr VEDRIVE.CheckARPFrame
bra .3
.8
.8 ldy #S.UDP+$29
lda (ZPBufPtr),y
sta CONF.D1TOTALBLK
iny
lda (ZPBufPtr),y
sta CONF.D1TOTALBLK+1
* clc
.9 rts
*--------------------------------------
@ -198,7 +221,7 @@ VEDRIVE.SendUDP jsr VEDRIVE.IPChecksum
VEDRIVE.SendARP ldx CONF.NIC
jmp (.1,x)
.1 .DA U1.WRITE
.1 .DA GS.WRITE
.DA U1.WRITE
.DA U2.WRITE
*--------------------------------------
@ -208,7 +231,7 @@ VEDRIVE.READ >LDYAI FRAMEBUF
ldx CONF.NIC
jmp (.1,x)
.1 .DA U1.READ
.1 .DA GS.READ
.DA U1.READ
.DA U2.READ
*--------------------------------------
@ -294,22 +317,26 @@ VEDRIVE.Install ldx #PATCH.SIZE
bit RRAMWRAMBNK2
bit RRAMWRAMBNK2
ldy #DRV.SIZE-1
>LDYAI DRV.BLK
>STYA ZPPtr1
.2 lda DRV,y
sta DRV.START,y
dey
bne .2
lda #DRV.BLK.START
sta ZPPtr2
lda /DRV.BLK.START
sta ZPPtr2+1
lda #DRV.BLK.SIZE
eor #$ff
sta ZPnCnt
lda /DRV.BLK.SIZE
eor #$ff
sta ZPnCnt+1
jsr VEDRIVE.Move
lda Slotn0
sta DRV.START
ldy #DRV.IP.SIZE-1
.3 lda DRV.IP,y
sta DRV.IP.START,y
dey
bne .3
sta DRV.BLK.Slotn0
ldx CONF.NIC
lda .10,x
@ -317,7 +344,7 @@ VEDRIVE.Install ldx #PATCH.SIZE
lda .10+1,x
sta ZPPtr1+1
lda .20,x
eor #$ff
sta ZPnCnt
@ -325,49 +352,68 @@ VEDRIVE.Install ldx #PATCH.SIZE
lda .20+1,x
eor #$ff
sta ZPnCnt+1
lda #DRV.NIC.START
sta ZPPtr2
lda /DRV.NIC.START
sta ZPPtr2+1
ldy #0
.4 inc ZPnCnt
bne .5
inc ZPnCnt+1
beq .6
.5 lda (ZPPtr1),y
sta (ZPPtr2),y
iny
bne .4
inc ZPPtr1+1
inc ZPPtr2+1
bra .4
.6 ldy #S.UDP
jsr VEDRIVE.Move
.7 lda ADT.REQ-1,y
sta DRV.OutBuf-1,y
dey
ldx #S.ARP
.7 lda ARP.REP-1,x
sta DRV.ARPBuf-1,x
dex
bne .7
ldx #S.UDP
.8 lda ADT.REQ-1,x
sta DRV.UDPBuf-1,x
dex
bne .8
lda #ADT.CMD.VSD
sta DRV.UDPBuf.Env
ldx #3
.80 lda CONF.D1TOTALBLK,x
sta DRV.D1TotalBlks,x
dex
bpl .80
bit RROMBNK1
clc
rts
*--------------------------------------
.10 .DA DRV.U2
.DA DRV.U2
.10 .DA DRV.GS
.DA DRV.U1
.DA DRV.U2
*--------------------------------------
.20 .DA DRV.U2.SIZE
.DA DRV.U2.SIZE
.20 .DA DRV.GS.SIZE
.DA DRV.U1.SIZE
.DA DRV.U2.SIZE
*--------------------------------------
.INB usr/src/shared/x.printf.s
VEDRIVE.Move ldy #0
.1 inc ZPnCnt
bne .2
inc ZPnCnt+1
beq .8
.2 lda (ZPPtr1),y
sta (ZPPtr2),y
iny
bne .1
inc ZPPtr1+1
inc ZPPtr2+1
bra .1
.8 rts
*--------------------------------------
* ProDOS $BE41->$BE4B Patch for switching to BANK2 (10 bytes)
*--------------------------------------
@ -375,287 +421,20 @@ COPYRIGHT .AS "(C)APPLE "
COPYRIGHT.LEN .EQ *-COPYRIGHT
PATCH .PH DRV.EntryPoint
bit RRAMWRAMBNK2
jsr $D002
jsr DRV.BLK.START
bit RRAMWRAMBNK1
rts
.EP
PATCH.SIZE .EQ *-PATCH
*--------------------------------------
* 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
*--------------------------------------
DRV.Write .EQ DRV.NIC.START
DRV.Read .EQ DRV.NIC.START+3
*--------------------------------------
DRV.OutBuf .EQ $D800-S.UDP-6 Frame Buffer = S.UDP+5+512+1 bytes
DRV.OutBuf.Env .EQ DRV.OutBuf+S.UDP
DRV.OutBuf.Cmd .EQ DRV.OutBuf+S.UDP+1
DRV.OutBuf.BlkL .EQ DRV.OutBuf+S.UDP+2
DRV.OutBuf.BlkH .EQ DRV.OutBuf+S.UDP+3
DRV.OutBuf.Sum .EQ DRV.OutBuf+S.UDP+4
DRV.OutBuf.Data .EQ DRV.OutBuf+S.UDP+5
*--------------------------------------
DRV.InBuf .EQ $DA00 Frame Buffer = 1536 bytes
*--------------------------------------
DRV .PH $D001 Main LC Bnk 2 $D001->$DFFF
DRV.START .BS 1 SELF MODIFIED slot 0n
>DEBUG
lda DRV.COMMAND S=0,R=1,W=2,F=3
bne .1
ldx #$ff return Status
ldy #$ff
.8 lda #0
clc
rts
.1 cmp #3
beq .8 Format ....
bcs DRV.DO.CMD.ERR more....IO error
ora #2 W=2,R=3
ldy DRV.UNITNUM
bpl .2
adc #2 CC from bcs
.2 sta DRV.OutBuf.Cmd store cmd
eor #ADT.CMD.VSD
eor DRV.BLKNUM
eor DRV.BLKNUM+1
sta DRV.OutBuf.Sum Compute & store CheckSum
lda DRV.BLKNUM
sta DRV.OutBuf.BlkL
lda DRV.BLKNUM+1
sta DRV.OutBuf.BlkH
*--------------------------------------
lda DRV.COMMAND
dec 1-1=0 if read
bne DRV.DO.CMD.W go write
*--------------------------------------
* Read block
*--------------------------------------
DRV.DO.CMD.R ldy #S.UDP+5
lda /S.UDP+5
jsr DRV.Write
DRV.DO.CMD.ERR
lda #MLI.E.IO
sec
rts
*--------------------------------------
* Write Block
*--------------------------------------
DRV.DO.CMD.W lda #$B1 lda (),y
lda #MLI.E.IO
sec
rts
*--------------------------------------
DRV.RWBYTE bit RRAMWRAMBNK1
sta (DRV.BUFF),y
bit RRAMWRAMBNK2
rts
*--------------------------------------
.EP
*--------------------------------------
.LIST ON
DRV.SIZE .EQ *-DRV
.LIST OFF
*--------------------------------------
DRV.IP .PH $D400
DRV.IP.START 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
.1 lda (ZPBufPtr),y
adc ZPCheckSum
sta ZPCheckSum
iny
lda (ZPBufPtr),y
adc ZPCheckSum+1
sta ZPCheckSum+1
iny
dex
bne .1
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
*--------------------------------------
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
.2 lda (ZPBufPtr),y
adc ZPCheckSum
sta ZPCheckSum
iny
lda (ZPBufPtr),y
adc ZPCheckSum+1
sta ZPCheckSum+1
iny
dex
bne .2
ldy #S.UDP.LENGTH+1
lda (ZPBufPtr),y
eor #$ff
tax
dey
lda (ZPBufPtr),y
eor #$ff
ldy #S.UDP.CHECKSUM
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
.3 inx
bne .4
pla
inc
beq .8
pha
.4 lda (ZPPtr1),y
adc ZPCheckSum
sta ZPCheckSum
iny
bne .5
inc ZPPtr1+1
.5 inx
bne .6
pla
inc
beq .7
pha
.6 lda (ZPPtr1),y
adc ZPCheckSum+1
sta ZPCheckSum+1
iny
bne .3
inc ZPPtr1+1
bra .3
.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
*--------------------------------------
.EP
*--------------------------------------
.LIST ON
DRV.IP.SIZE .EQ *-DRV.IP
.LIST OFF
*--------------------------------------
* CONTROL SECTION :
*--------------------------------------
.DO DRV.SIZE>255
ERROR:DRV.SIZE too big
.FIN
*--------------------------------------
.INB usr/src/shared/x.printf.s
*--------------------------------------
.INB usr/src/sys/pm.vedrive.s.cf
.INB usr/src/sys/pm.vedrive.s.bk
.INB usr/src/sys/pm.vedrive.s.ip
.INB usr/src/sys/pm.vedrive.s.gs
.INB usr/src/sys/pm.vedrive.s.u1
.INB usr/src/sys/pm.vedrive.s.u2
.INB usr/src/sys/pm.vedrive.s.gs
*--------------------------------------
VEDRIVE.MSG0 .AZ "VEDRIVE (ADTPro Virtual Ethernet HD) Driver\n"
VEDRIVE.DRVKO .AZ "VEDRIVE (Or other custom Driver) Already Installed.\n"
@ -703,6 +482,8 @@ CONF.MASK .HS 00000000
CONF.GATEWAY .HS 00000000
CONF.SERVER .HS 00000000
CONF.PORT .DA /1977,#1977
CONF.D1TOTALBLK .DA $FFFF
CONF.D2TOTALBLK .DA $FFFF
*--------------------------------------
MLIGETPREFIX.P .DA #1
.DA CONF.FILEPATH
@ -829,7 +610,7 @@ DHCP.REQ.OPT.SVRIP .BS 4
DHCP.REQ.END .EQ *
DHCP.REQ.LEN .EQ *-DHCP.REQ
*--------------------------------------
ADT.REQ
ADT.REQ
ADT.REQ.DSTMAC .BS 6 DST MAC
ADT.REQ.SRCMAC .BS 6
.DA /S.ETH.EII.TYPE.IP

View File

@ -370,8 +370,8 @@ PATCH.LEN .EQ *-PATCH
*--------------------------------------
*DRV.PCL .EQ $3A
*DRV.PCH .EQ $3B
*DRV.A1L .EQ $3C
*DRV.A1H .EQ $3D
DRV.A1L .EQ $3C
DRV.A1H .EQ $3D
*DRV.A2L .EQ $3E
*DRV.A2H .EQ $3F
*--------------------------------------