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

View File

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

View File

@ -967,7 +967,7 @@ LB481 inx
dec ZP.PCL dec ZP.PCL
bne LB481 bne LB481
BS.KW.NOMON clc clc
rts rts
*-------------------------------------- *--------------------------------------
BS.CheckFilename BS.CheckFilename
@ -1582,7 +1582,7 @@ BS.KW.ONLINE jsr MON.CROUT
pla pla
sta MLI.DEVNUM sta MLI.DEVNUM
clc BS.KW.NOMON clc
rts rts
*-------------------------------------- *--------------------------------------
BS.Expand2.P .DA #1 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 .OR $2000
.TF bin/irc .TF bin/irc
*-------------------------------------- *--------------------------------------
TLS .EQ 0 TLS .EQ 1
*-------------------------------------- *--------------------------------------
.INB inc/macros.i .INB inc/macros.i
.INB inc/a2osx.i .INB inc/a2osx.i
.INB inc/mli.i .INB inc/mli.i
.INB inc/mli.e.i
.INB inc/eth.i .INB inc/eth.i
.INB inc/libtcpip.i .INB inc/libtcpip.i
.DO TLS=1 .DO TLS=1
@ -120,7 +121,7 @@ J.ESC .DA CS.RUN.CHARIN.LEFT
.DA CS.RUN.CHARIN.RIGHT .DA CS.RUN.CHARIN.RIGHT
.DO TLS=1 .DO TLS=1
L.MSG.TLS .DA MSG.TLS 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.MSG.TLSKO .DA MSG.TLSKO
L.TLS.CHELLO .DA TLS.CHELLO L.TLS.CHELLO .DA TLS.CHELLO
L.TLS.CHELLO.UT .DA TLS.CHELLO.UT L.TLS.CHELLO.UT .DA TLS.CHELLO.UT
@ -283,7 +284,7 @@ CS.RUN.CheckArgs
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.GetBuffers CS.RUN.GetBuffers
>LDYAI 2048 >LDYAI 5120
>SYSCALL GetMem >SYSCALL GetMem
bcs .9 bcs .9
@ -353,73 +354,6 @@ CS.RUN.Connect >PUSHBI S.SOCKET.T.STREAM
>PUSHBI 0 >PUSHBI 0
>SYSCALL PrintF >SYSCALL PrintF
rts 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 CS.RUN.Register >LDYA L.MSG.REGISTER
jsr CS.RUN.STATUSMSG jsr CS.RUN.STATUSMSG
@ -1091,6 +1025,10 @@ CS.QUIT ldy #hOutputBuf
>SYSCALL FreeMem >SYSCALL FreeMem
.8 rts .8 rts
*--------------------------------------
.DO TLS=1
.INB usr/src/bin/irc.s.tls
.FIN
*-------------------------------------- *--------------------------------------
CS.END CS.END
LIBTCPIP .AZ "libtcpip" 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" MSG.SKTERR .AZ "Socket Error : $%h\r\n"
.DO TLS=1 .DO TLS=1
MSG.TLS .AZ "TLS:Negociation..." 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." MSG.TLSKO .AZ "TLS:Negotiation failed."
.FIN .FIN
MSG.REGISTER .AZ "Registering User..." MSG.REGISTER .AZ "Registering User..."
@ -1184,6 +1122,11 @@ TLS.CHELLO.L .EQ *-TLS.CHELLO
TLS.CHELLO.L1 .EQ *-TLS.CHELLO.1 TLS.CHELLO.L1 .EQ *-TLS.CHELLO.1
TLS.CHELLO.L2 .EQ *-TLS.CHELLO.2 TLS.CHELLO.L2 .EQ *-TLS.CHELLO.2
TLS.CHELLO.LE .EQ *-TLS.CHELLO.E TLS.CHELLO.LE .EQ *-TLS.CHELLO.E
*--------------------------------------
TLS.HDR .DA #TLS.CT.HS
.DA TLS.LV.TLS12
TLS.HDR.L .EQ *-TLS.HDR
*--------------------------------------
.FIN .FIN
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY

View File

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

View File

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

View File

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

View File

@ -24,7 +24,7 @@ LDR.MSG.IIe .AT "//e"
LDR.MSG.IIc .AT "//c" LDR.MSG.IIc .AT "//c"
LDR.MSG.IIgs .AT "IIgs" LDR.MSG.IIgs .AT "IIgs"
LDR.MSG.Unknown .AT "Unknown" LDR.MSG.Unknown .AT "Unknown"
LDR.MSG.CLK .AT "XClk" LDR.MSG.CLK .AT "?Clk"
LDR.MSG.RAM .AT "/RAM" LDR.MSG.RAM .AT "/RAM"
LDR.MSG.ROOTERR .AT "ERR reading CATALOG" LDR.MSG.ROOTERR .AT "ERR reading CATALOG"
*-------------------------------------- *--------------------------------------
@ -430,7 +430,7 @@ LDR.ClkDevDCLK php
ldy PAKME.DCLK+1 ldy PAKME.DCLK+1
jmp LDR.SetupCLK jmp LDR.SetupCLK
.9 cld .9 cld
*-------------------------------------- *--------------------------------------
LDR.ClkDevNCLK php LDR.ClkDevNCLK php
sei sei
@ -520,7 +520,7 @@ LDR.ClkDevNCLK php
bra LDR.SetupCLK bra LDR.SetupCLK
*-------------------------------------- *--------------------------------------
LDR.ClkDevTCLK jsr LDR.IsIIc LDR.ClkDevTCLK jsr LDR.IsIIc
bcs .9 bcs LDR.ClkDevXCLK
stz idxl stz idxl
lda #$C1 lda #$C1
@ -532,11 +532,6 @@ LDR.ClkDevTCLK jsr LDR.IsIIc
.1 jsr LDR.CheckTClkID .1 jsr LDR.CheckTClkID
bcs .7 bcs .7
* sta SETPAGE2
* stz $478,x
* stz $7f8,x
* sta CLRPAGE2
stz $478,x stz $478,x
stz $7f8,x stz $7f8,x
@ -568,8 +563,31 @@ LDR.ClkDevTCLK jsr LDR.IsIIc
lda idxl+1 lda idxl+1
cmp #$C8 cmp #$C8
bne .1 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 .9 rts
.1 lda #'X'
ldx PAKME.XCLK
ldy PAKME.XCLK+1
*-------------------------------------- *--------------------------------------
LDR.SetupCLK stx ZPInBufPtr LDR.SetupCLK stx ZPInBufPtr
sty ZPInBufPtr+1 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 XRW.Wait100usecA
phx phx
.1 ldx #18 (2) .1 ldx #20 (2)
.2 dex (2) .2 dex (2)
bne .2 (3) bne .2 (3)
@ -836,15 +836,13 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
jsr XRW.Wait25600usec jsr XRW.Wait25600usec
lda IO.D2.Ph0Off,y
bcc .90 bcc .90
lda IO.D2.Ph0Off,x lda IO.D2.Ph0Off,x
nop
clc Exit wit CC (recalibrate) clc Exit wit CC (recalibrate)
.90 lda IO.D2.Ph0Off,y .90 rts
rts
*-------------------------------------- *--------------------------------------
XRW.SeekPhOnY and #6 XRW.SeekPhOnY and #6
ora A2L ora A2L

View File

@ -220,6 +220,7 @@ PAKME.RAMX .DA RAMX.PAK
PAKME.DCLK .DA DCLK.PAK PAKME.DCLK .DA DCLK.PAK
PAKME.NCLK .DA NCLK.PAK PAKME.NCLK .DA NCLK.PAK
PAKME.TCLK .DA TCLK.PAK PAKME.TCLK .DA TCLK.PAK
PAKME.XCLK .DA XCLK.PAK
PAKME.CCLK .DA CCLK.PAK PAKME.CCLK .DA CCLK.PAK
PAKME.SEL1 .DA SEL1.PAK PAKME.SEL1 .DA SEL1.PAK
PAKME.SEL2 .DA SEL2.PAK PAKME.SEL2 .DA SEL2.PAK
@ -289,6 +290,12 @@ TCLK.PAK .DA #0
.INB usr/src/prodos.fx/prodos.s.tclk .INB usr/src/prodos.fx/prodos.s.tclk
.EP .EP
XCLK.PAK .DA #0
.DA XCLK.LEN
.PH XDOS.ClockDrv
.INB usr/src/prodos.fx/prodos.s.xclk
.EP
CCLK.PAK .DA #0 CCLK.PAK .DA #0
.DA CCLK.LEN .DA CCLK.LEN
.PH XDOS.ClockDrv .PH XDOS.ClockDrv
@ -309,7 +316,7 @@ SEL2.PAK .DA #0
*-------------------------------------- *--------------------------------------
.AS "PAKME" TAG .AS "PAKME" TAG
.DA $2000 BIN ORG .DA $2000 BIN ORG
.DA #13 Chunk Count .DA #14 Chunk Count
.DA PAKME.Table Chunks .DA PAKME.Table Chunks
*-------------------------------------- *--------------------------------------
MAN 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 GS.Init sec
rts rts
*-------------------------------------- *--------------------------------------
DRV.GS .EQ * GS.Read php
.PH $D400 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 .EP
.LIST ON
DRV.GS.SIZE .EQ *-DRV.GS
.LIST OFF
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/sys/pm.vedrive.s.gs SAVE usr/src/sys/pm.vedrive.s.gs

View File

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

View File

@ -234,10 +234,154 @@ U1.WRITE php
*-------------------------------------- *--------------------------------------
U1.Name >PSTR "Uthernet V1" U1.Name >PSTR "Uthernet V1"
*-------------------------------------- *--------------------------------------
DRV.U1 .EQ * DRV.U1 .PH DRV.NIC.START
.PH $D400
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 .EP
.LIST ON
DRV.U1.SIZE .EQ *-DRV.U1
.LIST OFF
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/sys/pm.vedrive.s.u1 SAVE usr/src/sys/pm.vedrive.s.u1

View File

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

View File

@ -12,9 +12,9 @@ NEW
.INB inc/mli.i .INB inc/mli.i
.INB inc/mli.e.i .INB inc/mli.e.i
.INB inc/nic.i .INB inc/nic.i
.INB inc/nic.91c96.i
.INB inc/nic.8900a.i .INB inc/nic.8900a.i
.INB inc/nic.w5100.i .INB inc/nic.w5100.i
.INB inc/nic.91c96.i
.INB inc/eth.i .INB inc/eth.i
.INB inc/net.tcpip.i .INB inc/net.tcpip.i
.INB inc/net.dhcp.i .INB inc/net.dhcp.i
@ -33,16 +33,33 @@ timerC .EQ 17
bRemoteMac .EQ 18 bRemoteMac .EQ 18
Slotn0 .EQ 19 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.FBUF .EQ $4000
CONF.LBUF .EQ $4400 CONF.LBUF .EQ $4400
CONF.FILEPATH .EQ $4500 CONF.FILEPATH .EQ $4500
FRAMEBUF .EQ $4600 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 VEDRIVE.Init >LDYAI VEDRIVE.MSG0
jsr PrintFYA jsr PrintFYA
@ -111,8 +128,7 @@ VEDRIVE.Init >LDYAI VEDRIVE.MSG0
.7 >LDYAI VEDRIVE.SRVOK .7 >LDYAI VEDRIVE.SRVOK
jsr PrintFYA jsr PrintFYA
* jsr VEDRIVE.SetSlot jsr VEDRIVE.SetSlot
sec
bcc .8 bcc .8
>LDYAI VEDRIVE.NOSLOT >LDYAI VEDRIVE.NOSLOT
@ -124,7 +140,7 @@ VEDRIVE.Init >LDYAI VEDRIVE.MSG0
>LDYAI VEDRIVE.DEVOK >LDYAI VEDRIVE.DEVOK
jsr PrintFYA jsr PrintFYA
* jsr VEDRIVE.Install jsr VEDRIVE.Install
bcc .9 bcc .9
>LDYAI VEDRIVE.DRVIKO >LDYAI VEDRIVE.DRVIKO
@ -133,6 +149,7 @@ VEDRIVE.Init >LDYAI VEDRIVE.MSG0
.9 >LDYAI VEDRIVE.DRVIOK .9 >LDYAI VEDRIVE.DRVIOK
jsr PrintFYA jsr PrintFYA
rts rts
*-------------------------------------- *--------------------------------------
VEDRIVE.CheckDRV VEDRIVE.CheckDRV
@ -177,11 +194,17 @@ VEDRIVE.Ping lda CONF.PORT
.4 jsr VEDRIVE.CheckADTRep .4 jsr VEDRIVE.CheckADTRep
bcc .8 bcc .8
jsr VEDRIVE.CheckARPFrame jsr VEDRIVE.CheckARPFrame
bra .3 bra .3
.8 .8 ldy #S.UDP+$29
lda (ZPBufPtr),y
sta CONF.D1TOTALBLK
iny
lda (ZPBufPtr),y
sta CONF.D1TOTALBLK+1
* clc * clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -198,7 +221,7 @@ VEDRIVE.SendUDP jsr VEDRIVE.IPChecksum
VEDRIVE.SendARP ldx CONF.NIC VEDRIVE.SendARP ldx CONF.NIC
jmp (.1,x) jmp (.1,x)
.1 .DA U1.WRITE .1 .DA GS.WRITE
.DA U1.WRITE .DA U1.WRITE
.DA U2.WRITE .DA U2.WRITE
*-------------------------------------- *--------------------------------------
@ -208,7 +231,7 @@ VEDRIVE.READ >LDYAI FRAMEBUF
ldx CONF.NIC ldx CONF.NIC
jmp (.1,x) jmp (.1,x)
.1 .DA U1.READ .1 .DA GS.READ
.DA U1.READ .DA U1.READ
.DA U2.READ .DA U2.READ
*-------------------------------------- *--------------------------------------
@ -294,22 +317,26 @@ VEDRIVE.Install ldx #PATCH.SIZE
bit RRAMWRAMBNK2 bit RRAMWRAMBNK2
bit RRAMWRAMBNK2 bit RRAMWRAMBNK2
ldy #DRV.SIZE-1 >LDYAI DRV.BLK
>STYA ZPPtr1
.2 lda DRV,y lda #DRV.BLK.START
sta DRV.START,y sta ZPPtr2
dey lda /DRV.BLK.START
bne .2 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 lda Slotn0
sta DRV.START sta DRV.BLK.Slotn0
ldy #DRV.IP.SIZE-1
.3 lda DRV.IP,y
sta DRV.IP.START,y
dey
bne .3
ldx CONF.NIC ldx CONF.NIC
lda .10,x lda .10,x
@ -317,7 +344,7 @@ VEDRIVE.Install ldx #PATCH.SIZE
lda .10+1,x lda .10+1,x
sta ZPPtr1+1 sta ZPPtr1+1
lda .20,x lda .20,x
eor #$ff eor #$ff
sta ZPnCnt sta ZPnCnt
@ -325,49 +352,68 @@ VEDRIVE.Install ldx #PATCH.SIZE
lda .20+1,x lda .20+1,x
eor #$ff eor #$ff
sta ZPnCnt+1 sta ZPnCnt+1
lda #DRV.NIC.START lda #DRV.NIC.START
sta ZPPtr2 sta ZPPtr2
lda /DRV.NIC.START lda /DRV.NIC.START
sta ZPPtr2+1 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 ldx #S.ARP
sta DRV.OutBuf-1,y
dey .7 lda ARP.REP-1,x
sta DRV.ARPBuf-1,x
dex
bne .7 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 bit RROMBNK1
clc clc
rts rts
*-------------------------------------- *--------------------------------------
.10 .DA DRV.U2 .10 .DA DRV.GS
.DA DRV.U2 .DA DRV.U1
.DA DRV.U2 .DA DRV.U2
*-------------------------------------- *--------------------------------------
.20 .DA DRV.U2.SIZE .20 .DA DRV.GS.SIZE
.DA DRV.U2.SIZE .DA DRV.U1.SIZE
.DA DRV.U2.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) * ProDOS $BE41->$BE4B Patch for switching to BANK2 (10 bytes)
*-------------------------------------- *--------------------------------------
@ -375,287 +421,20 @@ COPYRIGHT .AS "(C)APPLE "
COPYRIGHT.LEN .EQ *-COPYRIGHT COPYRIGHT.LEN .EQ *-COPYRIGHT
PATCH .PH DRV.EntryPoint PATCH .PH DRV.EntryPoint
bit RRAMWRAMBNK2 bit RRAMWRAMBNK2
jsr $D002 jsr DRV.BLK.START
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
rts rts
.EP .EP
PATCH.SIZE .EQ *-PATCH PATCH.SIZE .EQ *-PATCH
*-------------------------------------- *--------------------------------------
* Drivers .INB usr/src/shared/x.printf.s
*--------------------------------------
* 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/sys/pm.vedrive.s.cf .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.ip
.INB usr/src/sys/pm.vedrive.s.gs
.INB usr/src/sys/pm.vedrive.s.u1 .INB usr/src/sys/pm.vedrive.s.u1
.INB usr/src/sys/pm.vedrive.s.u2 .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.MSG0 .AZ "VEDRIVE (ADTPro Virtual Ethernet HD) Driver\n"
VEDRIVE.DRVKO .AZ "VEDRIVE (Or other custom Driver) Already Installed.\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.GATEWAY .HS 00000000
CONF.SERVER .HS 00000000 CONF.SERVER .HS 00000000
CONF.PORT .DA /1977,#1977 CONF.PORT .DA /1977,#1977
CONF.D1TOTALBLK .DA $FFFF
CONF.D2TOTALBLK .DA $FFFF
*-------------------------------------- *--------------------------------------
MLIGETPREFIX.P .DA #1 MLIGETPREFIX.P .DA #1
.DA CONF.FILEPATH .DA CONF.FILEPATH
@ -829,7 +610,7 @@ DHCP.REQ.OPT.SVRIP .BS 4
DHCP.REQ.END .EQ * DHCP.REQ.END .EQ *
DHCP.REQ.LEN .EQ *-DHCP.REQ DHCP.REQ.LEN .EQ *-DHCP.REQ
*-------------------------------------- *--------------------------------------
ADT.REQ ADT.REQ
ADT.REQ.DSTMAC .BS 6 DST MAC ADT.REQ.DSTMAC .BS 6 DST MAC
ADT.REQ.SRCMAC .BS 6 ADT.REQ.SRCMAC .BS 6
.DA /S.ETH.EII.TYPE.IP .DA /S.ETH.EII.TYPE.IP

View File

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