A2osX/SYS/PM.VEDRIVE.S.txt

641 lines
14 KiB
Plaintext
Raw Normal View History

2022-03-13 12:58:15 +00:00
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
* .TF sys/pm/pm.vedrive
.TF sys/pm.vedrive
*--------------------------------------
.INB inc/macros.i
.INB inc/io.i
.INB inc/monitor.i
.INB inc/mli.i
.INB inc/mli.e.i
.INB inc/nic.i
2022-04-19 18:24:34 +00:00
.INB inc/nic.91c96.i
2022-03-13 12:58:15 +00:00
.INB inc/nic.8900a.i
.INB inc/nic.w5100.i
.INB inc/eth.i
.INB inc/net.tcpip.i
.INB inc/net.dhcp.i
*--------------------------------------
ZPPtr1 .EQ $0
ZPPtr2 .EQ $2
len .EQ 4
idx .EQ 5
int .EQ 6
ZPBufPtr .EQ 8
ZPBufCnt .EQ 10
ZPnCnt .EQ 12
ZPCheckSum .EQ 14
timerS .EQ 16
timerC .EQ 17
bRemoteMac .EQ 18
Slotn0 .EQ 19
*--------------------------------------
CONF.FBUF .EQ $4000
CONF.LBUF .EQ $4400
CONF.FILEPATH .EQ $4500
FRAMEBUF .EQ $4600
*--------------------------------------
2022-04-19 18:24:34 +00:00
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
*--------------------------------------
2022-03-13 12:58:15 +00:00
VEDRIVE.Init >LDYAI VEDRIVE.MSG0
jsr PrintFYA
jsr VEDRIVE.CheckDRV
bcc .1
>LDYAI VEDRIVE.DRVKO
jsr PrintFYA
rts
.1 jsr VEDRIVE.ReadConf
bcc .2
>LDYAI VEDRIVE.CONFINV
jsr PrintFYA
rts
.2 jsr VEDRIVE.CheckHW
bcc .3
>LDYAI VEDRIVE.NICKO
jsr PrintFYA
rts
.3 jsr VEDRIVE.MACInit
lda CONF.ADDRESS
bne .4
>LDYAI VEDRIVE.DHCP
jsr PrintFYA
jsr VEDRIVE.DHCPReq
bcc .4
>LDYAI VEDRIVE.DHCPKO
jsr PrintFYA
rts
.4 jsr VEDRIVE.IPInit
jsr VEDRIVE.ARPReq
bcc .5
>LDYAI VEDRIVE.IPKO
jsr PrintFYA
rts
.5 ldx #11
.6 lda CONF.ADDRESS,x
pha
dex
bpl .6
>LDYAI VEDRIVE.IPOK
jsr PrintFYA
jsr VEDRIVE.Ping
bcc .7
>LDYAI VEDRIVE.SRVKO
jsr PrintFYA
rts
.7 >LDYAI VEDRIVE.SRVOK
jsr PrintFYA
2022-04-19 18:24:34 +00:00
jsr VEDRIVE.SetSlot
2022-03-13 12:58:15 +00:00
bcc .8
>LDYAI VEDRIVE.NOSLOT
jsr PrintFYA
rts
.8 pha Push slot
pha 2 times
>LDYAI VEDRIVE.DEVOK
jsr PrintFYA
2022-04-19 18:24:34 +00:00
jsr VEDRIVE.Install
2022-03-13 12:58:15 +00:00
bcc .9
>LDYAI VEDRIVE.DRVIKO
jsr PrintFYA
rts
.9 >LDYAI VEDRIVE.DRVIOK
jsr PrintFYA
2022-04-19 18:24:34 +00:00
2022-03-13 12:58:15 +00:00
rts
*--------------------------------------
VEDRIVE.CheckDRV
ldx #COPYRIGHT.LEN
sec
.1 lda DRV.EntryPoint-1,x
eor COPYRIGHT-1,x
bne .9
dex
bne .1
clc
.9 rts
*--------------------------------------
VEDRIVE.Ping lda CONF.PORT
sta ADT.REQ.UDP.DST
lda CONF.PORT+1
sta ADT.REQ.UDP.DST+1
>LDYAI ADT.REQ
>STYA ZPBufPtr
>LDYAI ADT.REQ.LEN
>STYA ZPBufCnt
jsr VEDRIVE.SendUDP
bcs .9
jsr VEDRIVE.InitTimer
.3 jsr VEDRIVE.READ
bcc .4
jsr VEDRIVE.Wait
bcc .3
rts
.4 jsr VEDRIVE.CheckADTRep
bcc .8
2022-04-19 18:24:34 +00:00
2022-03-13 12:58:15 +00:00
jsr VEDRIVE.CheckARPFrame
bra .3
2022-04-19 18:24:34 +00:00
.8 ldy #S.UDP+$29
lda (ZPBufPtr),y
sta CONF.D1TOTALBLK
iny
lda (ZPBufPtr),y
sta CONF.D1TOTALBLK+1
2022-03-13 12:58:15 +00:00
* clc
.9 rts
*--------------------------------------
VEDRIVE.CheckHW ldx CONF.NIC
jmp (.1,x)
.1 .DA GS.Init
.DA U1.Init
.DA U2.Init
*--------------------------------------
VEDRIVE.SendUDP jsr VEDRIVE.IPChecksum
jsr VEDRIVE.UDPChecksum
VEDRIVE.SendARP ldx CONF.NIC
jmp (.1,x)
2022-04-19 18:24:34 +00:00
.1 .DA GS.WRITE
2022-03-13 12:58:15 +00:00
.DA U1.WRITE
.DA U2.WRITE
*--------------------------------------
VEDRIVE.READ >LDYAI FRAMEBUF
>STYA ZPBufPtr
ldx CONF.NIC
jmp (.1,x)
2022-04-19 18:24:34 +00:00
.1 .DA GS.READ
2022-03-13 12:58:15 +00:00
.DA U1.READ
.DA U2.READ
*--------------------------------------
VEDRIVE.InitTimer
lda VBL
sta timerS
stz timerC
rts
*--------------------------------------
VEDRIVE.Wait lda VBL
tax
eor timerS
bpl .8
stx timerS
dec timerC
bne .8
sec
rts
.8 clc
rts
*--------------------------------------
* Find 2 free slots in DEVPTRS (D1 & D2)
*--------------------------------------
VEDRIVE.SetSlot ldx #2 Starts at Slot1
.1 lda DEVPTRS,x Drive1
cmp DEVPTRS pointing to S0D1 NODEV ?
bne .2
lda DEVPTRS+1,x
cmp DEVPTRS+1
bne .2
lda DEVPTRS+16,x Drive2
cmp DEVPTRS
bne .2
lda DEVPTRS+17,x
cmp DEVPTRS+1
bne .2
lda #DRV.EntryPoint
sta DEVPTRS,x
sta DEVPTRS+16,x
lda /DRV.EntryPoint
sta DEVPTRS+1,x
sta DEVPTRS+17,x
txa
asl
asl
asl
ora #$0D
ldy DEVCNT
iny
sta DEVLST,y add Drv1
ora #$80
iny
sta DEVLST,y add Drv2
sty DEVCNT
txa
lsr exit with A=SLOT
clc
rts
.2 inx
inx
cpx #16
bne .1
rts sec from CPX
*--------------------------------------
VEDRIVE.Install ldx #PATCH.SIZE
2022-03-15 19:33:19 +00:00
.1 lda PATCH-1,x
sta DRV.EntryPoint-1,x
dex
bne .1
2022-03-13 12:58:15 +00:00
bit RRAMWRAMBNK2
bit RRAMWRAMBNK2
2022-04-19 18:24:34 +00:00
>LDYAI DRV.BLK
>STYA ZPPtr1
2022-03-13 12:58:15 +00:00
2022-04-19 18:24:34 +00:00
lda #DRV.BLK.START
sta ZPPtr2
lda /DRV.BLK.START
sta ZPPtr2+1
2022-03-13 12:58:15 +00:00
2022-04-19 18:24:34 +00:00
lda #DRV.BLK.SIZE
eor #$ff
sta ZPnCnt
2022-03-13 12:58:15 +00:00
2022-04-19 18:24:34 +00:00
lda /DRV.BLK.SIZE
eor #$ff
sta ZPnCnt+1
jsr VEDRIVE.Move
lda Slotn0
sta DRV.BLK.Slotn0
2022-03-13 12:58:15 +00:00
ldx CONF.NIC
lda .10,x
sta ZPPtr1
lda .10+1,x
sta ZPPtr1+1
2022-04-19 18:24:34 +00:00
2022-03-13 12:58:15 +00:00
lda .20,x
eor #$ff
sta ZPnCnt
lda .20+1,x
eor #$ff
sta ZPnCnt+1
2022-04-19 18:24:34 +00:00
2022-03-13 12:58:15 +00:00
lda #DRV.NIC.START
sta ZPPtr2
lda /DRV.NIC.START
sta ZPPtr2+1
2022-04-19 18:24:34 +00:00
jsr VEDRIVE.Move
2022-03-13 12:58:15 +00:00
2022-04-19 18:24:34 +00:00
ldx #S.ARP
2022-03-13 12:58:15 +00:00
2022-04-19 18:24:34 +00:00
.7 lda ARP.REP-1,x
sta DRV.ARPBuf-1,x
dex
bne .7
2022-03-13 12:58:15 +00:00
2022-04-19 18:24:34 +00:00
ldx #S.UDP
2022-03-13 12:58:15 +00:00
2022-04-19 18:24:34 +00:00
.8 lda ADT.REQ-1,x
sta DRV.UDPBuf-1,x
dex
bne .8
2022-03-13 12:58:15 +00:00
2022-04-19 18:24:34 +00:00
lda #ADT.CMD.VSD
sta DRV.UDPBuf.Env
2022-03-13 12:58:15 +00:00
2022-04-19 18:24:34 +00:00
ldx #3
2022-03-13 12:58:15 +00:00
2022-04-19 18:24:34 +00:00
.80 lda CONF.D1TOTALBLK,x
sta DRV.D1TotalBlks,x
dex
bpl .80
2022-03-13 12:58:15 +00:00
2022-04-19 18:24:34 +00:00
bit RROMBNK1
clc
2022-03-13 12:58:15 +00:00
rts
*--------------------------------------
2022-04-19 18:24:34 +00:00
.10 .DA DRV.GS
.DA DRV.U1
.DA DRV.U2
2022-03-13 12:58:15 +00:00
*--------------------------------------
2022-04-19 18:24:34 +00:00
.20 .DA DRV.GS.SIZE
.DA DRV.U1.SIZE
.DA DRV.U2.SIZE
2022-03-13 12:58:15 +00:00
*--------------------------------------
2022-04-19 18:24:34 +00:00
VEDRIVE.Move ldy #0
2022-03-13 12:58:15 +00:00
2022-04-19 18:24:34 +00:00
.1 inc ZPnCnt
2022-03-13 12:58:15 +00:00
bne .2
2022-04-19 18:24:34 +00:00
inc ZPnCnt+1
2022-03-13 12:58:15 +00:00
beq .8
2022-04-19 18:24:34 +00:00
.2 lda (ZPPtr1),y
sta (ZPPtr2),y
2022-03-13 12:58:15 +00:00
iny
2022-04-19 18:24:34 +00:00
bne .1
2022-03-13 12:58:15 +00:00
inc ZPPtr1+1
2022-04-19 18:24:34 +00:00
inc ZPPtr2+1
bra .1
.8 rts
2022-03-13 12:58:15 +00:00
*--------------------------------------
2022-04-19 18:24:34 +00:00
* ProDOS $BE41->$BE4B Patch for switching to BANK2 (10 bytes)
2022-03-13 12:58:15 +00:00
*--------------------------------------
2022-04-19 18:24:34 +00:00
COPYRIGHT .AS "(C)APPLE "
COPYRIGHT.LEN .EQ *-COPYRIGHT
PATCH .PH DRV.EntryPoint
bit RRAMWRAMBNK2
jsr DRV.BLK.START
bit RRAMWRAMBNK1
rts
.EP
PATCH.SIZE .EQ *-PATCH
2022-03-13 12:58:15 +00:00
*--------------------------------------
2022-04-19 18:24:34 +00:00
.INB usr/src/shared/x.printf.s
2022-03-13 12:58:15 +00:00
*--------------------------------------
.INB usr/src/sys/pm.vedrive.s.cf
2022-04-19 18:24:34 +00:00
.INB usr/src/sys/pm.vedrive.s.bk
2022-03-13 12:58:15 +00:00
.INB usr/src/sys/pm.vedrive.s.ip
2022-04-19 18:24:34 +00:00
.INB usr/src/sys/pm.vedrive.s.gs
2022-03-13 12:58:15 +00:00
.INB usr/src/sys/pm.vedrive.s.u1
.INB usr/src/sys/pm.vedrive.s.u2
*--------------------------------------
VEDRIVE.MSG0 .AZ "VEDRIVE (ADTPro Virtual Ethernet HD) Driver\n"
VEDRIVE.DRVKO .AZ "VEDRIVE (Or other custom Driver) Already Installed.\n"
VEDRIVE.CONF .AZ "Checking %S...\n"
VEDRIVE.CONFKO .AZ "Error reading VEDRIVE.CONF file.\n"
VEDRIVE.CONFSYN .AZ "Syntax error in VEDRIVE.CONF file.\n"
VEDRIVE.CONFINV .AZ "Invalid VEDRIVE.CONF file.\n"
VEDRIVE.NICKO .AZ "Hardware not detected.\n"
VEDRIVE.NICOK .AZ "%S Rev. %d.%d Found At Slot %d.\n"
VEDRIVE.DHCP .AZ "Querying DHCP...\n"
VEDRIVE.DHCPKO .AZ "No response from DHCP.\n"
VEDRIVE.IPKO .AZ "Unable to setup IP configuration.\n"
VEDRIVE.IPOK .AZ "IP config : %d.%d.%d.%d/%d.%d.%d.%d GW=%d.%d.%d.%d\n"
VEDRIVE.SRV .AZ "Contacting ADTPro Server..."
VEDRIVE.SRVKO .AZ "No Response From ADTPro Server.\n"
VEDRIVE.SRVOK .AZ "ADTPro Server Is Online.\n"
VEDRIVE.NOSLOT .AZ "No ProDOS device slot available.\n"
VEDRIVE.DEVOK .AZ "VEDRIVE Installed 2 devices at S%d,D1 & S%d,D2.\n"
VEDRIVE.DRVIKO .AZ "Unable to install VEDRIVE.\n"
VEDRIVE.DRVIOK .AZ "VEDRIVE Successfully Installed.\n"
*--------------------------------------
CONF.FILENAME .AS "vedrive.conf"
CONF.FILENAME.L .EQ *-CONF.FILENAME
*--------------------------------------
CONF.KW >PSTR "nic"
>PSTR "slot"
>PSTR "address"
>PSTR "netmask"
>PSTR "gateway"
>PSTR "server"
>PSTR "port"
.HS 00
*--------------------------------------
CONF.KW.NIC >PSTR "lancegs"
>PSTR "uthernet"
>PSTR "uthernet2"
.HS 00
*--------------------------------------
CONF.NIC .HS FF
CONF.SLOT .HS 00
CONF.IPCFG .EQ *
CONF.SRCMAC .HS 000E3A123456
CONF.ADDRESS .HS 00000000
CONF.MASK .HS 00000000
CONF.GATEWAY .HS 00000000
CONF.SERVER .HS 00000000
CONF.PORT .DA /1977,#1977
2022-04-19 18:24:34 +00:00
CONF.D1TOTALBLK .DA $FFFF
CONF.D2TOTALBLK .DA $FFFF
2022-03-13 12:58:15 +00:00
*--------------------------------------
MLIGETPREFIX.P .DA #1
.DA CONF.FILEPATH
*--------------------------------------
MLIOPEN.P .DA #3
.DA CONF.FILEPATH
.DA CONF.FBUF
.BS 1 FILE#
*--------------------------------------
MLINEWLINE.P .DA #3
.BS 1
.DA #$7F
.DA #$0D
*--------------------------------------
MLIREAD.P .DA #4
.BS 1
.DA CONF.LBUF
.DA 255
.BS 2
*--------------------------------------
MLICLOSE.P .DA #1
.BS 1
*--------------------------------------
ARP.REQ .HS FFFFFFFFFFFF S.ETH.DSTMAC
ARP.REQ.SRCMAC .BS 6
ARP.REQ.ETYPE .DA /S.ETH.EII.TYPE.ARP
.DA #S.ETH.EII.TYPE.ARP
.HS 0001.0800.06.04
ARP.REQ.OP .DA /S.ARP.OPERATION.REQ
.DA #S.ARP.OPERATION.REQ
ARP.REQ.SHA .BS 6
ARP.REQ.SPA .BS 4
ARP.REQ.THA .BS 6
ARP.REQ.TPA .BS 4
*--------------------------------------
ARP.REP .EQ *
ARP.REP.DSTMAC .BS 6
ARP.REP.SRCMAC .BS 6
ARP.REP.ETYPE .DA /S.ETH.EII.TYPE.ARP
.DA #S.ETH.EII.TYPE.ARP
.HS 0001.0800.06.04
ARP.REP.OP .DA /S.ARP.OPERATION.REP
.DA #S.ARP.OPERATION.REP
ARP.REP.SHA .BS 6
ARP.REP.SPA .BS 4
ARP.REP.THA .BS 6
ARP.REP.TPA .BS 4
*--------------------------------------
DHCP.DISC .HS FFFFFFFFFFFF DST MAC
DHCP.DISC.SRCMAC .BS 6
.DA /S.ETH.EII.TYPE.IP
.DA #S.ETH.EII.TYPE.IP
DHCP.DISC.IP .HS 4500
.DA /DHCP.DISC.END-DHCP.DISC.IP,#DHCP.DISC.END-DHCP.DISC.IP
.HS 0000
.HS 0000
.DA #64 TTL
.DA #S.IP.PROTOCOL.UDP
.BS 2 IP CHECKSUM
.HS 00000000
.HS FFFFFFFF
*--------------------------------------
DHCP.DISC.UDP .DA #0,#UDP.PORT.DHCPC
.DA #0,#UDP.PORT.DHCPS
.DA /DHCP.DISC.END-DHCP.DISC.UDP,#DHCP.DISC.END-DHCP.DISC.UDP
.BS 2 UDP CHECKSUM
*--------------------------------------
.HS 01010600 OP,HTYPE,HLEN,HOPS
DHCP.DISC.XID .HS 54328574
.HS 0000 SECS
.DA S.DHCP.FLAGS.BRDCST
.HS 00000000 CIADDR
DHCP.DISC.YIADDR .HS 00000000
.HS 00000000 SIADDR
DHCP.DISC.GIADDR .HS 00000000
DHCP.DISC.CHADDR .HS 00000000.00000000.00000000.00000000
.BS 64 SNAME
.BS 128 FILE
.HS 63825363 COOKIE
.HS 3501 OPT
.DA #S.DHCP.OPTIONS.DHCPDiscover
.HS 37020103FF 37040103060FFF
DHCP.DISC.END .EQ *
DHCP.DISC.LEN .EQ *-DHCP.DISC
*--------------------------------------
DHCP.REQ .HS FFFFFFFFFFFF DST MAC
DHCP.REQ.SRCMAC .BS 6
.DA /S.ETH.EII.TYPE.IP
.DA #S.ETH.EII.TYPE.IP
DHCP.REQ.IP .HS 4500
.DA /DHCP.REQ.END-DHCP.REQ.IP,#DHCP.REQ.END-DHCP.REQ.IP
.HS 0000
.HS 0000
.DA #64 TTL
.DA #S.IP.PROTOCOL.UDP
.BS 2 IP CHECKSUM
.HS 00000000
.HS FFFFFFFF
*--------------------------------------
DHCP.REQ.UDP .DA #0,#UDP.PORT.DHCPC
.DA #0,#UDP.PORT.DHCPS
.DA /DHCP.REQ.END-DHCP.REQ.UDP,#DHCP.REQ.END-DHCP.REQ.UDP
.BS 2 UDP CHECKSUM
*--------------------------------------
.HS 01010600 OP,HTYPE,HLEN,HOPS
DHCP.REQ.XID .HS 54328574
.HS 0000 SECS
.DA S.DHCP.FLAGS.BRDCST
.HS 00000000 CIADDR
DHCP.REQ.YIADDR .HS 00000000
.HS 00000000 SIADDR
.HS 00000000 GIADDR
DHCP.REQ.CHADDR .HS 00000000.00000000.00000000.00000000
.BS 64 SNAME
.BS 128 FILE
.HS 63825363 COOKIE
.HS 3501 OPT
.DA #S.DHCP.OPTIONS.DHCPRequest
.HS 3204
DHCP.REQ.OPT.REQIP .BS 4
.HS 3604
DHCP.REQ.OPT.SVRIP .BS 4
.HS FF
DHCP.REQ.END .EQ *
DHCP.REQ.LEN .EQ *-DHCP.REQ
*--------------------------------------
2022-04-19 18:24:34 +00:00
ADT.REQ
2022-03-13 12:58:15 +00:00
ADT.REQ.DSTMAC .BS 6 DST MAC
ADT.REQ.SRCMAC .BS 6
.DA /S.ETH.EII.TYPE.IP
.DA #S.ETH.EII.TYPE.IP
ADT.REQ.IP .HS 4500
.DA /ADT.REQ.END-ADT.REQ.IP,#ADT.REQ.END-ADT.REQ.IP
.HS 0000
.HS 0000
.DA #64 TTL
.DA #S.IP.PROTOCOL.UDP
.BS 2 IP CHECKSUM
ADT.REQ.IP.SRC .BS 4 SRC IP
ADT.REQ.IP.DST .BS 4 DST IP
*--------------------------------------
ADT.REQ.UDP .DA #$C0,#$00 SRC PORT
ADT.REQ.UDP.DST .BS 2 DST PORT
.DA /ADT.REQ.END-ADT.REQ.UDP,#ADT.REQ.END-ADT.REQ.UDP
.BS 2 UDP CHECKSUM
*--------------------------------------
.DA #ADT.CMD.VSD
.HS 030000C6 READ D1, BLK 0
ADT.REQ.END .EQ *
ADT.REQ.LEN .EQ *-ADT.REQ
*--------------------------------------
MAN
SAVE usr/src/sys/pm.vedrive.s
ASM