mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-21 21:29:05 +00:00
ProDOS.FX/16M, A2osX 1.00/16M (useless files removed)
This commit is contained in:
parent
648a12f28f
commit
ade86cb9df
@ -1,181 +0,0 @@
|
|||||||
NEW
|
|
||||||
AUTO 3,1
|
|
||||||
.LIST OFF
|
|
||||||
.OP 65C02
|
|
||||||
.OR $2000
|
|
||||||
.TF sys/pm/pm.appletalk
|
|
||||||
*--------------------------------------
|
|
||||||
.INB inc/macros.i
|
|
||||||
.INB inc/io.i
|
|
||||||
.INB inc/monitor.i
|
|
||||||
.INB inc/mli.i
|
|
||||||
.INB inc/appletalk.i
|
|
||||||
*--------------------------------------
|
|
||||||
TmpPtr1 .EQ $0
|
|
||||||
*--------------------------------------
|
|
||||||
BUF.PREFIX .EQ $300
|
|
||||||
*--------------------------------------
|
|
||||||
AT.INIT >LDYAI MSG.INIT
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
lda #$F9
|
|
||||||
sta TmpPtr1
|
|
||||||
lda #$C7
|
|
||||||
sta TmpPtr1+1
|
|
||||||
|
|
||||||
.1 ldy #3
|
|
||||||
|
|
||||||
.2 lda (TmpPtr1),y
|
|
||||||
cmp SIG.ATLK,y
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
dey
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
ldy #4
|
|
||||||
lda (TmpPtr1),y
|
|
||||||
cmp #1
|
|
||||||
beq .4
|
|
||||||
|
|
||||||
ldx #$80
|
|
||||||
cmp #2
|
|
||||||
beq .4
|
|
||||||
|
|
||||||
pha
|
|
||||||
>LDYAI MSG.FAILED
|
|
||||||
jsr PrintFYA
|
|
||||||
rts
|
|
||||||
|
|
||||||
.3 dec TmpPtr1+1
|
|
||||||
lda TmpPtr1+1
|
|
||||||
cmp #$C0
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
>LDYAI MSG.NOHW
|
|
||||||
jsr PrintFYA
|
|
||||||
rts
|
|
||||||
|
|
||||||
.4 stx WC.Flag
|
|
||||||
tay
|
|
||||||
lda TmpPtr1+1
|
|
||||||
and #$0f
|
|
||||||
pha Push slot #
|
|
||||||
phy Push Type #
|
|
||||||
>LDYAI MSG.HWOK
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
>LDYA MLI+1
|
|
||||||
>STYA GO.OLDMLI+1
|
|
||||||
>STYA MLIATALK.PARAMS.OLDMLI
|
|
||||||
ldy #$14
|
|
||||||
lda TmpPtr1+1 Cn
|
|
||||||
sta MLIALLOCIRQ.PARAMS.SLOT
|
|
||||||
>STYA GO.WSCARD+1
|
|
||||||
bit WC.Flag
|
|
||||||
bmi .5
|
|
||||||
>STYA MLI+1
|
|
||||||
|
|
||||||
.5 >LDYAI MSG.ATINIT
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr GO.WSCARD
|
|
||||||
.DA #MLIATALK
|
|
||||||
.DA MLIATALK.PARAMS
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>LDYAI MSG.IRQ
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr MLI
|
|
||||||
.DA #MLIALLOCIRQ
|
|
||||||
.DA MLIALLOCIRQ.PARAMS
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
cli
|
|
||||||
>LDYAI MSG.PREFIX1
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr GO.OLDMLI
|
|
||||||
.DA #MLIGETPREFIX
|
|
||||||
.DA MLIGETPREFIX.PARAMS
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>LDYAI MSG.PREFIX2
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr GO.WSCARD
|
|
||||||
.DA #MLISETPREFIX
|
|
||||||
.DA MLIGETPREFIX.PARAMS
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr MLI
|
|
||||||
.DA #MLIATALK
|
|
||||||
.DA MLI.AT.FINaming
|
|
||||||
bcc .8
|
|
||||||
|
|
||||||
lda MLI.AT.FINaming+2
|
|
||||||
pha
|
|
||||||
lda MLI.AT.FINaming+3
|
|
||||||
pha
|
|
||||||
>LDYAI MSG.AFPKO
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
.8 >LDYAI MSG.OK
|
|
||||||
jsr PrintFYA
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 pha
|
|
||||||
>LDYAI MSG.KO
|
|
||||||
jsr PrintFYA
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
GO.WSCARD jmp $ffff SELF MODIFIED
|
|
||||||
GO.OLDMLI jmp $ffff SELF MODIFIED
|
|
||||||
*--------------------------------------
|
|
||||||
.INB usr/src/shared/x.printf.s
|
|
||||||
*--------------------------------------
|
|
||||||
MSG.INIT .CZ "AppleTalk Driver For A2osX\r"
|
|
||||||
MSG.FAILED .CZ "AppleTalk Workstation Card Failed Power Up Diagnostics : EC=%h.\r"
|
|
||||||
MSG.NOHW .CZ "AppleTalk Workstation Card Not Found.\r"
|
|
||||||
MSG.HWOK .CZ "AppleTalk Workstation Card Type #%d Found In Slot #%d.\r"
|
|
||||||
MSG.ATINIT .CZ "Calling ATInit...\r"
|
|
||||||
MSG.IRQ .CZ "Setting Up IRQ Vector...\r"
|
|
||||||
MSG.PREFIX1 .CZ "Getting ProDOS Prefix...\r"
|
|
||||||
MSG.PREFIX2 .CZ "Setting AppleTalk Prefix...\r"
|
|
||||||
MSG.AFPKO .CZ "WARNING : Enabling AFP failed : EC=%h%h.\r"
|
|
||||||
MSG.OK .CZ "AppleTalk Driver Successfully Installed.\r"
|
|
||||||
MSG.KO .CZ "AppleTalk Driver Install Failed : EC=%h.\r"
|
|
||||||
*--------------------------------------
|
|
||||||
SIG.ATLK .AS "ATLK"
|
|
||||||
WC.Flag .BS 1
|
|
||||||
*--------------------------------------
|
|
||||||
MLIATALK.PARAMS .DA #0 Sync
|
|
||||||
.DA #1 INIT
|
|
||||||
.BS 2 RC
|
|
||||||
.DA #$40 ??? from ATINIT disassembly
|
|
||||||
MLIATALK.PARAMS.OLDMLI
|
|
||||||
.BS 2 ??? from ATINIT disassembly
|
|
||||||
.BS 5 ??? from ATINIT disassembly
|
|
||||||
*--------------------------------------
|
|
||||||
MLIALLOCIRQ.PARAMS
|
|
||||||
.DA #2 Param Count
|
|
||||||
.BS 1 Int Num returned
|
|
||||||
.DA #$19 Lo byte always $19 for WS Card
|
|
||||||
MLIALLOCIRQ.PARAMS.SLOT
|
|
||||||
.BS 1 hi byte : $Cn
|
|
||||||
*--------------------------------------
|
|
||||||
MLIGETPREFIX.PARAMS
|
|
||||||
.DA #1
|
|
||||||
.DA BUF.PREFIX
|
|
||||||
*--------------------------------------
|
|
||||||
MLI.AT.FINaming .DA #0 Synchonous
|
|
||||||
.DA #AT.FINaming
|
|
||||||
.BS 2 Result Code
|
|
||||||
.DA #%11000000 set Bit 7 & 6
|
|
||||||
.DA #%10000000 b7=1:Use AFP long Name, b6=0:Update ProDOS dev table
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE usr/src/sys/pm.appletalk.s
|
|
||||||
ASM
|
|
323
SYS/PM.NSC.S.txt
323
SYS/PM.NSC.S.txt
@ -1,323 +0,0 @@
|
|||||||
NEW
|
|
||||||
AUTO 3,1
|
|
||||||
.LIST OFF
|
|
||||||
.OP 65C02
|
|
||||||
.OR $2000
|
|
||||||
.TF sys/pm/pm.nsc
|
|
||||||
*--------------------------------------
|
|
||||||
.INB inc/macros.i
|
|
||||||
.INB inc/io.i
|
|
||||||
.INB inc/monitor.i
|
|
||||||
.INB inc/mli.i
|
|
||||||
*--------------------------------------
|
|
||||||
NSC.IOBASE .EQ $C300
|
|
||||||
*--------------------------------------
|
|
||||||
TmpPtr1 .EQ $0
|
|
||||||
TmpPtr2 .EQ $2
|
|
||||||
offset .EQ $4
|
|
||||||
*--------------------------------------
|
|
||||||
NSC.Init >LDYAI NSC.MSG0
|
|
||||||
jsr NSC.Print
|
|
||||||
lda MACHID
|
|
||||||
and #MACHID.CLK Clock already installed ?
|
|
||||||
beq .1
|
|
||||||
|
|
||||||
>LDYAI NSC.MSG1
|
|
||||||
bra NSC.Print
|
|
||||||
|
|
||||||
.1 jsr NSC.Detect
|
|
||||||
bcc .2
|
|
||||||
|
|
||||||
>LDYAI NSC.MSG2
|
|
||||||
bra NSC.Print
|
|
||||||
|
|
||||||
.2 jsr NSC.Install
|
|
||||||
lda #MACHID.CLK
|
|
||||||
tsb MACHID
|
|
||||||
|
|
||||||
>LDYAI NSC.MSG3
|
|
||||||
* jmp NSC.Print
|
|
||||||
*--------------------------------------
|
|
||||||
NSC.Print sty TmpPtr1
|
|
||||||
sta TmpPtr1+1
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.1 lda (TmpPtr1),y
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
jsr COUT
|
|
||||||
iny
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
.8 jmp CROUT
|
|
||||||
*--------------------------------------
|
|
||||||
DS1216E.DATA1 .EQ $10
|
|
||||||
DS1216E.DATA2 .EQ $18
|
|
||||||
*--------------------------------------
|
|
||||||
NSC.Detect php
|
|
||||||
sei
|
|
||||||
|
|
||||||
lda RDCXROM
|
|
||||||
php
|
|
||||||
|
|
||||||
sta SETCXROM
|
|
||||||
|
|
||||||
sta NSC.IOBASE
|
|
||||||
* lda $C00B Workaround for Ultrawarp bug
|
|
||||||
|
|
||||||
ldx #8
|
|
||||||
|
|
||||||
.1 ldy #8
|
|
||||||
|
|
||||||
.2 lda NSC.IOBASE+4
|
|
||||||
lsr
|
|
||||||
ror DS1216E.DATA1-1,x
|
|
||||||
dey
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
sta NSC.IOBASE
|
|
||||||
* lda $C00B Workaround for Ultrawarp bug
|
|
||||||
|
|
||||||
lda NSC.IOBASE+4 Reset DS1216E comparison register with READ A2=1
|
|
||||||
|
|
||||||
ldy #8 Read 8 bytes...
|
|
||||||
|
|
||||||
.3 lda DS1216E.PATTERN-1,x
|
|
||||||
phy
|
|
||||||
|
|
||||||
ldy #8 ....of 8 bits
|
|
||||||
|
|
||||||
.4 ldx #0
|
|
||||||
lsr
|
|
||||||
bcc .5
|
|
||||||
|
|
||||||
inx
|
|
||||||
|
|
||||||
.5 bit NSC.IOBASE,x Write Pattern bit in A0, with A2=0
|
|
||||||
|
|
||||||
dey
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
ply
|
|
||||||
dey
|
|
||||||
bne .3
|
|
||||||
*--------------------------------------
|
|
||||||
ldx #8
|
|
||||||
|
|
||||||
.6 ldy #8
|
|
||||||
|
|
||||||
.7 lda NSC.IOBASE+4
|
|
||||||
lsr
|
|
||||||
ror DS1216E.DATA2-1,x
|
|
||||||
dey
|
|
||||||
bne .7
|
|
||||||
|
|
||||||
dex
|
|
||||||
bne .6
|
|
||||||
|
|
||||||
plp
|
|
||||||
bmi .8
|
|
||||||
|
|
||||||
sta CLRCXROM
|
|
||||||
|
|
||||||
.8 plp
|
|
||||||
*--------------------------------------
|
|
||||||
ldx #8
|
|
||||||
|
|
||||||
.81 lda DS1216E.DATA1-1,x
|
|
||||||
cmp DS1216E.DATA2-1,x
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
dex
|
|
||||||
bne .81
|
|
||||||
|
|
||||||
* sec from CMP
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
NSC.Install lda DATETIME+1
|
|
||||||
sta TmpPtr1
|
|
||||||
sec
|
|
||||||
sbc #NSCDRV.B.START
|
|
||||||
sta offset
|
|
||||||
lda DATETIME+2
|
|
||||||
sta TmpPtr1+1
|
|
||||||
sbc /NSCDRV.B.START
|
|
||||||
sta offset+1
|
|
||||||
|
|
||||||
ldy #1
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
.1 lda NSCDRV.RELOC,x
|
|
||||||
beq .2
|
|
||||||
|
|
||||||
sta TmpPtr2
|
|
||||||
inx
|
|
||||||
lda NSCDRV.RELOC,x
|
|
||||||
sta TmpPtr2+1
|
|
||||||
lda (TmpPtr2)
|
|
||||||
clc
|
|
||||||
adc offset
|
|
||||||
sta (TmpPtr2)
|
|
||||||
lda (TmpPtr2),y
|
|
||||||
adc offset+1
|
|
||||||
sta (TmpPtr2),y
|
|
||||||
inx
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
.2 lda RRAMWRAMBNK1
|
|
||||||
lda RRAMWRAMBNK1
|
|
||||||
.3 ldy #NSCDRV.SIZE-1 always < 128
|
|
||||||
|
|
||||||
.7 lda NSCDRV.B.START,y
|
|
||||||
sta (TmpPtr1),y
|
|
||||||
dey
|
|
||||||
bpl .7
|
|
||||||
|
|
||||||
lda RROMBNK1
|
|
||||||
lda #$4C
|
|
||||||
sta DATETIME
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
NSCDRV.RELOC .DA NSCDRV.R1+1
|
|
||||||
* .DA NSCDRV.R2+1
|
|
||||||
* .DA NSCDRV.R3+1
|
|
||||||
.DA NSCDRV.R4+1
|
|
||||||
.DA NSCDRV.R5+1
|
|
||||||
.DA NSCDRV.R6+1
|
|
||||||
.DA NSCDRV.R7+1
|
|
||||||
.DA NSCDRV.R8+1
|
|
||||||
* .DA NSCDRV.R9+1
|
|
||||||
.DA #0
|
|
||||||
*--------------------------------------
|
|
||||||
NSC.MSG0 .AZ -"NSC 'No-Slot-Clock'/DS1216E Driver For A2osX"
|
|
||||||
NSC.MSG1 .AZ -"Clock Already Present!"
|
|
||||||
NSC.MSG2 .AZ -"No DS1216E Detected!"
|
|
||||||
NSC.MSG3 .AZ -"DS1216E Driver Successfully Installed."
|
|
||||||
*--------------------------------------
|
|
||||||
* Driver For DS1216E
|
|
||||||
*--------------------------------------
|
|
||||||
DS1216E.DATA .EQ $200 Reverted YY MM DD Day HH mm SS CS
|
|
||||||
*--------------------------------------
|
|
||||||
NSCDRV.B.START .EQ *
|
|
||||||
NSCDRV php
|
|
||||||
sei
|
|
||||||
|
|
||||||
lda RDCXROM
|
|
||||||
php
|
|
||||||
|
|
||||||
sta SETCXROM
|
|
||||||
|
|
||||||
sta NSC.IOBASE
|
|
||||||
* lda $C00B Workaround for Ultrawarp bug
|
|
||||||
|
|
||||||
lda NSC.IOBASE+4 Reset DS1216E comparison register with READ A2=1
|
|
||||||
|
|
||||||
ldy #8 Read 8 bytes...
|
|
||||||
|
|
||||||
NSCDRV.R1 lda DS1216E.PATTERN-1,y
|
|
||||||
phy
|
|
||||||
|
|
||||||
ldy #8 ....of 8 bits
|
|
||||||
|
|
||||||
NSCDRV.2 ldx #0
|
|
||||||
lsr
|
|
||||||
bcc NSCDRV.3
|
|
||||||
|
|
||||||
inx
|
|
||||||
|
|
||||||
NSCDRV.3 bit NSC.IOBASE,x Write Pattern bit in A0, with A2=0
|
|
||||||
|
|
||||||
dey
|
|
||||||
bne NSCDRV.2
|
|
||||||
|
|
||||||
ply
|
|
||||||
dey
|
|
||||||
bne NSCDRV.R1
|
|
||||||
|
|
||||||
ldx #8
|
|
||||||
|
|
||||||
NSCDRV.4 ldy #8
|
|
||||||
|
|
||||||
NSCDRV.5 pha
|
|
||||||
lda NSC.IOBASE+4 Read Byte...
|
|
||||||
|
|
||||||
lsr
|
|
||||||
pla
|
|
||||||
ror
|
|
||||||
|
|
||||||
dey
|
|
||||||
bne NSCDRV.5
|
|
||||||
|
|
||||||
pha
|
|
||||||
lsr
|
|
||||||
lsr
|
|
||||||
lsr
|
|
||||||
lsr
|
|
||||||
tay
|
|
||||||
pla
|
|
||||||
and #$0F
|
|
||||||
|
|
||||||
clc
|
|
||||||
|
|
||||||
.HS 2C Bit Absolute to skip adc #$0A
|
|
||||||
|
|
||||||
NSCDRV.6 adc #$0A
|
|
||||||
dey
|
|
||||||
bpl NSCDRV.6
|
|
||||||
|
|
||||||
NSCDRV.R4 sta DS1216E.DATA-1,x
|
|
||||||
dex
|
|
||||||
bne NSCDRV.4
|
|
||||||
|
|
||||||
pha DS1216E.DATA
|
|
||||||
|
|
||||||
NSCDRV.R7 lda DS1216E.DATA+1 Get MM
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
NSCDRV.R8 ora DS1216E.DATA+2 Get DD
|
|
||||||
sta DATELO
|
|
||||||
|
|
||||||
*NSCDRV.R9 lda DS1216E.DATA Get YY
|
|
||||||
|
|
||||||
pla
|
|
||||||
rol
|
|
||||||
sta DATELO+1
|
|
||||||
|
|
||||||
NSCDRV.R6 lda DS1216E.DATA+5 Get mm
|
|
||||||
sta TIMELO
|
|
||||||
|
|
||||||
NSCDRV.R5 lda DS1216E.DATA+4 Get HH
|
|
||||||
sta TIMELO+1
|
|
||||||
|
|
||||||
plp
|
|
||||||
bmi .8
|
|
||||||
|
|
||||||
sta CLRCXROM
|
|
||||||
|
|
||||||
.8 plp
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
DS1216E.PATTERN .HS 5CA33AC55CA33AC5 Reverted 7->0
|
|
||||||
*--------------------------------------
|
|
||||||
.LIST ON
|
|
||||||
NSCDRV.SIZE .EQ *-NSCDRV.B.START
|
|
||||||
.LIST OFF
|
|
||||||
*--------------------------------------
|
|
||||||
* CONTROL SECTION :
|
|
||||||
*--------------------------------------
|
|
||||||
.DO NSCDRV.SIZE>125
|
|
||||||
ERROR:NSCDRV.SIZE too big
|
|
||||||
.FIN
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE usr/src/sys/pm.nsc.s
|
|
||||||
ASM
|
|
@ -1,805 +0,0 @@
|
|||||||
NEW
|
|
||||||
AUTO 3,1
|
|
||||||
.LIST OFF
|
|
||||||
.OP 65C02
|
|
||||||
.OR $2000
|
|
||||||
.TF sys/pm.ramworks
|
|
||||||
*--------------------------------------
|
|
||||||
.INB inc/macros.i
|
|
||||||
.INB inc/io.i
|
|
||||||
.INB inc/monitor.i
|
|
||||||
.INB inc/mli.i
|
|
||||||
.INB inc/mli.e.i
|
|
||||||
*--------------------------------------
|
|
||||||
TmpPtr1 .EQ $0
|
|
||||||
TmpPtr2 .EQ $2
|
|
||||||
Type .EQ $4
|
|
||||||
*--------------------------------------
|
|
||||||
RW.SAVEZP0 .EQ $2800
|
|
||||||
RW.SAVEZP1 .EQ $2900
|
|
||||||
*--------------------------------------
|
|
||||||
RW.BLOCK .EQ $2A00
|
|
||||||
RW.ONLINEBUFFER .EQ $2C00
|
|
||||||
*--------------------------------------
|
|
||||||
* A2OSX.SYSTEM relocated at $1000 !!!
|
|
||||||
*--------------------------------------
|
|
||||||
SEBankSelect .EQ $C071
|
|
||||||
RWBankSelect .EQ $C073
|
|
||||||
*--------------------------------------
|
|
||||||
RW.Init >LDYAI RW.MSG
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr RW.CheckRAM3
|
|
||||||
bcs .5
|
|
||||||
|
|
||||||
>LDYAI RW.MSG.RAM3OK
|
|
||||||
jsr PrintFYA
|
|
||||||
rts
|
|
||||||
|
|
||||||
.5 jsr RW.DisableRAM
|
|
||||||
bcc .10
|
|
||||||
|
|
||||||
>LDYAI RW.MSG.RAMDISKO
|
|
||||||
jsr PrintFYA
|
|
||||||
rts
|
|
||||||
|
|
||||||
.10 >LDYAI RW.MSG.RAMDISOK
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
lda #RWBankSelect
|
|
||||||
jsr RW.DetectHW
|
|
||||||
bcc .1
|
|
||||||
|
|
||||||
lda #SEBankSelect
|
|
||||||
jsr RW.DetectHW
|
|
||||||
bcc .1
|
|
||||||
|
|
||||||
>LDYAI RW.MSG.KO1
|
|
||||||
bra .9
|
|
||||||
|
|
||||||
.1 tay save RAM drive pages
|
|
||||||
|
|
||||||
pha
|
|
||||||
|
|
||||||
lsr divide by 4 to compute KB size
|
|
||||||
ror .12+1
|
|
||||||
lsr
|
|
||||||
ror .12+1
|
|
||||||
|
|
||||||
.12 ldx #$00 X,A = RAM drive size
|
|
||||||
phx Push Kbyte LO
|
|
||||||
pha Push Kbyte HI
|
|
||||||
|
|
||||||
tya
|
|
||||||
inc + 1 page AUX mem
|
|
||||||
|
|
||||||
pha Total page detected
|
|
||||||
|
|
||||||
lsr divide by 4 to compute KB size
|
|
||||||
ror .11+1
|
|
||||||
lsr
|
|
||||||
ror .11+1
|
|
||||||
|
|
||||||
.11 ldx #$00 X,A = Total KB detected
|
|
||||||
phx Push Kbyte LO
|
|
||||||
pha Push Kbyte HI
|
|
||||||
|
|
||||||
>LDYAI RW.MSG.OK1
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr RW.Install
|
|
||||||
bcc .2
|
|
||||||
|
|
||||||
>LDYAI RW.MSG.KO2
|
|
||||||
bra .9
|
|
||||||
|
|
||||||
.2 >LDYAI RW.MSG.OK2
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr RW.Format
|
|
||||||
bcc .3
|
|
||||||
|
|
||||||
>LDYAI RW.MSG.KO3
|
|
||||||
bra .9
|
|
||||||
|
|
||||||
.3 >LDYAI RW.MSG.OK3
|
|
||||||
|
|
||||||
.9 jsr PrintFYA
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
RW.CheckRAM3 jsr RW.ONLINE MLI Online at S3D2
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
lda RW.ONLINEBUFFER
|
|
||||||
and #$0F
|
|
||||||
|
|
||||||
cmp #4 'RAM3' ?
|
|
||||||
sec
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
tax
|
|
||||||
|
|
||||||
.1 lda RW.ONLINEBUFFER,x
|
|
||||||
eor RW.MSG.RAM3OK,x
|
|
||||||
asl ignore b7
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
RW.DisableRAM lda GP.DEVPTRS3D2
|
|
||||||
cmp GP.DEVPTRS S0D1=NOVEV
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
lda GP.DEVPTRS3D2+1
|
|
||||||
cmp GP.DEVPTRS+1 S0D1=NODEV
|
|
||||||
beq .8 S3D2=NODEV, nothing to do
|
|
||||||
|
|
||||||
.1 ldx GP.DEVCNT
|
|
||||||
|
|
||||||
.2 lda GP.DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
|
|
||||||
and #$F3
|
|
||||||
cmp #$B3
|
|
||||||
beq .3
|
|
||||||
|
|
||||||
dex
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
sec No device found, exit with error
|
|
||||||
rts
|
|
||||||
|
|
||||||
.3 cpx GP.DEVCNT
|
|
||||||
beq .5
|
|
||||||
|
|
||||||
.4 lda GP.DEVLST+1,x
|
|
||||||
sta GP.DEVLST,x
|
|
||||||
inx
|
|
||||||
cpx GP.DEVCNT
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
.5 ldx GP.DEVCNT
|
|
||||||
stz GP.DEVLST,x
|
|
||||||
dec GP.DEVCNT
|
|
||||||
lda GP.DEVPTRS
|
|
||||||
sta GP.DEVPTRS3D2
|
|
||||||
lda GP.DEVPTRS+1
|
|
||||||
sta GP.DEVPTRS3D2+1
|
|
||||||
|
|
||||||
jsr RW.ONLINE
|
|
||||||
|
|
||||||
.8 clc Success!!
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
RW.ONLINE jsr MLI
|
|
||||||
.DA #MLI.ONLINE
|
|
||||||
.DA RW.ONLINEPARAM
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
RW.ONLINEPARAM .DA #2
|
|
||||||
.DA #$B0 Slot 3,Drive 2
|
|
||||||
.DA RW.ONLINEBUFFER
|
|
||||||
*--------------------------------------
|
|
||||||
RW.DetectHW php
|
|
||||||
sei
|
|
||||||
sta Type
|
|
||||||
sta .1+1
|
|
||||||
sta .2+1
|
|
||||||
sta .3+1
|
|
||||||
sta .6+1
|
|
||||||
|
|
||||||
sta IO.SETALTZP
|
|
||||||
|
|
||||||
ldx #0 start detection at page $00
|
|
||||||
|
|
||||||
.1 stx RWBankSelect
|
|
||||||
lda 0
|
|
||||||
sta RW.SAVEZP0,x save Bank 0 $0000 to prevent ALTZP trash
|
|
||||||
lda 1
|
|
||||||
sta RW.SAVEZP1,x
|
|
||||||
inx
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
|
|
||||||
.2 sta RWBankSelect
|
|
||||||
*--------------------------------------
|
|
||||||
* Added after David Finnigan from macgui.com testing sessions
|
|
||||||
*
|
|
||||||
pha
|
|
||||||
pla
|
|
||||||
*
|
|
||||||
* to address possibly a timing issue with Accelerators
|
|
||||||
*--------------------------------------
|
|
||||||
sta 0
|
|
||||||
eor #$FF
|
|
||||||
sta 1
|
|
||||||
eor #$FF
|
|
||||||
inc
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
.3 stx RWBankSelect
|
|
||||||
*--------------------------------------
|
|
||||||
* Added after David Finnigan from macgui.com testing sessions
|
|
||||||
*
|
|
||||||
pha
|
|
||||||
pla
|
|
||||||
*
|
|
||||||
* to address possibly a timing issue with Accelerators
|
|
||||||
*--------------------------------------
|
|
||||||
lda 0
|
|
||||||
tay
|
|
||||||
eor #$ff
|
|
||||||
cmp 1
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
inx
|
|
||||||
|
|
||||||
cpy #127
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
.4 ldy #127 X = detected page count
|
|
||||||
|
|
||||||
.6 sty RWBankSelect
|
|
||||||
|
|
||||||
lda RW.SAVEZP0,y
|
|
||||||
sta 0
|
|
||||||
lda RW.SAVEZP1,y
|
|
||||||
sta 1
|
|
||||||
dey
|
|
||||||
bpl .6
|
|
||||||
|
|
||||||
sta IO.CLRALTZP
|
|
||||||
plp
|
|
||||||
|
|
||||||
txa PGCNT > 0 ?
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
dec minus 1 for AUX mem
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
sta RW.PGCNT PGCNT = last detected page
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
RW.Install lda IO.RRAMWRAMBNK1
|
|
||||||
lda IO.RRAMWRAMBNK1
|
|
||||||
|
|
||||||
ldx #RWDRV.SIZE
|
|
||||||
|
|
||||||
.1 lda RWDRV.B.START-1,x
|
|
||||||
sta RWDRV.START-1,x
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
lda RW.PGCNT
|
|
||||||
lsr
|
|
||||||
sta RWDRV.MAXHI+1
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
ror
|
|
||||||
sta RWDRV.MAXLO+1
|
|
||||||
|
|
||||||
lda Type
|
|
||||||
sta RWDRV.IO1+1
|
|
||||||
sta RWDRV.EXIT+1
|
|
||||||
|
|
||||||
lda IO.RROMBNK1
|
|
||||||
|
|
||||||
sta IO.SETWRITEAUX
|
|
||||||
|
|
||||||
ldx #RWDRVX.SIZE
|
|
||||||
|
|
||||||
.2 lda RWDRVX.B.START-1,x
|
|
||||||
sta RWDRVX.START-1,x
|
|
||||||
dex
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
lda Type
|
|
||||||
sta RWDRVX.XM.IO1+1
|
|
||||||
sta RWDRVX.XM.IO2+1
|
|
||||||
sta RWDRVX.XM.IO3+1
|
|
||||||
|
|
||||||
sta IO.CLRWRITEAUX
|
|
||||||
inc GP.DEVCNT
|
|
||||||
ldx GP.DEVCNT
|
|
||||||
lda #$B0 Slot 3,Drive 2,0=Not Removable, 0=no int, 00=1 Volume
|
|
||||||
sta GP.DEVLST,x
|
|
||||||
|
|
||||||
lda #RWDRV.START
|
|
||||||
sta GP.DEVPTRS3D2
|
|
||||||
lda /RWDRV.START
|
|
||||||
sta GP.DEVPTRS3D2+1
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
RW.Format jsr RW.BLOCK.SET00
|
|
||||||
lda RW.PGCNT
|
|
||||||
lsr
|
|
||||||
sta RW.BLOCK2.TB+1
|
|
||||||
lda #0
|
|
||||||
ror
|
|
||||||
sta RW.BLOCK2.TB
|
|
||||||
|
|
||||||
jsr MLI
|
|
||||||
.DA #MLI.GETTIME
|
|
||||||
.DA 0
|
|
||||||
|
|
||||||
ldx #3
|
|
||||||
|
|
||||||
.1 lda GP.DATE,x
|
|
||||||
sta RW.BLOCK2.CT,x
|
|
||||||
dex
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
ldx #RW.BLOCK2.END-RW.BLOCK2
|
|
||||||
|
|
||||||
.2 lda RW.BLOCK2-1,x
|
|
||||||
sta RW.BLOCK-1,x
|
|
||||||
dex
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
jsr MLI Write Block 2,First VOL directory block
|
|
||||||
.DA #MLI.WRITEBLOCK
|
|
||||||
.DA RW.MLIWRITEBLOCK
|
|
||||||
bcc .22
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
.22 jsr RW.BLOCK.SET00
|
|
||||||
|
|
||||||
lda #2
|
|
||||||
sta RW.BLOCK LO byte of previous block pointer
|
|
||||||
|
|
||||||
inc RW.MLIWRITEBLOCK.BLK
|
|
||||||
jsr MLI Write Block 3,Last VOL directory block
|
|
||||||
.DA #MLI.WRITEBLOCK
|
|
||||||
.DA RW.MLIWRITEBLOCK
|
|
||||||
bcc .33
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
.33 lda RW.PGCNT divide RW.PGCNT by 32 to get how many bitmap
|
|
||||||
lsr blocks we need :
|
|
||||||
lsr 1 page = 128 blocks = 16 bytes
|
|
||||||
lsr 32 pages = 512 bytes = 1 Block
|
|
||||||
lsr
|
|
||||||
lsr
|
|
||||||
sta RW.FBITMAPCNT store FULL bitmap block count needed
|
|
||||||
|
|
||||||
tax
|
|
||||||
lda RW.PGCNT
|
|
||||||
and #$1F need an extra incomplete bitmap block?
|
|
||||||
beq .3
|
|
||||||
|
|
||||||
inx
|
|
||||||
.3 stx RW.BITMAPCNT store TOTAL bitmap block needed
|
|
||||||
|
|
||||||
.4 lda RW.FBITMAPCNT
|
|
||||||
beq .49
|
|
||||||
|
|
||||||
dec RW.FBITMAPCNT
|
|
||||||
jsr RW.BLOCK.SETFF
|
|
||||||
|
|
||||||
bra .5
|
|
||||||
|
|
||||||
.49 jsr RW.BLOCK.SET00
|
|
||||||
lda RW.PGCNT
|
|
||||||
and #$1F compute incomplete bitmap block
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl times 16 for byte count
|
|
||||||
tay
|
|
||||||
lda #$FF
|
|
||||||
bcc .42 first half of block only
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
.40 sta RW.BLOCK,x
|
|
||||||
inx
|
|
||||||
bne .40
|
|
||||||
|
|
||||||
cpy #0
|
|
||||||
beq .5
|
|
||||||
|
|
||||||
.41 sta RW.BLOCK+$ff,y
|
|
||||||
dey
|
|
||||||
bne .41
|
|
||||||
|
|
||||||
bra .5
|
|
||||||
|
|
||||||
.42 sta RW.BLOCK-1,y
|
|
||||||
dey
|
|
||||||
bne .42
|
|
||||||
|
|
||||||
.5 inc RW.MLIWRITEBLOCK.BLK
|
|
||||||
lda RW.MLIWRITEBLOCK.BLK
|
|
||||||
cmp #4 Are we writing first volume bitmap ?
|
|
||||||
bne .63 no, regular one
|
|
||||||
|
|
||||||
* lda #$CF Mark Block 0 & 1 free, 2,3 used (vol hdr)
|
|
||||||
lda #$0F
|
|
||||||
sta RW.BLOCK
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
lda #$8 Start a BLOCK 4 (%00001000)
|
|
||||||
ldx RW.BITMAPCNT
|
|
||||||
|
|
||||||
.62 pha
|
|
||||||
eor RW.BLOCK,y Mark bitmap blocks as "used"
|
|
||||||
sta RW.BLOCK,y
|
|
||||||
pla
|
|
||||||
dex
|
|
||||||
beq .63
|
|
||||||
|
|
||||||
lsr
|
|
||||||
bne .62
|
|
||||||
|
|
||||||
lda #$80
|
|
||||||
iny
|
|
||||||
bra .62
|
|
||||||
|
|
||||||
.63 jsr MLI Write Block 4,5...
|
|
||||||
.DA #MLI.WRITEBLOCK
|
|
||||||
.DA RW.MLIWRITEBLOCK
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
dec RW.BITMAPCNT another bitmap block needed ?
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
RW.BLOCK.SETFF lda #$FF
|
|
||||||
.HS 2C BIT ABS
|
|
||||||
|
|
||||||
RW.BLOCK.SET00 lda #$00
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
.1 sta RW.BLOCK,x
|
|
||||||
sta RW.BLOCK+$100,x
|
|
||||||
inx
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
RW.MLIWRITEBLOCK
|
|
||||||
.DA #3
|
|
||||||
.DA #$B0 Slot 3,Drive 2
|
|
||||||
.DA RW.BLOCK
|
|
||||||
RW.MLIWRITEBLOCK.BLK
|
|
||||||
.DA 2 Start writing block at #2
|
|
||||||
*--------------------------------------
|
|
||||||
RW.PGCNT .BS 1
|
|
||||||
RW.FBITMAPCNT .BS 1
|
|
||||||
RW.BITMAPCNT .BS 1
|
|
||||||
*--------------------------------------
|
|
||||||
RW.BLOCK2 .DA 0 pointer to previous block
|
|
||||||
.DA 3 pointer to next block
|
|
||||||
.DA #$F4 $F=Vol Dir Header, 4=name len
|
|
||||||
.AS 'RAM3'
|
|
||||||
.BS 11 (RAM3 len=4, fill to 15)
|
|
||||||
.HS 0000000000000000
|
|
||||||
RW.BLOCK2.CT .BS 4 Creation time
|
|
||||||
.HS 0100C3270D version/min version/access/EL/EPB
|
|
||||||
.DA 0 File Count
|
|
||||||
.DA 4 bitmap pointer (Block 2&3 are Volume directory)
|
|
||||||
RW.BLOCK2.TB .BS 2 Total Blocks
|
|
||||||
RW.BLOCK2.END .EQ *
|
|
||||||
*--------------------------------------
|
|
||||||
.INB usr/src/shared/x.printf.s
|
|
||||||
*--------------------------------------
|
|
||||||
RW.MSG .CZ "SuperExpander E, RAMWorks (I,II,III,z-Ram) Driver For A2osX\r"
|
|
||||||
RW.MSG.RAMDISOK .CZ "/RAM Device Disabled/Not Present.\r"
|
|
||||||
RW.MSG.RAMDISKO .CZ "Problem Disabling /RAM Device.\r"
|
|
||||||
RW.MSG.RAM3OK .CZ "/RAM3 Device Already Installed.\r"
|
|
||||||
RW.MSG.OK1 .CZ "%D KB Detected (%d Pages), %D KB (%d Pages) Available for RamDrive.\r"
|
|
||||||
RW.MSG.KO1 .CZ "Not Detected.\r"
|
|
||||||
RW.MSG.OK2 .CZ "RamWorks Driver Installed.\r"
|
|
||||||
RW.MSG.KO2 .CZ "RamWorks Driver Install Error.\r"
|
|
||||||
RW.MSG.OK3 .CZ "RamWorks Drive Formatted as /RAM3.\r"
|
|
||||||
RW.MSG.KO3 .CZ "RamWorks Drive Format Error.\r"
|
|
||||||
*--------------------------------------
|
|
||||||
* Driver for Ramworks in main LC
|
|
||||||
* $FF00 -> $FF9A (Inclusive)
|
|
||||||
* $FF58 MUST BE $60 (RTS)
|
|
||||||
* DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS
|
|
||||||
* reuses it after Block operation
|
|
||||||
* A1,A2 are used by Disk II Driver,
|
|
||||||
* so we use it safely as Tmp Ptr
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.A2L .EQ $3E
|
|
||||||
DRV.A2H .EQ $3F
|
|
||||||
DRV.COMMAND .EQ $42
|
|
||||||
DRV.BUFF .EQ $44
|
|
||||||
DRV.BLKNUM .EQ $46
|
|
||||||
*--------------------------------------
|
|
||||||
RWDRV.B.START .PH $FF00
|
|
||||||
RWDRV.START ldy DRV.COMMAND 0 = Status ?
|
|
||||||
beq RMDRV.CMDSTATUS
|
|
||||||
|
|
||||||
cpy #3
|
|
||||||
|
|
||||||
beq RWDRV.EXITOK 3 = Format : nothing to do, exit with no error
|
|
||||||
bcs RWDRV.IOERR > 3 = Invalid OP, IO error
|
|
||||||
|
|
||||||
ldx DRV.BLKNUM
|
|
||||||
cpx RWDRV.MAXLO+1
|
|
||||||
lda DRV.BLKNUM+1
|
|
||||||
sbc RWDRV.MAXHI+1
|
|
||||||
bcs RWDRV.IOERR DRV.BLKNUM >= RW.DRV.SIZE, IO error
|
|
||||||
|
|
||||||
bit IO.RD80STORE save 80 Store status
|
|
||||||
|
|
||||||
php Disable IRQ as no vector set in RW Banks
|
|
||||||
sei
|
|
||||||
|
|
||||||
sta IO.CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
|
|
||||||
|
|
||||||
txa Get Back DRV.BLKNUM
|
|
||||||
asl compute PAGE = blocknumLO *2
|
|
||||||
pha
|
|
||||||
lda DRV.BLKNUM+1 compute BANK = blocknumHI *2
|
|
||||||
rol
|
|
||||||
inc +1 for skipping Aux BANK 0
|
|
||||||
|
|
||||||
plx move page into X
|
|
||||||
beq RWDRV.GOAUX move from/to aux page0/1
|
|
||||||
|
|
||||||
cpx #$C0
|
|
||||||
bcs RWDRV.GOAUX move from/to aux LC
|
|
||||||
*--------------------------------------
|
|
||||||
* X=Page($02 -> $BF),A=Bank,Y=CMD
|
|
||||||
*--------------------------------------
|
|
||||||
RWDRV.IO1 sta RWBankSelect Select RAMWorks Bank
|
|
||||||
|
|
||||||
inx second 256 bytes first
|
|
||||||
stx DRV.A2H Use DRV.A1L/H for RAM PTR
|
|
||||||
stz DRV.A2L
|
|
||||||
inc DRV.BUFF+1
|
|
||||||
dey Y=CMD, zero if read
|
|
||||||
bne RWDRV.W non zero, go write
|
|
||||||
|
|
||||||
sta IO.SETREADAUX
|
|
||||||
ldx #DRV.A2L READ:copy from RAM to BUFF
|
|
||||||
lda #DRV.BUFF
|
|
||||||
bra RWDRV.RW
|
|
||||||
|
|
||||||
RWDRV.W sta IO.SETWRITEAUX
|
|
||||||
ldx #DRV.BUFF
|
|
||||||
lda #DRV.A2L WRITE:copy from BUFF to RAM
|
|
||||||
dey Make sure Y=0 for main loop below
|
|
||||||
|
|
||||||
RWDRV.RW stx RWDRV.RW.SRC+1
|
|
||||||
sta RWDRV.RW.DST+1
|
|
||||||
|
|
||||||
* clc 2 pages to copy
|
|
||||||
.HS B0 BCS
|
|
||||||
RWDRV.RW.LOOP sec
|
|
||||||
|
|
||||||
RWDRV.RW.SRC lda ($FF),y
|
|
||||||
RWDRV.RW.DST sta ($FF),y
|
|
||||||
iny
|
|
||||||
bne RWDRV.RW.SRC
|
|
||||||
|
|
||||||
dec DRV.BUFF+1
|
|
||||||
dec DRV.A2H
|
|
||||||
bcc RWDRV.RW.LOOP
|
|
||||||
|
|
||||||
RWDRV.EXIT stz RWBankSelect
|
|
||||||
sta IO.CLRREADAUX
|
|
||||||
sta IO.CLRWRITEAUX
|
|
||||||
|
|
||||||
plp restore IRQ
|
|
||||||
|
|
||||||
bpl RMDRV.CMDSTATUS
|
|
||||||
sta IO.SET80STORE
|
|
||||||
|
|
||||||
RMDRV.CMDSTATUS
|
|
||||||
RWDRV.MAXLO ldx #$FF return device block count in X,Y...
|
|
||||||
RWDRV.MAXHI ldy #$FF
|
|
||||||
RWDRV.EXITOK lda #0 make A=0
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
RWDRV.IOERR lda #MLI.E.IO Carry already set
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* X=Page(0/1 or LC),A=Bank
|
|
||||||
*--------------------------------------
|
|
||||||
RWDRV.GOAUX pha save BANK
|
|
||||||
sta IO.SETWRITEAUX
|
|
||||||
|
|
||||||
ldy #RWDRVX.XM.SIZE Backup begining of $300 to generate move code
|
|
||||||
|
|
||||||
.1 lda RWDRV.XM.RUN-1,y
|
|
||||||
sta RWDRVX.XM.SAVE-1,y
|
|
||||||
dey
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
pla restore BANK
|
|
||||||
|
|
||||||
sta IO.SETREADAUX
|
|
||||||
jsr RWDRVX.START Setup Code in main mem at $300 for data move
|
|
||||||
* returns : CC=WRITE, CS=READ
|
|
||||||
sta IO.CLRREADAUX IO.CLRWRITEAUX already triggered by code copy
|
|
||||||
jsr RWDRV.XM.RUN Now execute generated code in main memory
|
|
||||||
|
|
||||||
sta IO.SETREADAUX
|
|
||||||
jmp RWDRVX.RESTORE
|
|
||||||
|
|
||||||
RWDRV.END .EP
|
|
||||||
RWDRV.B.END
|
|
||||||
.LIST ON
|
|
||||||
RWDRV.SIZE .EQ RWDRV.B.END-RWDRV.B.START
|
|
||||||
.LIST OFF
|
|
||||||
*--------------------------------------
|
|
||||||
* Driver for Ramworks in aux memory
|
|
||||||
* $0200 -> $02FF TMP buffer for PAGE copy
|
|
||||||
* $0300 -> $03FD (Inclusive)
|
|
||||||
* do not trash $03FE-$03FF (IRQ Vector)
|
|
||||||
* X=Page(0/1 or LC),A=Bank
|
|
||||||
*--------------------------------------
|
|
||||||
RMDRVX.TMP .EQ $200
|
|
||||||
RWDRV.XM.RUN .EQ $300
|
|
||||||
*--------------------------------------
|
|
||||||
RWDRVX.B.START .PH $0300
|
|
||||||
RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK
|
|
||||||
|
|
||||||
lda DRV.COMMAND DRV.COMMAND: 1=READ,2=WRITE
|
|
||||||
lsr
|
|
||||||
php
|
|
||||||
|
|
||||||
ldy #IO.RRAMWRAMBNK1
|
|
||||||
|
|
||||||
txa
|
|
||||||
beq .1 page 0/1, no need to check BANK
|
|
||||||
|
|
||||||
cmp #$D0 $C0 <= PAGE < $D0 ?
|
|
||||||
bcs .1 no, store in BNK1
|
|
||||||
|
|
||||||
ora #$10 Remap $C0 page to $D0 BNK2
|
|
||||||
|
|
||||||
ldy #IO.RRAMWRAMBNK2
|
|
||||||
|
|
||||||
.1 sty RWDRVX.XM.RWLC+1 Save to select proper RW bank later
|
|
||||||
|
|
||||||
ldy DRV.BUFF
|
|
||||||
ldx DRV.BUFF+1
|
|
||||||
|
|
||||||
plp
|
|
||||||
bcc .2 CC=WRITE, CS=READ
|
|
||||||
|
|
||||||
stz RWDRVX.XM.SRC+1 READ from src LO = 0
|
|
||||||
sta RWDRVX.XM.SRC+2 READ from src HI = PAGE
|
|
||||||
|
|
||||||
sty RWDRVX.XM.DST+1 WRITE to DRV.BUFF
|
|
||||||
stx RWDRVX.XM.DST+2
|
|
||||||
bra .3
|
|
||||||
|
|
||||||
.2 sty RWDRVX.XM.SRC+1 READ from DRV.BUFF
|
|
||||||
stx RWDRVX.XM.SRC+2
|
|
||||||
|
|
||||||
stz RWDRVX.XM.DST+1 WRITE to dst LO = 0
|
|
||||||
sta RWDRVX.XM.DST+2 WRITE to dst HI = PAGE
|
|
||||||
|
|
||||||
.3 sta IO.CLRWRITEAUX
|
|
||||||
|
|
||||||
ldy #RWDRVX.XM.SIZE
|
|
||||||
|
|
||||||
.4 lda RWDRVX.XM.START-1,y
|
|
||||||
sta RWDRV.XM.RUN-1,y
|
|
||||||
dey
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* Called form Main LC after RWDRVX.XM execution
|
|
||||||
*--------------------------------------
|
|
||||||
RWDRVX.RESTORE ldy #RWDRVX.XM.SIZE Now, restore begining of $300
|
|
||||||
|
|
||||||
.1 lda RWDRVX.XM.SAVE-1,y
|
|
||||||
sta RWDRV.XM.RUN-1,y
|
|
||||||
dey
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
jmp RWDRV.EXIT
|
|
||||||
*--------------------------------------
|
|
||||||
* LC Copy Code, moved from Aux to main $300
|
|
||||||
* $0200 -> $02FF TMP buffer for 2 steps move between LCs
|
|
||||||
* CC=WRITE :
|
|
||||||
* CS=READ :
|
|
||||||
*--------------------------------------
|
|
||||||
RWDRVX.XM.START ldy #2 2 pages to copy
|
|
||||||
|
|
||||||
RWDRVX.XM.COPY sta IO.CLRALTZP
|
|
||||||
|
|
||||||
jsr RWDRV.XM.RUN+RWDRVX.XM.SRCLC-RWDRVX.XM.START
|
|
||||||
sta $C000,x select proper Main/Aux ZP/LC
|
|
||||||
RWDRVX.XM.IO1 sta RWBankSelect
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
RWDRVX.XM.SRC lda $FFFF,x
|
|
||||||
sta RMDRVX.TMP,x
|
|
||||||
inx
|
|
||||||
bne RWDRVX.XM.SRC
|
|
||||||
|
|
||||||
sta IO.CLRALTZP
|
|
||||||
|
|
||||||
jsr RWDRV.XM.RUN+RWDRVX.XM.DSTLC-RWDRVX.XM.START
|
|
||||||
sta $C000,x select proper Main/Aux ZP/LC
|
|
||||||
RWDRVX.XM.IO2 sta RWBankSelect
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
RWDRVX.XM.2 lda RMDRVX.TMP,x
|
|
||||||
RWDRVX.XM.DST sta $FFFF,x
|
|
||||||
inx
|
|
||||||
bne RWDRVX.XM.2
|
|
||||||
|
|
||||||
inc RWDRV.XM.RUN+RWDRVX.XM.SRC+2-RWDRVX.XM.START
|
|
||||||
inc RWDRV.XM.RUN+RWDRVX.XM.DST+2-RWDRVX.XM.START
|
|
||||||
dey
|
|
||||||
bne RWDRVX.XM.COPY
|
|
||||||
|
|
||||||
sta IO.CLRALTZP
|
|
||||||
RWDRVX.XM.IO3 stz RWBankSelect
|
|
||||||
*--------------------------------------
|
|
||||||
RWDRVX.XM.MNLC bit IO.RRAMWRAMBNK1 ProDOS always uses LCBANK1
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
|
|
||||||
ldx #IO.CLRALTZP
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
RWDRVX.XM.SRCLC bcc RWDRVX.XM.MNLC CC=WRITE,CS=READ?
|
|
||||||
.HS 2C BIT ABS
|
|
||||||
RWDRVX.XM.DSTLC bcs RWDRVX.XM.MNLC CC=WRITE,CS=READ?
|
|
||||||
*--------------------------------------
|
|
||||||
RWDRVX.XM.RWLC bit $C000
|
|
||||||
|
|
||||||
RWDRVX.XM.BANK lda #$FF
|
|
||||||
|
|
||||||
ldx #IO.SETALTZP
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
.LIST ON
|
|
||||||
RWDRVX.XM.SIZE .EQ *-RWDRVX.XM.START
|
|
||||||
.LIST OFF
|
|
||||||
*--------------------------------------
|
|
||||||
RWDRVX.XM.SAVE .BS RWDRVX.XM.SIZE
|
|
||||||
*--------------------------------------
|
|
||||||
.EP
|
|
||||||
*--------------------------------------
|
|
||||||
RWDRVX.B.END .LIST ON
|
|
||||||
RWDRVX.SIZE .EQ RWDRVX.B.END-RWDRVX.B.START
|
|
||||||
.LIST OFF
|
|
||||||
*--------------------------------------
|
|
||||||
* CONTROL SECTION :
|
|
||||||
*--------------------------------------
|
|
||||||
.DO RWDRV.SIZE>$9B
|
|
||||||
ERROR:RWDRV.SIZE too big
|
|
||||||
.FIN
|
|
||||||
.DO RWDRVX.SIZE>$FE
|
|
||||||
ERROR:RWDRVX.SIZE too big
|
|
||||||
.FIN
|
|
||||||
.DO RWDRVX.XM.SIZE>$F0
|
|
||||||
ERROR:RWDRVX.XM.SIZE too big
|
|
||||||
.FIN
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE usr/src/sys/pm.ramworks.s
|
|
||||||
ASM
|
|
@ -1,410 +0,0 @@
|
|||||||
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 $D400->$DFFF
|
|
||||||
|
|
||||||
DRV.BLK.Slot0n .BS 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 n0
|
|
||||||
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
|
|
@ -1,465 +0,0 @@
|
|||||||
NEW
|
|
||||||
AUTO 3,1
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.ReadConf
|
|
||||||
jsr MLI
|
|
||||||
.DA #MLIGETPREFIX
|
|
||||||
.DA MLIGETPREFIX.P
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
ldy CONF.FILEPATH
|
|
||||||
|
|
||||||
.1 lda CONF.FILENAME,x
|
|
||||||
iny
|
|
||||||
sta CONF.FILEPATH,y
|
|
||||||
inx
|
|
||||||
cpx #CONF.FILENAME.L
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
sty CONF.FILEPATH
|
|
||||||
|
|
||||||
lda #CONF.FILEPATH
|
|
||||||
pha
|
|
||||||
lda /CONF.FILEPATH
|
|
||||||
pha
|
|
||||||
>LDYAI VEDRIVE.CONF
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr MLI
|
|
||||||
.DA #MLIOPEN
|
|
||||||
.DA MLIOPEN.P
|
|
||||||
bcc .10
|
|
||||||
|
|
||||||
>LDYAI VEDRIVE.CONFKO
|
|
||||||
jsr PrintFYA
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
.10 lda MLIOPEN.P+5
|
|
||||||
sta MLINEWLINE.P+1
|
|
||||||
sta MLIREAD.P+1
|
|
||||||
sta MLICLOSE.P+1
|
|
||||||
|
|
||||||
jsr MLI
|
|
||||||
.DA #MLINEWLINE
|
|
||||||
.DA MLINEWLINE.P
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
.2 jsr MLI
|
|
||||||
.DA #MLIREAD
|
|
||||||
.DA MLIREAD.P
|
|
||||||
bcs .8
|
|
||||||
|
|
||||||
ldx MLIREAD.P+6
|
|
||||||
stz CONF.LBUF,x
|
|
||||||
|
|
||||||
jsr VEDRIVE.CONF.L
|
|
||||||
bcc .2
|
|
||||||
|
|
||||||
>LDYAI VEDRIVE.CONFSYN
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
sec
|
|
||||||
bra .9
|
|
||||||
|
|
||||||
.8 cmp #MLI.E.EOF
|
|
||||||
sec
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
lda CONF.NIC
|
|
||||||
bmi .9
|
|
||||||
|
|
||||||
lda CONF.SLOT
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
lda CONF.SERVER
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
clc
|
|
||||||
|
|
||||||
.9 php
|
|
||||||
pha
|
|
||||||
jsr MLI
|
|
||||||
.DA #MLICLOSE
|
|
||||||
.DA MLICLOSE.P
|
|
||||||
pla
|
|
||||||
plp
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CONF.L >LDYAI CONF.LBUF
|
|
||||||
>STYA ZPPtr1
|
|
||||||
|
|
||||||
lda (ZPPtr1)
|
|
||||||
|
|
||||||
cmp #13 CR
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
cmp #'#' comment
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
>LDYAI CONF.KW
|
|
||||||
jsr VEDRIVE.CONF.KW
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
.1 jsr VEDRIVE.GetNextCharPtr1
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
cmp #32
|
|
||||||
beq .1
|
|
||||||
|
|
||||||
ldx idx
|
|
||||||
jmp (.5,x)
|
|
||||||
|
|
||||||
.5 .DA VEDRIVE.CONF.KW.NIC
|
|
||||||
.DA VEDRIVE.CONF.KW.SLOT
|
|
||||||
.DA VEDRIVE.CONF.KW.MAC
|
|
||||||
.DA VEDRIVE.CONF.KW.ADDRESS
|
|
||||||
.DA VEDRIVE.CONF.KW.MASK
|
|
||||||
.DA VEDRIVE.CONF.KW.GATEWAY
|
|
||||||
.DA VEDRIVE.CONF.KW.SERVER
|
|
||||||
.DA VEDRIVE.CONF.KW.PORT
|
|
||||||
.DA VEDRIVE.CONF.KW.SIZE1
|
|
||||||
.DA VEDRIVE.CONF.KW.SIZE2
|
|
||||||
|
|
||||||
.8 clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CONF.KW sty ZPPtr2
|
|
||||||
sta ZPPtr2+1
|
|
||||||
|
|
||||||
ldy #$ff
|
|
||||||
|
|
||||||
.1 iny
|
|
||||||
lda (ZPPtr1),y
|
|
||||||
cmp #13 CR
|
|
||||||
beq .2
|
|
||||||
|
|
||||||
cmp #32 SPACE
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
.2 sty len
|
|
||||||
|
|
||||||
stz idx
|
|
||||||
|
|
||||||
.3 lda len
|
|
||||||
cmp (ZPPtr2)
|
|
||||||
bne .6
|
|
||||||
|
|
||||||
tay
|
|
||||||
|
|
||||||
.4 lda (ZPPtr2),y
|
|
||||||
dey
|
|
||||||
cmp (ZPPtr1),y
|
|
||||||
bne .6
|
|
||||||
|
|
||||||
tya
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
lda ZPPtr1
|
|
||||||
clc
|
|
||||||
adc len
|
|
||||||
sta ZPPtr1
|
|
||||||
bcc .5
|
|
||||||
|
|
||||||
inc ZPPtr1+1
|
|
||||||
|
|
||||||
.5 clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.6 lda (ZPPtr2)
|
|
||||||
sec
|
|
||||||
adc ZPPtr2
|
|
||||||
sta ZPPtr2
|
|
||||||
bcc .7
|
|
||||||
|
|
||||||
inc ZPPtr2+1
|
|
||||||
|
|
||||||
.7 inc idx
|
|
||||||
inc idx
|
|
||||||
lda (ZPPtr2)
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CONF.KW.NIC
|
|
||||||
>LDYAI CONF.KW.NIC
|
|
||||||
jsr VEDRIVE.CONF.KW
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
lda idx
|
|
||||||
sta CONF.NIC
|
|
||||||
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CONF.KW.SLOT
|
|
||||||
lda (ZPPtr1)
|
|
||||||
cmp #'1'
|
|
||||||
bcc .9
|
|
||||||
|
|
||||||
cmp #'8'
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
and #$0F
|
|
||||||
sta CONF.SLOT
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CONF.KW.MAC
|
|
||||||
ldy #6
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
.1 jsr VEDRIVE.CONF.GetHexByte
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
sta CONF.SRCMAC,x
|
|
||||||
inx
|
|
||||||
dey
|
|
||||||
beq .9 CC
|
|
||||||
|
|
||||||
jsr VEDRIVE.GetNextCharPtr1
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
cmp #':'
|
|
||||||
sec
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
jsr VEDRIVE.GetNextCharPtr1
|
|
||||||
bcc .1
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CONF.KW.ADDRESS
|
|
||||||
ldx #CONF.ADDRESS-CONF.IPCFG
|
|
||||||
.HS 2C BIT ABS
|
|
||||||
VEDRIVE.CONF.KW.MASK
|
|
||||||
ldx #CONF.MASK-CONF.IPCFG
|
|
||||||
.HS 2C BIT ABS
|
|
||||||
VEDRIVE.CONF.KW.GATEWAY
|
|
||||||
ldx #CONF.GATEWAY-CONF.IPCFG
|
|
||||||
.HS 2C BIT ABS
|
|
||||||
VEDRIVE.CONF.KW.SERVER
|
|
||||||
ldx #CONF.SERVER-CONF.IPCFG
|
|
||||||
|
|
||||||
VEDRIVE.CONF.GetIPatX
|
|
||||||
jsr VEDRIVE.CONF.GetShort
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
ldy #4
|
|
||||||
|
|
||||||
.1 sta CONF.IPCFG,x
|
|
||||||
inx
|
|
||||||
dey
|
|
||||||
beq .9 CC
|
|
||||||
|
|
||||||
lda (ZPPtr1)
|
|
||||||
cmp #13
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
cmp #'.'
|
|
||||||
sec
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
jsr VEDRIVE.GetNextCharPtr1
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr VEDRIVE.CONF.GetShort
|
|
||||||
bcc .1
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CONF.KW.PORT
|
|
||||||
jsr VEDRIVE.CONF.GetInt
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
lda int
|
|
||||||
sta CONF.PORT+1
|
|
||||||
|
|
||||||
lda int+1
|
|
||||||
sta CONF.PORT
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CONF.KW.SIZE1
|
|
||||||
stz bD1Size
|
|
||||||
jsr VEDRIVE.CONF.GetInt
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
lda int
|
|
||||||
sta CONF.D1TOTALBLK
|
|
||||||
|
|
||||||
lda int+1
|
|
||||||
sta CONF.D1TOTALBLK+1
|
|
||||||
|
|
||||||
dec bD1Size
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CONF.KW.SIZE2
|
|
||||||
stz bD2Size
|
|
||||||
jsr VEDRIVE.CONF.GetInt
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
lda int
|
|
||||||
sta CONF.D2TOTALBLK
|
|
||||||
|
|
||||||
lda int+1
|
|
||||||
sta CONF.D2TOTALBLK+1
|
|
||||||
|
|
||||||
dec bD2Size
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CONF.GetHexByte
|
|
||||||
jsr VEDRIVE.GetCharPtr1
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr VEDRIVE.IsHexDigit
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
sta int
|
|
||||||
|
|
||||||
jsr VEDRIVE.GetNextCharPtr1
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr VEDRIVE.IsHexDigit
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
ora int
|
|
||||||
|
|
||||||
* clc
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CONF.GetShort
|
|
||||||
jsr VEDRIVE.CONF.GetInt
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
lda int+1
|
|
||||||
sec
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
lda int
|
|
||||||
clc
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CONF.GetInt
|
|
||||||
stz int
|
|
||||||
stz int+1
|
|
||||||
|
|
||||||
jsr VEDRIVE.GetCharPtr1
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr VEDRIVE.IsDigit
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
.1 pha
|
|
||||||
|
|
||||||
lda int+1
|
|
||||||
pha
|
|
||||||
lda int
|
|
||||||
pha
|
|
||||||
|
|
||||||
asl int
|
|
||||||
rol int+1 x2
|
|
||||||
asl int
|
|
||||||
rol int+1 x4
|
|
||||||
|
|
||||||
pla
|
|
||||||
clc
|
|
||||||
adc int
|
|
||||||
sta int
|
|
||||||
|
|
||||||
pla
|
|
||||||
adc int+1
|
|
||||||
sta int+1 x4+1 = x5
|
|
||||||
|
|
||||||
asl int
|
|
||||||
rol int+1 x10
|
|
||||||
|
|
||||||
pla
|
|
||||||
clc
|
|
||||||
adc int
|
|
||||||
sta int
|
|
||||||
bcc .2
|
|
||||||
|
|
||||||
inc int+1
|
|
||||||
|
|
||||||
.2 jsr VEDRIVE.GetNextCharPtr1
|
|
||||||
bcs .8
|
|
||||||
|
|
||||||
jsr VEDRIVE.IsDigit
|
|
||||||
bcc .1
|
|
||||||
|
|
||||||
.8 clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.GetNextCharPtr1
|
|
||||||
inc ZPPtr1
|
|
||||||
bne VEDRIVE.GetCharPtr1
|
|
||||||
|
|
||||||
inc ZPPtr1+1
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.GetCharPtr1
|
|
||||||
lda (ZPPtr1)
|
|
||||||
cmp #13
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
.8 clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.IsHexDigit
|
|
||||||
jsr VEDRIVE.IsDigit
|
|
||||||
bcc .8
|
|
||||||
|
|
||||||
cmp #'A'
|
|
||||||
bcc .9
|
|
||||||
|
|
||||||
cmp #'F'+1
|
|
||||||
bcc .1
|
|
||||||
|
|
||||||
cmp #'a'
|
|
||||||
bcc .9
|
|
||||||
|
|
||||||
cmp #'f'+1
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
eor #$20
|
|
||||||
|
|
||||||
.1
|
|
||||||
* clc
|
|
||||||
sbc #'A'-11 cc so A->10 (11-CC)
|
|
||||||
clc
|
|
||||||
.8 rts
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
.99 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.IsDigit cmp #'0'
|
|
||||||
bcc .9
|
|
||||||
|
|
||||||
cmp #'9'+1
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
and #$0F
|
|
||||||
* clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
.99 rts
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE usr/src/sys/pm.vedrive.s.cf
|
|
||||||
LOAD usr/src/sys/pm.vedrive.s
|
|
||||||
ASM
|
|
@ -1,445 +0,0 @@
|
|||||||
NEW
|
|
||||||
AUTO 3,1
|
|
||||||
*--------------------------------------
|
|
||||||
GS.Init lda CONF.SLOT
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
sta Slotn0
|
|
||||||
tax
|
|
||||||
|
|
||||||
lda #L91C96.0.TCR.FDSE+L91C96.0.TCR.FUDPLX+L91C96.0.TCR.PADEN+L91C96.0.TCR.TXENA
|
|
||||||
sta L91C96.0.TCR,x
|
|
||||||
lda /L91C96.0.TCR.FDSE+L91C96.0.TCR.FUDPLX+L91C96.0.TCR.PADEN+L91C96.0.TCR.TXENA
|
|
||||||
sta L91C96.0.TCR+1,x
|
|
||||||
lda #L91C96.0.RCR.NOCRC+L91C96.0.RCR.RXENA+L91C96.0.RCR.ALLMUL
|
|
||||||
sta L91C96.0.RCR,x
|
|
||||||
lda /L91C96.0.RCR.NOCRC+L91C96.0.RCR.RXENA+L91C96.0.RCR.ALLMUL
|
|
||||||
sta L91C96.0.RCR+1,x
|
|
||||||
|
|
||||||
lda #1
|
|
||||||
sta L91C96.BSR,x
|
|
||||||
|
|
||||||
lda #L91C96.1.CR.NOWAIT
|
|
||||||
sta L91C96.1.CR,x
|
|
||||||
lda /L91C96.1.CR.NOWAIT
|
|
||||||
sta L91C96.1.CR+1,x
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.2 lda CONF.SRCMAC,y
|
|
||||||
sta L91C96.1.IAR,x
|
|
||||||
inx
|
|
||||||
iny
|
|
||||||
cpy #6
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
.3 ldx Slotn0
|
|
||||||
|
|
||||||
lda #L91C96.1.CTR.DEFAULT+L91C96.1.CTR.AUTOREL
|
|
||||||
sta L91C96.1.CTR,x
|
|
||||||
lda /L91C96.1.CTR.DEFAULT+L91C96.1.CTR.AUTOREL
|
|
||||||
sta L91C96.1.CTR+1,x
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
GS.Read php
|
|
||||||
sei
|
|
||||||
|
|
||||||
ldx Slotn0
|
|
||||||
|
|
||||||
lda #2
|
|
||||||
sta L91C96.BSR,x
|
|
||||||
|
|
||||||
lda L91C96.2.IST,x
|
|
||||||
and #L91C96.2.IST.RCV
|
|
||||||
beq GS.READWRITE.9
|
|
||||||
|
|
||||||
.1 lda #L91C96.2.PTR.RCVD+L91C96.2.PTR.AUTOI+L91C96.2.PTR.READ
|
|
||||||
sta L91C96.2.PTR,x
|
|
||||||
lda /L91C96.2.PTR.RCVD+L91C96.2.PTR.AUTOI+L91C96.2.PTR.READ
|
|
||||||
sta L91C96.2.PTR+1,x
|
|
||||||
|
|
||||||
lda L91C96.2.DATA,x Get Frame Status Word (lo)
|
|
||||||
lda L91C96.2.DATA,x Get Frame Status Word (HI)
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl #$10 = odd?
|
|
||||||
asl if odd, CS
|
|
||||||
lda L91C96.2.DATA,x get lo byte count
|
|
||||||
sbc #5 compute Size
|
|
||||||
|
|
||||||
sta ZPBufCnt
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt
|
|
||||||
|
|
||||||
lda L91C96.2.DATA,x get hi byte count
|
|
||||||
sbc #0
|
|
||||||
|
|
||||||
sta ZPBufCnt+1
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt+1
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.2 inc ZPnCnt
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
inc ZPnCnt+1
|
|
||||||
beq .4
|
|
||||||
|
|
||||||
.3 lda L91C96.2.DATA,x
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
iny
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
inc ZPBufPtr+1
|
|
||||||
bra .2
|
|
||||||
|
|
||||||
.4 lda #L91C96.2.MMUCR.REMREL
|
|
||||||
sta L91C96.2.MMUCR,x
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
GS.READWRITE.9 plp
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
GS.Write php
|
|
||||||
sei
|
|
||||||
|
|
||||||
ldx Slotn0
|
|
||||||
|
|
||||||
lda #2
|
|
||||||
sta L91C96.BSR,x
|
|
||||||
|
|
||||||
lda ZPBufCnt
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt
|
|
||||||
eor #$ff
|
|
||||||
clc
|
|
||||||
adc #6 3 WORDs more Status, len & Control
|
|
||||||
|
|
||||||
bne .10
|
|
||||||
|
|
||||||
clc LO byte is 0, no need for an extra empty page
|
|
||||||
|
|
||||||
.10 lda ZPBufCnt+1
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt+1
|
|
||||||
eor #$ff
|
|
||||||
|
|
||||||
adc #0
|
|
||||||
|
|
||||||
.1 ora #L91C96.2.MMUCR.ALLOC
|
|
||||||
sta L91C96.2.MMUCR,x
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.2 lda L91C96.2.IST,x
|
|
||||||
and #L91C96.2.IST.ALLOC
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
dey
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
bra GS.READWRITE.9
|
|
||||||
|
|
||||||
.3 lda L91C96.2.AAR,x
|
|
||||||
sta L91C96.2.PNR,x
|
|
||||||
lda #L91C96.2.PTR.AUTOI
|
|
||||||
sta L91C96.2.PTR,x
|
|
||||||
lda /L91C96.2.PTR.AUTOI
|
|
||||||
sta L91C96.2.PTR+1,x
|
|
||||||
|
|
||||||
ldy #S.ETH.SRCMAC+5 Add Src MAC Address
|
|
||||||
ldx #5
|
|
||||||
|
|
||||||
.4 lda CONF.SRCMAC,x
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .4
|
|
||||||
|
|
||||||
ldx Slotn0
|
|
||||||
|
|
||||||
stz L91C96.2.DATA,x write fake status word
|
|
||||||
stz L91C96.2.DATA,x
|
|
||||||
|
|
||||||
lda ZPBufCnt
|
|
||||||
pha
|
|
||||||
eor #$01
|
|
||||||
lsr
|
|
||||||
pla
|
|
||||||
|
|
||||||
adc #$05 add 5 if odd, 6 if even
|
|
||||||
sta L91C96.2.DATA,x
|
|
||||||
|
|
||||||
lda ZPBufCnt+1
|
|
||||||
adc #$00
|
|
||||||
sta L91C96.2.DATA,x
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.5 inc ZPnCnt
|
|
||||||
bne .51
|
|
||||||
|
|
||||||
inc ZPnCnt+1
|
|
||||||
beq .70
|
|
||||||
|
|
||||||
.51 lda (ZPBufPtr),y
|
|
||||||
iny
|
|
||||||
bne .6
|
|
||||||
|
|
||||||
inc ZPBufPtr+1
|
|
||||||
|
|
||||||
.6 inc ZPnCnt
|
|
||||||
bne .61
|
|
||||||
|
|
||||||
inc ZPnCnt+1
|
|
||||||
beq .71
|
|
||||||
|
|
||||||
.61 sta L91C96.2.DATA,x
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
sta L91C96.2.DATA,x
|
|
||||||
iny
|
|
||||||
bne .5
|
|
||||||
|
|
||||||
inc ZPBufPtr+1
|
|
||||||
bra .5
|
|
||||||
|
|
||||||
.70 lda #0
|
|
||||||
sta L91C96.2.DATA,x
|
|
||||||
sta L91C96.2.DATA,x
|
|
||||||
bra .8
|
|
||||||
|
|
||||||
.71 sta L91C96.2.DATA,x
|
|
||||||
lda #%00100000 signal an extra (odd) byte
|
|
||||||
sta L91C96.2.DATA,x
|
|
||||||
|
|
||||||
.8 lda #L91C96.2.MMUCR.NQPKT
|
|
||||||
sta L91C96.2.MMUCR,x
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
GS.Name .PS "LanCEgs"
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.GS .PH DRV.NIC.START
|
|
||||||
|
|
||||||
jmp DRV.GS.SendARP
|
|
||||||
jmp DRV.GS.SendUDP
|
|
||||||
|
|
||||||
DRV.GS.Rcvd php
|
|
||||||
sei
|
|
||||||
|
|
||||||
ldx DRV.BLK.Slotn0
|
|
||||||
|
|
||||||
lda #2
|
|
||||||
sta L91C96.BSR,x
|
|
||||||
|
|
||||||
lda L91C96.2.IST,x
|
|
||||||
and #L91C96.2.IST.RCV
|
|
||||||
beq DRV.GS.9
|
|
||||||
|
|
||||||
.1 lda #L91C96.2.PTR.RCVD+L91C96.2.PTR.AUTOI+L91C96.2.PTR.READ
|
|
||||||
sta L91C96.2.PTR,x
|
|
||||||
lda /L91C96.2.PTR.RCVD+L91C96.2.PTR.AUTOI+L91C96.2.PTR.READ
|
|
||||||
sta L91C96.2.PTR+1,x
|
|
||||||
|
|
||||||
lda L91C96.2.DATA,x Get Frame Status Word (lo)
|
|
||||||
lda L91C96.2.DATA,x Get Frame Status Word (HI)
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl #$10 = odd?
|
|
||||||
asl if odd, CS
|
|
||||||
lda L91C96.2.DATA,x get lo byte count
|
|
||||||
sbc #5 compute Size
|
|
||||||
|
|
||||||
sta DRV.FrameSize
|
|
||||||
eor #$ff
|
|
||||||
sta DRV.nCnt
|
|
||||||
|
|
||||||
lda L91C96.2.DATA,x get hi byte count
|
|
||||||
sbc #0
|
|
||||||
|
|
||||||
sta DRV.FrameSize+1
|
|
||||||
eor #$ff
|
|
||||||
sta DRV.nCnt+1
|
|
||||||
|
|
||||||
>LDYAI DRV.InBuf
|
|
||||||
>STYA DRV.A1L
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.2 inc DRV.nCnt
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
inc DRV.nCnt+1
|
|
||||||
beq .4
|
|
||||||
|
|
||||||
.3 lda L91C96.2.DATA,x
|
|
||||||
sta (DRV.A1L),y
|
|
||||||
iny
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
inc DRV.A1L+1
|
|
||||||
bra .2
|
|
||||||
|
|
||||||
.4 lda #L91C96.2.MMUCR.REMREL
|
|
||||||
sta L91C96.2.MMUCR,x
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.GS.9 plp
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.GS.SendARP >LDYAI S.ARP
|
|
||||||
>STYA DRV.FrameSize
|
|
||||||
>LDYAI DRV.ARPBuf
|
|
||||||
bra DRV.GS.Send
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.GS.SendUDP >STYA DRV.FrameSize
|
|
||||||
|
|
||||||
jsr DRV.BLK.IPUDPCheksum
|
|
||||||
|
|
||||||
>LDYAI DRV.UDPBuf
|
|
||||||
|
|
||||||
DRV.GS.Send >STYA DRV.A1L
|
|
||||||
|
|
||||||
php
|
|
||||||
sei
|
|
||||||
|
|
||||||
ldx DRV.BLK.Slotn0
|
|
||||||
|
|
||||||
lda #2
|
|
||||||
sta L91C96.BSR,x
|
|
||||||
|
|
||||||
lda DRV.FrameSize
|
|
||||||
eor #$ff
|
|
||||||
sta DRV.nCnt
|
|
||||||
eor #$ff
|
|
||||||
clc
|
|
||||||
adc #6 3 WORDs more Status, len & Control
|
|
||||||
|
|
||||||
bne .10
|
|
||||||
|
|
||||||
clc LO byte is 0, no need for an extra empty page
|
|
||||||
|
|
||||||
.10 lda DRV.FrameSize+1
|
|
||||||
eor #$ff
|
|
||||||
sta DRV.nCnt+1
|
|
||||||
eor #$ff
|
|
||||||
|
|
||||||
adc #0
|
|
||||||
|
|
||||||
.1 ora #L91C96.2.MMUCR.ALLOC
|
|
||||||
sta L91C96.2.MMUCR,x
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.2 lda L91C96.2.IST,x
|
|
||||||
and #L91C96.2.IST.ALLOC
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
dey
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
bra DRV.GS.9
|
|
||||||
|
|
||||||
.3 lda L91C96.2.AAR,x
|
|
||||||
sta L91C96.2.PNR,x
|
|
||||||
lda #L91C96.2.PTR.AUTOI
|
|
||||||
sta L91C96.2.PTR,x
|
|
||||||
lda /L91C96.2.PTR.AUTOI
|
|
||||||
sta L91C96.2.PTR+1,x
|
|
||||||
|
|
||||||
* ldy #S.ETH.SRCMAC+5 Add Src MAC Address
|
|
||||||
* ldx #5
|
|
||||||
|
|
||||||
*.4 lda CONF.SRCMAC,x
|
|
||||||
* sta (DRV.A1L),y
|
|
||||||
* dey
|
|
||||||
* dex
|
|
||||||
* bpl .4
|
|
||||||
|
|
||||||
ldx DRV.BLK.Slotn0
|
|
||||||
|
|
||||||
stz L91C96.2.DATA,x write fake status word
|
|
||||||
stz L91C96.2.DATA,x
|
|
||||||
|
|
||||||
lda DRV.FrameSize
|
|
||||||
pha
|
|
||||||
eor #$01
|
|
||||||
lsr
|
|
||||||
pla
|
|
||||||
|
|
||||||
adc #$05 add 5 if odd, 6 if even
|
|
||||||
sta L91C96.2.DATA,x
|
|
||||||
|
|
||||||
lda DRV.FrameSize+1
|
|
||||||
adc #$00
|
|
||||||
sta L91C96.2.DATA,x
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.5 inc DRV.nCnt
|
|
||||||
bne .51
|
|
||||||
|
|
||||||
inc DRV.nCnt+1
|
|
||||||
beq .70
|
|
||||||
|
|
||||||
.51 lda (DRV.A1L),y
|
|
||||||
iny
|
|
||||||
bne .6
|
|
||||||
|
|
||||||
inc DRV.A1L+1
|
|
||||||
|
|
||||||
.6 inc DRV.nCnt
|
|
||||||
bne .61
|
|
||||||
|
|
||||||
inc DRV.nCnt+1
|
|
||||||
beq .71
|
|
||||||
|
|
||||||
.61 sta L91C96.2.DATA,x
|
|
||||||
lda (DRV.A1L),y
|
|
||||||
sta L91C96.2.DATA,x
|
|
||||||
iny
|
|
||||||
bne .5
|
|
||||||
|
|
||||||
inc DRV.A1L+1
|
|
||||||
bra .5
|
|
||||||
|
|
||||||
.70 lda #0
|
|
||||||
sta L91C96.2.DATA,x
|
|
||||||
sta L91C96.2.DATA,x
|
|
||||||
bra .8
|
|
||||||
|
|
||||||
.71 sta L91C96.2.DATA,x
|
|
||||||
lda #%00100000 signal an extra (odd) byte
|
|
||||||
sta L91C96.2.DATA,x
|
|
||||||
|
|
||||||
.8 lda #L91C96.2.MMUCR.NQPKT
|
|
||||||
sta L91C96.2.MMUCR,x
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
.EP
|
|
||||||
|
|
||||||
.LIST ON
|
|
||||||
DRV.GS.SIZE .EQ *-DRV.GS
|
|
||||||
.LIST OFF
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE usr/src/sys/pm.vedrive.s.gs
|
|
||||||
LOAD usr/src/sys/pm.vedrive.s
|
|
||||||
ASM
|
|
@ -1,536 +0,0 @@
|
|||||||
NEW
|
|
||||||
AUTO 3,1
|
|
||||||
*--------------------------------------
|
|
||||||
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
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.IPInit ldx #3
|
|
||||||
|
|
||||||
.1 lda CONF.ADDRESS,x
|
|
||||||
|
|
||||||
sta ARP.REQ.SPA,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
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.DHCPReq >LDYAI DHCP.DISC
|
|
||||||
>STYA ZPBufPtr
|
|
||||||
>LDYAI DHCP.DISC.LEN
|
|
||||||
>STYA ZPBufCnt
|
|
||||||
jsr VEDRIVE.SendUDP
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr VEDRIVE.InitTimer
|
|
||||||
|
|
||||||
.2 jsr VEDRIVE.READ
|
|
||||||
bcc .3
|
|
||||||
|
|
||||||
jsr VEDRIVE.Wait
|
|
||||||
bcc .2
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
.3 jsr VEDRIVE.CheckDHCPOffer
|
|
||||||
bcs .2
|
|
||||||
|
|
||||||
>LDYAI DHCP.REQ
|
|
||||||
>STYA ZPBufPtr
|
|
||||||
>LDYAI DHCP.REQ.LEN
|
|
||||||
>STYA ZPBufCnt
|
|
||||||
jsr VEDRIVE.SendUDP
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr VEDRIVE.InitTimer
|
|
||||||
|
|
||||||
.4 jsr VEDRIVE.READ
|
|
||||||
bcc .5
|
|
||||||
|
|
||||||
jsr VEDRIVE.Wait
|
|
||||||
bcc .4
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
.5 >LDYAI FRAMEBUF
|
|
||||||
>STYA ZPBufPtr
|
|
||||||
|
|
||||||
jsr VEDRIVE.CheckDHCPFrame
|
|
||||||
bcs .4
|
|
||||||
|
|
||||||
eor #S.DHCP.OPTIONS.DHCPAck
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
* clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.IPChecksum
|
|
||||||
ldy #S.IP.TOTAL.LENGTH+1
|
|
||||||
lda ZPBufCnt
|
|
||||||
sec
|
|
||||||
sbc #S.ETH.EII
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
dey
|
|
||||||
lda ZPBufCnt+1
|
|
||||||
sbc /S.ETH.EII
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
lda #0
|
|
||||||
ldy #S.IP.HDR.CHECKSUM
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
iny
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
|
|
||||||
stz ZPCheckSum RESET IP CHECKSUM
|
|
||||||
stz ZPCheckSum+1
|
|
||||||
|
|
||||||
clc
|
|
||||||
|
|
||||||
ldy #S.IP.V.IHL
|
|
||||||
|
|
||||||
ldx #10 10 words for IP Header
|
|
||||||
|
|
||||||
.2 lda (ZPBufPtr),y
|
|
||||||
adc ZPCheckSum
|
|
||||||
sta ZPCheckSum
|
|
||||||
iny
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
adc ZPCheckSum+1
|
|
||||||
sta ZPCheckSum+1
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
ldy #S.IP.HDR.CHECKSUM
|
|
||||||
lda ZPCheckSum
|
|
||||||
adc #0
|
|
||||||
eor #$FF
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
iny
|
|
||||||
lda ZPCheckSum+1
|
|
||||||
adc #0
|
|
||||||
eor #$FF
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.UDPChecksum
|
|
||||||
clc
|
|
||||||
|
|
||||||
ldy #S.UDP.LENGTH+1
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
adc #S.IP.PROTOCOL.UDP
|
|
||||||
sta ZPCheckSum+1
|
|
||||||
|
|
||||||
dey
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
adc /S.IP.PROTOCOL.UDP (all zero)
|
|
||||||
sta ZPCheckSum
|
|
||||||
|
|
||||||
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
|
|
||||||
eor #$ff
|
|
||||||
tax
|
|
||||||
|
|
||||||
dey
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
eor #$ff
|
|
||||||
ldy #S.UDP.CHECKSUM
|
|
||||||
*--------------------------------------
|
|
||||||
* X,A = !ByteCount, Y = Offset in Frame
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.ComputeChecksum
|
|
||||||
phy Save Offset
|
|
||||||
pha Save !ByteCount.HI
|
|
||||||
|
|
||||||
lda #0 Reset Checksum
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
iny
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
|
|
||||||
>LDYA ZPBufPtr
|
|
||||||
>STYA ZPPtr1
|
|
||||||
|
|
||||||
ldy #S.IP
|
|
||||||
|
|
||||||
.1 inx
|
|
||||||
bne .11
|
|
||||||
|
|
||||||
pla
|
|
||||||
inc
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
pha
|
|
||||||
.11 lda (ZPPtr1),y
|
|
||||||
adc ZPCheckSum
|
|
||||||
sta ZPCheckSum
|
|
||||||
|
|
||||||
iny
|
|
||||||
bne .20
|
|
||||||
|
|
||||||
inc ZPPtr1+1
|
|
||||||
.20 inx
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
pla
|
|
||||||
inc
|
|
||||||
beq .7
|
|
||||||
|
|
||||||
pha
|
|
||||||
|
|
||||||
.2 lda (ZPPtr1),y
|
|
||||||
|
|
||||||
adc ZPCheckSum+1
|
|
||||||
sta ZPCheckSum+1
|
|
||||||
iny
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
inc ZPPtr1+1
|
|
||||||
bra .1
|
|
||||||
|
|
||||||
.7 adc ZPCheckSum+1 A=0 from beq .7
|
|
||||||
sta ZPCheckSum+1
|
|
||||||
|
|
||||||
.8 ply
|
|
||||||
lda ZPCheckSum
|
|
||||||
adc #0 Don't forget to add last carry!!!
|
|
||||||
eor #$FF
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
iny
|
|
||||||
lda ZPCheckSum+1
|
|
||||||
adc #0 Don't forget to add last carry!!!
|
|
||||||
eor #$FF
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CheckDHCPOffer
|
|
||||||
>LDYAI FRAMEBUF
|
|
||||||
>STYA ZPBufPtr
|
|
||||||
|
|
||||||
jsr VEDRIVE.CheckDHCPFrame
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
cmp #S.DHCP.OPTIONS.DHCPOffer
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
ldy #S.DHCP.YIADDR+3
|
|
||||||
ldx #3
|
|
||||||
|
|
||||||
.2 lda (ZPBufPtr),y
|
|
||||||
sta DHCP.REQ.OPT.REQIP,x
|
|
||||||
sta CONF.ADDRESS,x
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
ldy #S.DHCP.SIADDR+3
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
ldy #S.IP.SRC+3
|
|
||||||
|
|
||||||
.3 ldx #3
|
|
||||||
|
|
||||||
.4 lda (ZPBufPtr),y
|
|
||||||
sta DHCP.REQ.OPT.SVRIP,x
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .4
|
|
||||||
|
|
||||||
.5 inc ZPPtr1 skip Option 53 (DHCPOffer:530102)
|
|
||||||
bne .6
|
|
||||||
|
|
||||||
inc ZPPtr1+1
|
|
||||||
|
|
||||||
.6 lda (ZPPtr1)
|
|
||||||
sec
|
|
||||||
adc ZPPtr1 add option len + 1
|
|
||||||
sta ZPPtr1
|
|
||||||
bcc .7
|
|
||||||
|
|
||||||
inc ZPPtr1+1
|
|
||||||
|
|
||||||
.7 lda (ZPPtr1)
|
|
||||||
cmp #S.DHCP.OPTIONS.END
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
jsr VEDRIVE.GetDHCPOption
|
|
||||||
bra .5
|
|
||||||
|
|
||||||
.8 clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CheckDHCPFrame
|
|
||||||
jsr VEDRIVE.CheckUDPFrame
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
ldy #S.DHCP.XID+3
|
|
||||||
ldx #3
|
|
||||||
|
|
||||||
.1 lda (ZPBufPtr),y
|
|
||||||
cmp DHCP.DISC.XID,x same XID ?
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
lda ZPBufPtr
|
|
||||||
clc
|
|
||||||
adc #S.DHCP.OPTIONS
|
|
||||||
sta ZPPtr1
|
|
||||||
|
|
||||||
lda ZPBufPtr+1
|
|
||||||
adc /S.DHCP.OPTIONS
|
|
||||||
sta ZPPtr1+1
|
|
||||||
|
|
||||||
lda (ZPPtr1)
|
|
||||||
cmp #S.DHCP.OPTIONS.MSGTYPE
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
ldy #2
|
|
||||||
lda (ZPPtr1),y
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.GetDHCPOption
|
|
||||||
cmp #S.DHCP.OPTIONS.MASK
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
ldx #CONF.MASK-CONF.IPCFG
|
|
||||||
bra .5
|
|
||||||
|
|
||||||
.1 cmp #S.DHCP.OPTIONS.GW
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
ldx #CONF.GATEWAY-CONF.IPCFG
|
|
||||||
bra .5
|
|
||||||
|
|
||||||
.2 cmp #S.DHCP.OPTIONS.SRVID
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
ldy #5
|
|
||||||
ldx #3
|
|
||||||
|
|
||||||
.3 lda (ZPPtr1),y
|
|
||||||
sta DHCP.REQ.OPT.SVRIP,x
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .3
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
.5 ldy #2 Skip Byte count
|
|
||||||
lda #4
|
|
||||||
|
|
||||||
.6 pha
|
|
||||||
lda (ZPPtr1),y
|
|
||||||
sta CONF.IPCFG,x
|
|
||||||
iny
|
|
||||||
inx
|
|
||||||
pla
|
|
||||||
dec
|
|
||||||
bne .6
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CheckADTRep
|
|
||||||
jsr VEDRIVE.CheckUDPFrame
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
ldy #S.TCPUDP.DSTPORT
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
cmp #$C0
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CheckUDPFrame
|
|
||||||
ldy #S.ETH.EII.TYPE
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
cmp /S.ETH.EII.TYPE.IP
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
cmp #S.ETH.EII.TYPE.IP
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
ldy #S.IP.PROTOCOL
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
cmp #S.IP.PROTOCOL.UDP
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.ARPReq >LDYAI ARP.REQ
|
|
||||||
>STYA ZPBufPtr
|
|
||||||
>LDYAI S.ARP
|
|
||||||
>STYA ZPBufCnt
|
|
||||||
jsr VEDRIVE.SendARP
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr VEDRIVE.InitTimer
|
|
||||||
|
|
||||||
stz bRemoteMac
|
|
||||||
|
|
||||||
.2 jsr VEDRIVE.READ
|
|
||||||
bcc .3
|
|
||||||
|
|
||||||
jsr VEDRIVE.Wait
|
|
||||||
bcc .2
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
.3 jsr VEDRIVE.CheckARPFrame
|
|
||||||
|
|
||||||
bit bRemoteMac
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.CheckARPFrame
|
|
||||||
ldy #S.ETH.EII.TYPE
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
cmp /S.ETH.EII.TYPE.ARP
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
cmp #S.ETH.EII.TYPE.ARP
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
ldy #S.ARP.OPERATION+1
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
cmp #S.ARP.OPERATION.REP
|
|
||||||
bne .5
|
|
||||||
*--------------------------------------
|
|
||||||
ldy #S.ARP.SPA+3
|
|
||||||
ldx #3
|
|
||||||
|
|
||||||
.1 lda (ZPBufPtr),y
|
|
||||||
cmp CONF.SERVER,x
|
|
||||||
bne .8
|
|
||||||
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
ldy #S.ARP.SHA+5
|
|
||||||
ldx #5
|
|
||||||
|
|
||||||
.2 lda (ZPBufPtr),y
|
|
||||||
sta ADT.REQ.DSTMAC,x
|
|
||||||
sta ARP.REP.DSTMAC,x
|
|
||||||
sta ARP.REP.THA,x
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
dec bRemoteMac
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
.5 cmp #S.ARP.OPERATION.REQ
|
|
||||||
bne .8
|
|
||||||
|
|
||||||
ldy #S.ARP.TPA+3
|
|
||||||
ldx #3
|
|
||||||
|
|
||||||
.6 lda (ZPBufPtr),y
|
|
||||||
cmp CONF.ADDRESS,x
|
|
||||||
bne .8
|
|
||||||
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .6
|
|
||||||
|
|
||||||
ldy #S.ARP.SHA+9
|
|
||||||
ldx #9
|
|
||||||
|
|
||||||
.7 lda (ZPBufPtr),y
|
|
||||||
sta ARP.REP.THA,x
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .7
|
|
||||||
|
|
||||||
>LDYAI ARP.REP
|
|
||||||
>STYA ZPBufPtr
|
|
||||||
>LDYAI S.ARP
|
|
||||||
>STYA ZPBufCnt
|
|
||||||
jsr VEDRIVE.SendARP
|
|
||||||
|
|
||||||
.8 clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE usr/src/sys/pm.vedrive.s.ip
|
|
||||||
LOAD usr/src/sys/pm.vedrive.s
|
|
||||||
ASM
|
|
@ -1,389 +0,0 @@
|
|||||||
NEW
|
|
||||||
AUTO 3,1
|
|
||||||
*--------------------------------------
|
|
||||||
U1.Init lda CONF.SLOT
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
sta Slotn0
|
|
||||||
tax
|
|
||||||
|
|
||||||
lda /PP.ID
|
|
||||||
sta PacketPagePTR+1,x
|
|
||||||
lda #PP.ID
|
|
||||||
sta PacketPagePTR,x
|
|
||||||
|
|
||||||
lda PacketPageDATA+1,x
|
|
||||||
cmp /CS8900A.DEVID
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
lda PacketPageDATA,x
|
|
||||||
cmp #CS8900A.DEVID
|
|
||||||
beq .1
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
.1 lda CONF.SLOT
|
|
||||||
pha
|
|
||||||
|
|
||||||
lda /PP.REVISION Get Revision# of ths chip...
|
|
||||||
sta PacketPagePTR+1,x
|
|
||||||
lda #PP.REVISION
|
|
||||||
sta PacketPagePTR,x
|
|
||||||
|
|
||||||
lda PacketPageDATA+1,x
|
|
||||||
pha
|
|
||||||
lda PacketPageDATA,x
|
|
||||||
pha
|
|
||||||
|
|
||||||
lda #U1.Name
|
|
||||||
pha
|
|
||||||
lda /U1.Name
|
|
||||||
pha
|
|
||||||
|
|
||||||
>LDYAI VEDRIVE.NICOK
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
ldx Slotn0
|
|
||||||
|
|
||||||
lda /PP.RxCTL
|
|
||||||
sta PacketPagePTR+1,x
|
|
||||||
lda #PP.RxCTL
|
|
||||||
sta PacketPagePTR,x
|
|
||||||
lda /PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA+PP.RxCTL.RuntA
|
|
||||||
sta PacketPageDATA+1,x
|
|
||||||
lda #PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA+PP.RxCTL.RuntA
|
|
||||||
sta PacketPageDATA,x
|
|
||||||
|
|
||||||
lda /PP.MAC
|
|
||||||
sta PacketPagePTR+1,x
|
|
||||||
lda #PP.MAC
|
|
||||||
sta PacketPagePTR,x
|
|
||||||
|
|
||||||
lda CONF.SRCMAC+1
|
|
||||||
sta PacketPageDATA+1,x
|
|
||||||
lda CONF.SRCMAC+0
|
|
||||||
sta PacketPageDATA,x
|
|
||||||
|
|
||||||
lda /PP.MAC+2
|
|
||||||
sta PacketPagePTR+1,x
|
|
||||||
lda #PP.MAC+2
|
|
||||||
sta PacketPagePTR,x
|
|
||||||
|
|
||||||
lda CONF.SRCMAC+3
|
|
||||||
sta PacketPageDATA+1,x
|
|
||||||
lda CONF.SRCMAC+2
|
|
||||||
sta PacketPageDATA,x
|
|
||||||
|
|
||||||
lda /PP.MAC+4
|
|
||||||
sta PacketPagePTR+1,x
|
|
||||||
lda #PP.MAC+4
|
|
||||||
sta PacketPagePTR,x
|
|
||||||
|
|
||||||
lda CONF.SRCMAC+5
|
|
||||||
sta PacketPageDATA+1,x
|
|
||||||
lda CONF.SRCMAC+4
|
|
||||||
sta PacketPageDATA,x
|
|
||||||
|
|
||||||
lda /PP.LineCTL
|
|
||||||
sta PacketPagePTR+1,x
|
|
||||||
lda #PP.LineCTL
|
|
||||||
sta PacketPagePTR,x
|
|
||||||
|
|
||||||
lda /PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.10BaseT
|
|
||||||
sta PacketPageDATA+1,x
|
|
||||||
lda #PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.10BaseT
|
|
||||||
sta PacketPageDATA,x
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
U1.READ php
|
|
||||||
sei
|
|
||||||
|
|
||||||
ldx 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 U1.READWRITE.9
|
|
||||||
|
|
||||||
lda RTDATA+1,x discard RxStatus
|
|
||||||
lda RTDATA,x
|
|
||||||
|
|
||||||
lda RTDATA+1,x get RxLength
|
|
||||||
sta ZPBufCnt+1
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt+1
|
|
||||||
|
|
||||||
lda RTDATA,x
|
|
||||||
sta ZPBufCnt
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt
|
|
||||||
|
|
||||||
ldx Slotn0
|
|
||||||
|
|
||||||
lda ZPBufPtr+1
|
|
||||||
pha
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.2 inc ZPnCnt
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
inc ZPnCnt+1
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
.3 lda RTDATA,x
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
iny
|
|
||||||
|
|
||||||
inc ZPnCnt
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
inc ZPnCnt+1
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
.4 lda RTDATA+1,x
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
iny
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
inc ZPBufPtr+1
|
|
||||||
bra .2
|
|
||||||
|
|
||||||
.8 pla
|
|
||||||
sta ZPBufPtr+1
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
U1.READWRITE.9 plp
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
U1.WRITE php
|
|
||||||
sei
|
|
||||||
|
|
||||||
ldx Slotn0
|
|
||||||
|
|
||||||
lda /PP.TxCMD.LID+PP.TxCMD.TxStartFULL
|
|
||||||
sta TxCMD+1,x
|
|
||||||
lda #PP.TxCMD.LID+PP.TxCMD.TxStartFULL
|
|
||||||
sta TxCMD,x
|
|
||||||
|
|
||||||
lda ZPBufCnt+1
|
|
||||||
sta TxLength+1,x
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt+1
|
|
||||||
|
|
||||||
lda ZPBufCnt
|
|
||||||
sta TxLength,x
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt
|
|
||||||
|
|
||||||
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 U1.READWRITE.9
|
|
||||||
|
|
||||||
ldx Slotn0
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.1 inc ZPnCnt
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
inc ZPnCnt+1
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
.2 lda (ZPBufPtr),y
|
|
||||||
sta RTDATA,x
|
|
||||||
iny
|
|
||||||
|
|
||||||
inc ZPnCnt
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
inc ZPnCnt+1
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
.3 lda (ZPBufPtr),y
|
|
||||||
sta RTDATA+1,x
|
|
||||||
iny
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
inc ZPBufPtr+1
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
.8 plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
U1.Name .PS "Uthernet V1"
|
|
||||||
*--------------------------------------
|
|
||||||
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
|
|
||||||
LOAD usr/src/sys/pm.vedrive.s
|
|
||||||
ASM
|
|
@ -1,442 +0,0 @@
|
|||||||
NEW
|
|
||||||
AUTO 3,1
|
|
||||||
*--------------------------------------
|
|
||||||
U2.Init lda CONF.SLOT
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
clc
|
|
||||||
adc #$88
|
|
||||||
sta Slotn0
|
|
||||||
tax
|
|
||||||
|
|
||||||
lda #W5100.MR.RST
|
|
||||||
sta W5100.MR,x
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
|
|
||||||
.1 dec give some time....
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
lda #W5100.MR.PB+W5100.MR.AI+W5100.MR.IND
|
|
||||||
sta W5100.MR,x
|
|
||||||
|
|
||||||
pha
|
|
||||||
pla
|
|
||||||
|
|
||||||
lda W5100.MR,x
|
|
||||||
cmp #W5100.MR.PB+W5100.MR.AI+W5100.MR.IND
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
>AR.SELECT RTR
|
|
||||||
lda W5100.DR,x Get RTR HI
|
|
||||||
cmp /2000
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
lda W5100.DR,x Get RTR LO
|
|
||||||
cmp #2000
|
|
||||||
beq .3
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
.3 lda CONF.SLOT
|
|
||||||
pha
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
pha
|
|
||||||
pha
|
|
||||||
|
|
||||||
lda #U2.Name
|
|
||||||
pha
|
|
||||||
lda /U2.Name
|
|
||||||
pha
|
|
||||||
|
|
||||||
>LDYAI VEDRIVE.NICOK
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
ldx Slotn0
|
|
||||||
|
|
||||||
lda #W5100.MR.PB+W5100.MR.AI+W5100.MR.IND
|
|
||||||
sta W5100.MR,x
|
|
||||||
|
|
||||||
>AR.SELECT SHAR
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.4 lda CONF.SRCMAC,y
|
|
||||||
sta W5100.DR,x
|
|
||||||
iny
|
|
||||||
cpy #6
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
>AR.SELECT RMSR
|
|
||||||
lda #3 8k,0k,0k,0k
|
|
||||||
sta W5100.DR,x ...for Socket RX Buffers
|
|
||||||
sta W5100.DR,x ...for Socket TX Buffers
|
|
||||||
|
|
||||||
>AR.SELECT S0.MR
|
|
||||||
lda #W5100.AR.Sn.MR.MACRAW+W5100.AR.Sn.MR.MF
|
|
||||||
sta W5100.DR,x
|
|
||||||
|
|
||||||
>AR.SELECT S0.CR
|
|
||||||
lda #W5100.AR.Sn.CR.OPEN
|
|
||||||
sta W5100.DR,x
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
U2.Read php
|
|
||||||
sei
|
|
||||||
|
|
||||||
ldx Slotn0
|
|
||||||
|
|
||||||
>AR.SELECT S0.RX.RSR
|
|
||||||
lda W5100.DR,x get the received size HI
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
ora W5100.DR,x LO
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
jmp U2.READWRITE.9
|
|
||||||
|
|
||||||
.1 >AR.SELECT S0.RX.RD
|
|
||||||
lda W5100.DR,x get the received ptr HI
|
|
||||||
sta Offset+1
|
|
||||||
ldy W5100.DR,x get the received ptr LO
|
|
||||||
sty Offset
|
|
||||||
|
|
||||||
and /RXTX.MASK
|
|
||||||
ora /RX.BASE
|
|
||||||
sta W5100.AR,x
|
|
||||||
tya
|
|
||||||
sta W5100.AR+1,x
|
|
||||||
|
|
||||||
lda W5100.DR,x get RX.Size HI (Frame size + 2)
|
|
||||||
sta TotalSize+1
|
|
||||||
lda W5100.DR,x get RX.Size LO
|
|
||||||
sta TotalSize
|
|
||||||
|
|
||||||
sec
|
|
||||||
sbc #2 MACRAW:strip 2 bytes Header from Size
|
|
||||||
sta ZPBufCnt
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt
|
|
||||||
|
|
||||||
lda TotalSize+1
|
|
||||||
sbc #0
|
|
||||||
sta ZPBufCnt+1
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt+1
|
|
||||||
|
|
||||||
lda ZPBufPtr+1
|
|
||||||
pha
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.2 inc ZPnCnt
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
inc ZPnCnt+1
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
.3 lda W5100.DR,x
|
|
||||||
sta (ZPBufPtr),y
|
|
||||||
iny
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
inc ZPBufPtr+1
|
|
||||||
bra .2
|
|
||||||
|
|
||||||
.8 >AR.SELECT S0.RX.RD
|
|
||||||
|
|
||||||
lda Offset
|
|
||||||
clc
|
|
||||||
adc TotalSize
|
|
||||||
pha save LO
|
|
||||||
|
|
||||||
lda Offset+1
|
|
||||||
adc TotalSize+1
|
|
||||||
sta W5100.DR,x write HI
|
|
||||||
pla
|
|
||||||
sta W5100.DR,x write LO
|
|
||||||
|
|
||||||
>AR.SELECT S0.CR
|
|
||||||
lda #W5100.AR.Sn.CR.RCVD
|
|
||||||
sta W5100.DR,x
|
|
||||||
|
|
||||||
pla
|
|
||||||
sta ZPBufPtr+1
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
U2.READWRITE.9 plp
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
U2.Write php
|
|
||||||
sei
|
|
||||||
|
|
||||||
ldx Slotn0
|
|
||||||
|
|
||||||
lda ZPBufCnt
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt
|
|
||||||
|
|
||||||
lda ZPBufCnt+1
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt+1
|
|
||||||
|
|
||||||
>AR.SELECT S0.TX.FSR
|
|
||||||
lda W5100.DR,x get send size HI
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
ldy W5100.DR,x LO
|
|
||||||
cpy ZPBufCnt
|
|
||||||
sbc ZPBufCnt+1
|
|
||||||
bcc U2.READWRITE.9
|
|
||||||
|
|
||||||
>AR.SELECT S0.TX.WR
|
|
||||||
lda W5100.DR,x Get HI
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
ldy W5100.DR,x Get LO
|
|
||||||
and /RXTX.MASK
|
|
||||||
ora /TX.BASE
|
|
||||||
sta W5100.AR,x Write HI
|
|
||||||
sta Offset+1
|
|
||||||
tya
|
|
||||||
sta W5100.AR+1,x Write LO
|
|
||||||
sta Offset
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.2 inc ZPnCnt
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
inc ZPnCnt+1
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
.3 lda (ZPBufPtr),y
|
|
||||||
sta W5100.DR,x
|
|
||||||
iny
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
inc ZPBufPtr+1
|
|
||||||
bra .2
|
|
||||||
|
|
||||||
.8 >AR.SELECT S0.TX.WR
|
|
||||||
lda Offset
|
|
||||||
clc
|
|
||||||
adc ZPBufCnt
|
|
||||||
pha save LO
|
|
||||||
lda Offset+1
|
|
||||||
adc ZPBufCnt+1
|
|
||||||
sta W5100.DR,x write HI
|
|
||||||
pla
|
|
||||||
sta W5100.DR,x write LO
|
|
||||||
|
|
||||||
>AR.SELECT S0.CR
|
|
||||||
lda #W5100.AR.Sn.CR.SEND
|
|
||||||
sta W5100.DR,x
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
U2.Name .PS "Uthernet II"
|
|
||||||
Offset .BS 2
|
|
||||||
TotalSize .BS 2
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.U2 .PH DRV.NIC.START
|
|
||||||
|
|
||||||
jmp DRV.U2.SendARP
|
|
||||||
jmp DRV.U2.SendUDP
|
|
||||||
|
|
||||||
DRV.U2.Rcvd php
|
|
||||||
sei
|
|
||||||
|
|
||||||
ldx DRV.BLK.Slotn0
|
|
||||||
|
|
||||||
>AR.SELECT S0.RX.RSR
|
|
||||||
lda W5100.DR,x get the received size HI
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
ora W5100.DR,x LO
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
jmp DRV.U2.9
|
|
||||||
|
|
||||||
.1 >AR.SELECT S0.RX.RD
|
|
||||||
lda W5100.DR,x get the received ptr HI
|
|
||||||
sta DRV.Offset+1
|
|
||||||
ldy W5100.DR,x get the received ptr LO
|
|
||||||
sty DRV.Offset
|
|
||||||
|
|
||||||
and /RXTX.MASK
|
|
||||||
ora /RX.BASE
|
|
||||||
sta W5100.AR,x
|
|
||||||
tya
|
|
||||||
sta W5100.AR+1,x
|
|
||||||
|
|
||||||
lda W5100.DR,x get RX.Size HI (Frame size + 2)
|
|
||||||
sta DRV.TotalSize+1
|
|
||||||
lda W5100.DR,x get RX.Size LO
|
|
||||||
sta DRV.TotalSize
|
|
||||||
|
|
||||||
* lda DRV.TotalSize
|
|
||||||
sec
|
|
||||||
sbc #2 MACRAW:strip 2 bytes Header from Size
|
|
||||||
sta DRV.FrameSize
|
|
||||||
eor #$ff
|
|
||||||
sta DRV.nCnt
|
|
||||||
|
|
||||||
lda DRV.TotalSize+1
|
|
||||||
sbc #0
|
|
||||||
sta DRV.FrameSize+1
|
|
||||||
eor #$ff
|
|
||||||
sta DRV.nCnt+1
|
|
||||||
|
|
||||||
>LDYAI DRV.InBuf
|
|
||||||
>STYA DRV.A1L
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.2 inc DRV.nCnt
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
inc DRV.nCnt+1
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
.3 lda W5100.DR,x
|
|
||||||
|
|
||||||
sta (DRV.A1L),y
|
|
||||||
iny
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
inc DRV.A1H
|
|
||||||
bra .2
|
|
||||||
|
|
||||||
.8 >AR.SELECT S0.RX.RD
|
|
||||||
|
|
||||||
lda DRV.Offset
|
|
||||||
clc
|
|
||||||
adc DRV.TotalSize
|
|
||||||
pha save LO
|
|
||||||
|
|
||||||
lda DRV.Offset+1
|
|
||||||
adc DRV.TotalSize+1
|
|
||||||
sta W5100.DR,x write HI
|
|
||||||
pla
|
|
||||||
sta W5100.DR,x write LO
|
|
||||||
|
|
||||||
>AR.SELECT S0.CR
|
|
||||||
lda #W5100.AR.Sn.CR.RCVD
|
|
||||||
sta W5100.DR,x
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.U2.9 plp
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.U2.SendARP >LDYAI S.ARP
|
|
||||||
>STYA DRV.FrameSize
|
|
||||||
>LDYAI DRV.ARPBuf
|
|
||||||
bra DRV.U2.Send
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.U2.SendUDP >STYA DRV.FrameSize
|
|
||||||
|
|
||||||
jsr DRV.BLK.IPUDPCheksum
|
|
||||||
|
|
||||||
>LDYAI DRV.UDPBuf
|
|
||||||
|
|
||||||
DRV.U2.Send >STYA DRV.A1L
|
|
||||||
|
|
||||||
lda DRV.FrameSize+1
|
|
||||||
eor #$ff
|
|
||||||
sta DRV.nCnt+1
|
|
||||||
|
|
||||||
lda DRV.FrameSize
|
|
||||||
eor #$ff
|
|
||||||
sta DRV.nCnt
|
|
||||||
|
|
||||||
php
|
|
||||||
sei
|
|
||||||
|
|
||||||
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.FrameSize
|
|
||||||
sbc DRV.FrameSize+1
|
|
||||||
bcc DRV.U2.9
|
|
||||||
|
|
||||||
>AR.SELECT S0.TX.WR
|
|
||||||
lda W5100.DR,x Get HI
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
ldy W5100.DR,x Get LO
|
|
||||||
and /RXTX.MASK
|
|
||||||
ora /TX.BASE
|
|
||||||
sta W5100.AR,x Write HI
|
|
||||||
sta DRV.Offset+1
|
|
||||||
tya
|
|
||||||
sta W5100.AR+1,x Write LO
|
|
||||||
sta DRV.Offset
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.2 inc DRV.nCnt
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
inc DRV.nCnt+1
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
.3 lda (DRV.A1L),y
|
|
||||||
sta W5100.DR,x
|
|
||||||
iny
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
inc DRV.A1H
|
|
||||||
bra .2
|
|
||||||
|
|
||||||
.8 >AR.SELECT S0.TX.WR
|
|
||||||
lda DRV.Offset
|
|
||||||
clc
|
|
||||||
adc DRV.FrameSize
|
|
||||||
pha save LO
|
|
||||||
lda DRV.Offset+1
|
|
||||||
adc DRV.FrameSize+1
|
|
||||||
sta W5100.DR,x write HI
|
|
||||||
pla
|
|
||||||
sta W5100.DR,x write LO
|
|
||||||
|
|
||||||
>AR.SELECT S0.CR
|
|
||||||
lda #W5100.AR.Sn.CR.SEND
|
|
||||||
sta W5100.DR,x
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.Offset .BS 2
|
|
||||||
DRV.TotalSize .BS 2
|
|
||||||
*--------------------------------------
|
|
||||||
.EP
|
|
||||||
|
|
||||||
.LIST ON
|
|
||||||
DRV.U2.SIZE .EQ *-DRV.U2
|
|
||||||
.LIST OFF
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE usr/src/sys/pm.vedrive.s.u2
|
|
||||||
LOAD usr/src/sys/pm.vedrive.s
|
|
||||||
ASM
|
|
@ -1,695 +0,0 @@
|
|||||||
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
|
|
||||||
.INB inc/nic.91c96.i
|
|
||||||
.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
|
|
||||||
bD1Size .EQ 19
|
|
||||||
bD2Size .EQ 19
|
|
||||||
Slotn0 .EQ 21
|
|
||||||
*--------------------------------------
|
|
||||||
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
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
jsr VEDRIVE.SetSlot
|
|
||||||
bcc .8
|
|
||||||
|
|
||||||
>LDYAI VEDRIVE.NOSLOT
|
|
||||||
jsr PrintFYA
|
|
||||||
rts
|
|
||||||
|
|
||||||
.8 pha Push slot
|
|
||||||
pha 2 times
|
|
||||||
>LDYAI VEDRIVE.DEVOK
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr VEDRIVE.Install
|
|
||||||
bcc .9
|
|
||||||
|
|
||||||
>LDYAI VEDRIVE.DRVIKO
|
|
||||||
jsr PrintFYA
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 >LDYAI VEDRIVE.DRVIOK
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
.1 jsr VEDRIVE.READ
|
|
||||||
bcc .2
|
|
||||||
|
|
||||||
jsr VEDRIVE.Wait
|
|
||||||
bcc .1
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
.2 jsr VEDRIVE.CheckADTRep
|
|
||||||
bcc .3
|
|
||||||
|
|
||||||
jsr VEDRIVE.CheckARPFrame
|
|
||||||
bra .1
|
|
||||||
|
|
||||||
.3 bit bD1Size
|
|
||||||
bmi .30
|
|
||||||
|
|
||||||
ldy #S.UDP+10+4+$25
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
sta CONF.D1TOTALBLK
|
|
||||||
iny
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
sta CONF.D1TOTALBLK+1
|
|
||||||
|
|
||||||
.30 lda #5
|
|
||||||
sta ADT.REQ.CMD
|
|
||||||
|
|
||||||
lda #$C2
|
|
||||||
sta ADT.REQ.SUM
|
|
||||||
|
|
||||||
>LDYAI ADT.REQ
|
|
||||||
>STYA ZPBufPtr
|
|
||||||
|
|
||||||
>LDYAI ADT.REQ.LEN
|
|
||||||
>STYA ZPBufCnt
|
|
||||||
|
|
||||||
jsr VEDRIVE.SendUDP
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr VEDRIVE.InitTimer
|
|
||||||
|
|
||||||
.4 jsr VEDRIVE.READ
|
|
||||||
bcc .5
|
|
||||||
|
|
||||||
jsr VEDRIVE.Wait
|
|
||||||
bcc .4
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
.5 jsr VEDRIVE.CheckADTRep
|
|
||||||
bcc .6
|
|
||||||
|
|
||||||
jsr VEDRIVE.CheckARPFrame
|
|
||||||
bra .4
|
|
||||||
|
|
||||||
.6 bit bD2Size
|
|
||||||
bmi .60
|
|
||||||
|
|
||||||
ldy #S.UDP+10+4+$25
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
sta CONF.D2TOTALBLK
|
|
||||||
iny
|
|
||||||
lda (ZPBufPtr),y
|
|
||||||
sta CONF.D2TOTALBLK+1
|
|
||||||
.60
|
|
||||||
* 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)
|
|
||||||
|
|
||||||
.1 .DA GS.WRITE
|
|
||||||
.DA U1.WRITE
|
|
||||||
.DA U2.WRITE
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.READ >LDYAI FRAMEBUF
|
|
||||||
>STYA ZPBufPtr
|
|
||||||
|
|
||||||
ldx CONF.NIC
|
|
||||||
jmp (.1,x)
|
|
||||||
|
|
||||||
.1 .DA GS.READ
|
|
||||||
.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
|
|
||||||
|
|
||||||
.1 lda PATCH-1,x
|
|
||||||
sta DRV.EntryPoint-1,x
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
bit RRAMWRAMBNK2
|
|
||||||
bit RRAMWRAMBNK2
|
|
||||||
|
|
||||||
>LDYAI DRV.BLK
|
|
||||||
>STYA ZPPtr1
|
|
||||||
|
|
||||||
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.BLK.Slotn0
|
|
||||||
|
|
||||||
lda CONF.SLOT
|
|
||||||
sta DRV.BLK.Slot0n
|
|
||||||
|
|
||||||
ldx CONF.NIC
|
|
||||||
lda .10,x
|
|
||||||
sta ZPPtr1
|
|
||||||
|
|
||||||
lda .10+1,x
|
|
||||||
sta ZPPtr1+1
|
|
||||||
|
|
||||||
lda .20,x
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt
|
|
||||||
|
|
||||||
lda .20+1,x
|
|
||||||
eor #$ff
|
|
||||||
sta ZPnCnt+1
|
|
||||||
|
|
||||||
lda #DRV.NIC.START
|
|
||||||
sta ZPPtr2
|
|
||||||
lda /DRV.NIC.START
|
|
||||||
sta ZPPtr2+1
|
|
||||||
|
|
||||||
jsr VEDRIVE.Move
|
|
||||||
|
|
||||||
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.GS
|
|
||||||
.DA DRV.U1
|
|
||||||
.DA DRV.U2
|
|
||||||
*--------------------------------------
|
|
||||||
.20 .DA DRV.GS.SIZE
|
|
||||||
.DA DRV.U1.SIZE
|
|
||||||
.DA DRV.U2.SIZE
|
|
||||||
*--------------------------------------
|
|
||||||
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)
|
|
||||||
*--------------------------------------
|
|
||||||
COPYRIGHT .AS "(C)APPLE "
|
|
||||||
COPYRIGHT.LEN .EQ *-COPYRIGHT
|
|
||||||
*--------------------------------------
|
|
||||||
PATCH .PH DRV.EntryPoint
|
|
||||||
bit RRAMWRAMBNK2
|
|
||||||
jsr DRV.BLK.START+1
|
|
||||||
bit RRAMWRAMBNK1
|
|
||||||
rts
|
|
||||||
.EP
|
|
||||||
PATCH.SIZE .EQ *-PATCH
|
|
||||||
*--------------------------------------
|
|
||||||
.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
|
|
||||||
*--------------------------------------
|
|
||||||
VEDRIVE.MSG0 .CZ "VEDRIVE (ADTPro Virtual Ethernet HD) Driver\r"
|
|
||||||
VEDRIVE.DRVKO .CZ "VEDRIVE (Or other custom Driver) Already Installed.\r"
|
|
||||||
VEDRIVE.CONF .CZ "Checking %S...\r"
|
|
||||||
VEDRIVE.CONFKO .CZ "Error reading VEDRIVE.CONF file.\r"
|
|
||||||
VEDRIVE.CONFSYN .CZ "Syntax error in VEDRIVE.CONF file.\r"
|
|
||||||
VEDRIVE.CONFINV .CZ "Invalid VEDRIVE.CONF file.\r"
|
|
||||||
VEDRIVE.NICKO .CZ "Hardware not detected.\r"
|
|
||||||
VEDRIVE.NICOK .CZ "%S Rev. %d.%d Found At Slot %d.\r"
|
|
||||||
VEDRIVE.DHCP .CZ "Querying DHCP...\r"
|
|
||||||
VEDRIVE.DHCPKO .CZ "No response from DHCP.\r"
|
|
||||||
VEDRIVE.IPKO .CZ "Unable to setup IP configuration.\r"
|
|
||||||
VEDRIVE.IPOK .CZ "IP config : %d.%d.%d.%d/%d.%d.%d.%d GW=%d.%d.%d.%d\r"
|
|
||||||
VEDRIVE.SRV .CZ "Contacting ADTPro Server..."
|
|
||||||
VEDRIVE.SRVKO .CZ "No Response From ADTPro Server.\r"
|
|
||||||
VEDRIVE.SRVOK .CZ "ADTPro Server Is Online.\r"
|
|
||||||
VEDRIVE.NOSLOT .CZ "No ProDOS device slot available.\r"
|
|
||||||
VEDRIVE.DEVOK .CZ "VEDRIVE Installed 2 devices at S%d,D1 & S%d,D2.\r"
|
|
||||||
VEDRIVE.DRVIKO .CZ "Unable to install VEDRIVE.\r"
|
|
||||||
VEDRIVE.DRVIOK .CZ "VEDRIVE Successfully Installed.\r"
|
|
||||||
*--------------------------------------
|
|
||||||
CONF.FILENAME .AS "vedrive.conf"
|
|
||||||
CONF.FILENAME.L .EQ *-CONF.FILENAME
|
|
||||||
*--------------------------------------
|
|
||||||
CONF.KW .PS "nic"
|
|
||||||
.PS "slot"
|
|
||||||
.PS "mac"
|
|
||||||
.PS "address"
|
|
||||||
.PS "netmask"
|
|
||||||
.PS "gateway"
|
|
||||||
.PS "server"
|
|
||||||
.PS "port"
|
|
||||||
.PS "blksize1"
|
|
||||||
.PS "blksize2"
|
|
||||||
.HS 00
|
|
||||||
*--------------------------------------
|
|
||||||
CONF.KW.NIC .PS "lancegs"
|
|
||||||
.PS "uthernet"
|
|
||||||
.PS "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
|
|
||||||
CONF.D1TOTALBLK .DA 1600
|
|
||||||
CONF.D2TOTALBLK .DA 1600
|
|
||||||
*--------------------------------------
|
|
||||||
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
|
|
||||||
*--------------------------------------
|
|
||||||
ADT.REQ
|
|
||||||
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
|
|
||||||
ADT.REQ.CMD .HS 030200 READ D1, BLK 2
|
|
||||||
ADT.REQ.SUM .HS C4
|
|
||||||
ADT.REQ.END .EQ *
|
|
||||||
ADT.REQ.LEN .EQ *-ADT.REQ
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE usr/src/sys/pm.vedrive.s
|
|
||||||
ASM
|
|
@ -1,622 +0,0 @@
|
|||||||
NEW
|
|
||||||
AUTO 3,1
|
|
||||||
.LIST OFF
|
|
||||||
.OP 65C02
|
|
||||||
.OR $2000
|
|
||||||
.TF sys/pm/pm.vsdrive
|
|
||||||
*--------------------------------------
|
|
||||||
.INB inc/macros.i
|
|
||||||
.INB inc/io.i
|
|
||||||
.INB inc/monitor.i
|
|
||||||
.INB inc/mli.i
|
|
||||||
.INB inc/mli.e.i
|
|
||||||
.INB inc/com.6551.i
|
|
||||||
*--------------------------------------
|
|
||||||
TmpPtr1 .EQ $0
|
|
||||||
ADT.CMD.VSD .EQ $C5 "E": Virtual Drive Command Envelope
|
|
||||||
ADT.CMD.PING .EQ $D9 "Y": PING
|
|
||||||
DRV.EntryPoint .EQ $BF41
|
|
||||||
*--------------------------------------
|
|
||||||
VSDRIVE.Init >LDYAI VSDRIVE.MSG0
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr VSDRIVE.Check
|
|
||||||
bcs .90
|
|
||||||
|
|
||||||
stz TmpPtr1
|
|
||||||
lda #$C1
|
|
||||||
sta TmpPtr1+1
|
|
||||||
|
|
||||||
.2 jsr SSC.Detect
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
lda TmpPtr1+1 Slot Cn
|
|
||||||
and #$0F
|
|
||||||
pha slot n
|
|
||||||
>LDYAI VSDRIVE.SSCOK
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr VSDRIVE.Ping
|
|
||||||
bcs .92
|
|
||||||
|
|
||||||
>LDYAI VSDRIVE.SRVOK
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr VSDRIVE.SetSlot
|
|
||||||
bcs .91
|
|
||||||
|
|
||||||
pha Push slot
|
|
||||||
pha 2 times
|
|
||||||
>LDYAI VSDRIVE.DEVOK
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
jsr VSDRIVE.Install
|
|
||||||
>LDYAI VSDRIVE.OK
|
|
||||||
jsr PrintFYA
|
|
||||||
rts
|
|
||||||
|
|
||||||
.90 >LDYAI VSDRIVE.DRVKO
|
|
||||||
jsr PrintFYA
|
|
||||||
rts
|
|
||||||
|
|
||||||
.91 >LDYAI VSDRIVE.NOSLOT
|
|
||||||
jsr PrintFYA
|
|
||||||
rts
|
|
||||||
|
|
||||||
.92 pha Push EC
|
|
||||||
>LDYAI VSDRIVE.SRVKO
|
|
||||||
jsr PrintFYA
|
|
||||||
|
|
||||||
inc TmpPtr1+1
|
|
||||||
lda TmpPtr1+1
|
|
||||||
cmp #$C8
|
|
||||||
bne .2 Go try next SSC....
|
|
||||||
|
|
||||||
.99 >LDYAI VSDRIVE.SSCKO
|
|
||||||
jsr PrintFYA
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VSDRIVE.Check ldx #COPYRIGHT.LEN
|
|
||||||
|
|
||||||
sec
|
|
||||||
|
|
||||||
.1 lda DRV.EntryPoint-1,x
|
|
||||||
eor COPYRIGHT-1,x
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
clc
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
SSC.Detect
|
|
||||||
.1 ldx #DEVSIG.Value-DEVSIG.Offset-1
|
|
||||||
|
|
||||||
.2 ldy DEVSIG.Offset,x
|
|
||||||
lda (TmpPtr1),y
|
|
||||||
cmp DEVSIG.Value,x
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
dex
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.3 inc TmpPtr1+1 no match, try next slot....
|
|
||||||
lda TmpPtr1+1
|
|
||||||
cmp #$C8
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VSDRIVE.Ping lda TmpPtr1+1 A=SlotCN
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
clc
|
|
||||||
adc #$8F
|
|
||||||
tax X=SlotN0
|
|
||||||
|
|
||||||
php
|
|
||||||
sei
|
|
||||||
|
|
||||||
stz SSC.RESET-$8F,x
|
|
||||||
|
|
||||||
lda #SSC.CTL.1S+SSC.CTL.8D+SSC.CTL.CLKINT+SSC.CTL.B115200
|
|
||||||
sta SSC.CTL-$8F,x
|
|
||||||
|
|
||||||
lda #SSC.CMD.NOP+SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR
|
|
||||||
sta SSC.CMD-$8F,x
|
|
||||||
|
|
||||||
lda SSC.DATA-$8F,x discard any garbage byte
|
|
||||||
lda SSC.STATUS-$8F,x clear any IRQ pending
|
|
||||||
|
|
||||||
stz VSDRIVE.Ping.TO
|
|
||||||
stz VSDRIVE.Ping.TO+1
|
|
||||||
|
|
||||||
.10 jsr VSDRIVE.IncTimer Wait.......
|
|
||||||
bne .10
|
|
||||||
|
|
||||||
ldy #10
|
|
||||||
|
|
||||||
.1 lda SSC.STATUS-$8F,x
|
|
||||||
and #SSC.STATUS.nDCD Ready for transmit?
|
|
||||||
beq .20
|
|
||||||
|
|
||||||
jsr VSDRIVE.IncTimer Wait.......
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
dey
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
lda #1
|
|
||||||
bra .9 Time Out.....
|
|
||||||
|
|
||||||
.20 ldy #5 5 bytes to send
|
|
||||||
|
|
||||||
.2 lda VSDRIVE.CMDS-1,y
|
|
||||||
sta SSC.DATA-$8F,x
|
|
||||||
|
|
||||||
.3 lda SSC.STATUS-$8F,x
|
|
||||||
and #SSC.STATUS.TDRE char transmitted?
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
jsr VSDRIVE.IncTimer
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
lda #2
|
|
||||||
bra .9
|
|
||||||
|
|
||||||
.4 dey
|
|
||||||
bne .2 next byte
|
|
||||||
|
|
||||||
lda #521^$ffff 522 bytes to receive
|
|
||||||
sta VSDRIVE.Ping.BC
|
|
||||||
lda /521^$ffff
|
|
||||||
sta VSDRIVE.Ping.BC+1
|
|
||||||
|
|
||||||
stz VSDRIVE.Ping.TO
|
|
||||||
stz VSDRIVE.Ping.TO+1
|
|
||||||
|
|
||||||
ldy #3 EC=3 if no byte received
|
|
||||||
|
|
||||||
.5 lda SSC.STATUS-$8F,x
|
|
||||||
and #SSC.STATUS.RDRF incoming char?
|
|
||||||
bne .6
|
|
||||||
|
|
||||||
jsr VSDRIVE.IncTimer
|
|
||||||
bne .5
|
|
||||||
|
|
||||||
tya
|
|
||||||
|
|
||||||
.9 stz SSC.CMD-$8F,x Applewin Bug ???
|
|
||||||
|
|
||||||
stz SSC.RESET-$8F,x
|
|
||||||
|
|
||||||
plp
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
.6 ldy #4 EC=4 if recieved only partial reply
|
|
||||||
|
|
||||||
lda SSC.DATA-$8F,x
|
|
||||||
inc VSDRIVE.Ping.BC
|
|
||||||
bne .5
|
|
||||||
|
|
||||||
inc VSDRIVE.Ping.BC+1
|
|
||||||
bne .5
|
|
||||||
|
|
||||||
lda #SSC.CMD.NOP+SSC.CMD.RIRQDIS+SSC.CMD.TE
|
|
||||||
sta SSC.CMD-$8F,x
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
VSDRIVE.IncTimer
|
|
||||||
inc VSDRIVE.Ping.TO
|
|
||||||
bne .8
|
|
||||||
|
|
||||||
inc VSDRIVE.Ping.TO+1
|
|
||||||
.8 rts
|
|
||||||
*--------------------------------------
|
|
||||||
VSDRIVE.CMDS .HS C6.00.00.03
|
|
||||||
.DA #ADT.CMD.VSD
|
|
||||||
* C6=C5 eor 03 eor 00 eor 00
|
|
||||||
VSDRIVE.Ping.TO .BS 2
|
|
||||||
VSDRIVE.Ping.BC .BS 2
|
|
||||||
*--------------------------------------
|
|
||||||
* Find 2 free slots in DEVPTRS (D1 & D2)
|
|
||||||
*--------------------------------------
|
|
||||||
VSDRIVE.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
|
|
||||||
*--------------------------------------
|
|
||||||
VSDRIVE.Install ldx #PATCH.LEN
|
|
||||||
|
|
||||||
.1 lda PATCH-1,x
|
|
||||||
sta DRV.EntryPoint-1,x
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
bit RRAMWRAMBNK2
|
|
||||||
bit RRAMWRAMBNK2
|
|
||||||
|
|
||||||
ldx #DRV.SIZE
|
|
||||||
|
|
||||||
.2 lda DRV-1,x
|
|
||||||
sta $D000,x
|
|
||||||
dex
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
lda TmpPtr1+1 A=SlotCN
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
|
|
||||||
ora #SSC.DATA
|
|
||||||
sta DRV.SSCWrite.D+1
|
|
||||||
sta DRV.SSCSend.D+1
|
|
||||||
sta DRV.SSCGet.D+1
|
|
||||||
|
|
||||||
inc #SSC.STATUS
|
|
||||||
|
|
||||||
sta DRV.SSCWrite.S+1
|
|
||||||
sta DRV.SSCSend.S+1
|
|
||||||
sta DRV.SSCGet.S+1
|
|
||||||
sta DRV.SSCClose.S+1
|
|
||||||
|
|
||||||
inc #SSC.CMD
|
|
||||||
|
|
||||||
sta DRV.INIT.C+1
|
|
||||||
sta DRV.SSCClose.C+1
|
|
||||||
|
|
||||||
lda TmpPtr1+1 A=SlotCN
|
|
||||||
and #$0F
|
|
||||||
sta DRV.START
|
|
||||||
|
|
||||||
bit RROMBNK1
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
.INB usr/src/shared/x.printf.s
|
|
||||||
*--------------------------------------
|
|
||||||
DEVSIG.Offset .HS 05070B0C
|
|
||||||
DEVSIG.Value .HS 38180131
|
|
||||||
VSDRIVE.MSG0 .CZ "VSDRIVE (ADTPro Virtual Serial HD) Driver For A2osX\r"
|
|
||||||
VSDRIVE.DRVKO .CZ "VSDRIVE (Or other custom Driver) Already Installed.\r"
|
|
||||||
VSDRIVE.SSCKO .CZ "SSC Not Detected.\r"
|
|
||||||
VSDRIVE.SSCOK .CZ "SSC Found At Slot %d.\rContacting ADTPro Server..."
|
|
||||||
VSDRIVE.SRVKO .CZ "No Response From ADTPro Server (EC=%d).\r"
|
|
||||||
VSDRIVE.SRVOK .CZ "ADTPro Server Is Online.\r"
|
|
||||||
VSDRIVE.NOSLOT .CZ "No ProDOS device slot available.\r"
|
|
||||||
VSDRIVE.DEVOK .CZ "VSDRIVE Installed 2 devices at S%d,D1 & S%d,D2.\r"
|
|
||||||
VSDRIVE.OK .CZ "VSDRIVE Driver Successfully Installed.\r"
|
|
||||||
*--------------------------------------
|
|
||||||
* ProDOS $BE41->$BE4B Patch for switching to BANK2 (10 bytes)
|
|
||||||
*--------------------------------------
|
|
||||||
COPYRIGHT .AS "(C)APPLE "
|
|
||||||
COPYRIGHT.LEN .EQ *-COPYRIGHT
|
|
||||||
PATCH .PH DRV.EntryPoint
|
|
||||||
bit RRAMWRAMBNK2
|
|
||||||
jsr $D002
|
|
||||||
bit RRAMWRAMBNK1
|
|
||||||
rts
|
|
||||||
.EP
|
|
||||||
PATCH.LEN .EQ *-PATCH
|
|
||||||
*--------------------------------------
|
|
||||||
* Driver
|
|
||||||
*--------------------------------------
|
|
||||||
* 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
|
|
||||||
* PC,A1,A2 are used by Disk II Driver,
|
|
||||||
* so we use it safely as Tmp Ptr
|
|
||||||
*--------------------------------------
|
|
||||||
*DRV.PCL .EQ $3A
|
|
||||||
*DRV.PCH .EQ $3B
|
|
||||||
DRV.A1L .EQ $3C
|
|
||||||
DRV.A1H .EQ $3D
|
|
||||||
*DRV.A2L .EQ $3E
|
|
||||||
*DRV.A2H .EQ $3F
|
|
||||||
*--------------------------------------
|
|
||||||
.DUMMY
|
|
||||||
.OR $3A
|
|
||||||
DRV.CmdBuf.Sum .BS 1 Reverse order for dey
|
|
||||||
DRV.CmdBuf.BlkH .BS 1
|
|
||||||
DRV.CmdBuf.BlkL .BS 1
|
|
||||||
DRV.CmdBuf.Cmd .BS 1
|
|
||||||
DRV.CmdBuf.Env .BS 1
|
|
||||||
.ED
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.COMMAND .EQ $42
|
|
||||||
DRV.UNITNUM .EQ $43
|
|
||||||
DRV.BUFF .EQ $44
|
|
||||||
DRV.BLKNUM .EQ $46
|
|
||||||
*--------------------------------------
|
|
||||||
DRV .PH $D001 Main LC Bnk 2 $D001->$DFFF
|
|
||||||
|
|
||||||
DRV.START .BS 1 SELF MODIFIED slot 0n
|
|
||||||
|
|
||||||
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 ....
|
|
||||||
bcc DRV.START.OK
|
|
||||||
|
|
||||||
DRV.START.IO lda #MLI.E.IO
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
DRV.START.OK tax
|
|
||||||
|
|
||||||
ora #2 W=2,R=3
|
|
||||||
|
|
||||||
bit DRV.UNITNUM
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
adc #2 CC from bcs
|
|
||||||
|
|
||||||
.2 sta DRV.CmdBuf.Cmd store cmd
|
|
||||||
|
|
||||||
lda #ADT.CMD.VSD
|
|
||||||
sta DRV.CmdBuf.Env
|
|
||||||
|
|
||||||
lda DRV.BLKNUM
|
|
||||||
sta DRV.CmdBuf.BlkL
|
|
||||||
|
|
||||||
lda DRV.BLKNUM+1
|
|
||||||
sta DRV.CmdBuf.BlkH
|
|
||||||
|
|
||||||
stz DRV.CmdBuf.Sum
|
|
||||||
*--------------------------------------
|
|
||||||
* send CMD+CS
|
|
||||||
*--------------------------------------
|
|
||||||
php
|
|
||||||
sei
|
|
||||||
|
|
||||||
phx
|
|
||||||
|
|
||||||
ldy #DRV.200.LEN-1
|
|
||||||
|
|
||||||
.1 lda DRV.200,y
|
|
||||||
sta $200,y
|
|
||||||
dey
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
* lda #SSC.CMD.NOP+SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR
|
|
||||||
DRV.INIT.C inc SSC.CMD SELF MODIFIED
|
|
||||||
|
|
||||||
ldy #4 Send 5 bytes including Sum
|
|
||||||
|
|
||||||
.3 lda DRV.CmdBuf.Sum,y
|
|
||||||
jsr DRV.SSCSend
|
|
||||||
eor DRV.CmdBuf.Sum
|
|
||||||
sta DRV.CmdBuf.Sum
|
|
||||||
dey
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
jsr DRV.SSCSend A = Sum
|
|
||||||
*--------------------------------------
|
|
||||||
plx
|
|
||||||
dex 1-1=0 if read
|
|
||||||
bne DRV.DO.CMD.W go write
|
|
||||||
*--------------------------------------
|
|
||||||
* Read block
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.DO.CMD.R ldy #4 Read Back and check 4 bytes
|
|
||||||
|
|
||||||
.1 jsr DRV.SSCGet
|
|
||||||
eor DRV.CmdBuf.Sum,y
|
|
||||||
bne DRV.DO.CMD.ERR
|
|
||||||
|
|
||||||
dey
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
ldy #4 Read 4 bytes DATE/TIME + 1 Byte Checksum
|
|
||||||
|
|
||||||
.2 jsr DRV.SSCGet
|
|
||||||
|
|
||||||
eor DRV.CmdBuf.Sum
|
|
||||||
sta DRV.CmdBuf.Sum
|
|
||||||
dey
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
tay Last EOR was with Checksum, must be 0
|
|
||||||
bne DRV.DO.CMD.ERR
|
|
||||||
|
|
||||||
* Y=0 from TAY
|
|
||||||
|
|
||||||
* stz DRV.CmdBuf.Sum
|
|
||||||
|
|
||||||
sec
|
|
||||||
.HS 90 BCC
|
|
||||||
.3 clc
|
|
||||||
|
|
||||||
.4 jsr DRV.SSCGet
|
|
||||||
jsr $200
|
|
||||||
eor DRV.CmdBuf.Sum
|
|
||||||
sta DRV.CmdBuf.Sum
|
|
||||||
iny
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
inc DRV.BUFF+1
|
|
||||||
bcs .3
|
|
||||||
|
|
||||||
dec DRV.BUFF+1
|
|
||||||
dec DRV.BUFF+1
|
|
||||||
|
|
||||||
jsr DRV.SSCGet
|
|
||||||
eor DRV.CmdBuf.Sum
|
|
||||||
beq DRV.DO.CMD.OK
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.DO.CMD.ERR jsr DRV.SSCClose
|
|
||||||
jmp DRV.START.IO
|
|
||||||
*--------------------------------------
|
|
||||||
* Write Block
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.DO.CMD.W lda #$B1 lda (),y
|
|
||||||
|
|
||||||
sta $203
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
stz DRV.CmdBuf.Sum
|
|
||||||
|
|
||||||
sec
|
|
||||||
.HS 90 BCC
|
|
||||||
DRV.SSCWrite.1 clc
|
|
||||||
|
|
||||||
DRV.SSCWrite.2 jsr $200
|
|
||||||
|
|
||||||
tax
|
|
||||||
|
|
||||||
DRV.SSCWrite.S lda SSC.STATUS SELF MODIFIED
|
|
||||||
and #SSC.STATUS.TDRE Outgoing char?
|
|
||||||
beq DRV.SSCWrite.S
|
|
||||||
|
|
||||||
DRV.SSCWrite.D stx SSC.DATA SELF MODIFIED
|
|
||||||
|
|
||||||
txa
|
|
||||||
|
|
||||||
eor DRV.CmdBuf.Sum
|
|
||||||
sta DRV.CmdBuf.Sum
|
|
||||||
iny
|
|
||||||
bne DRV.SSCWrite.2
|
|
||||||
|
|
||||||
inc DRV.BUFF+1
|
|
||||||
bcs DRV.SSCWrite.1
|
|
||||||
|
|
||||||
dec DRV.BUFF+1
|
|
||||||
dec DRV.BUFF+1
|
|
||||||
|
|
||||||
* A = DRV.CmdBuf.Sum
|
|
||||||
|
|
||||||
jsr DRV.SSCSend
|
|
||||||
|
|
||||||
* read back CMD
|
|
||||||
ldy #4 Read 5 bytes (echo from server)
|
|
||||||
|
|
||||||
.3 jsr DRV.SSCGet
|
|
||||||
eor DRV.CmdBuf.Sum,y Check 5 bytes (including block Sum)
|
|
||||||
bne DRV.DO.CMD.ERR
|
|
||||||
|
|
||||||
dey
|
|
||||||
bpl .3
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.DO.CMD.OK
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.SSCClose
|
|
||||||
* lda #SSC.CMD.NOP+SSC.CMD.RIRQDIS+SSC.CMD.TE
|
|
||||||
DRV.SSCClose.C dec SSC.CMD SELF MODIFIED
|
|
||||||
DRV.SSCClose.S bit SSC.STATUS SELF MODIFIED
|
|
||||||
bmi DRV.SSCClose.S
|
|
||||||
|
|
||||||
plp
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.SSCSend tax
|
|
||||||
|
|
||||||
DRV.SSCSend.S lda SSC.STATUS SELF MODIFIED
|
|
||||||
and #SSC.STATUS.TDRE Outgoing char?
|
|
||||||
beq DRV.SSCSend.S
|
|
||||||
|
|
||||||
DRV.SSCSend.D stx SSC.DATA SELF MODIFIED
|
|
||||||
|
|
||||||
txa Restore A for checksumming
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.SSCGet
|
|
||||||
DRV.SSCGet.S lda SSC.STATUS SELF MODIFIED
|
|
||||||
and #SSC.STATUS.RDRF incoming char?
|
|
||||||
beq DRV.SSCGet
|
|
||||||
|
|
||||||
DRV.SSCGet.D lda SSC.DATA SELF MODIFIED
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
DRV.200 bit RRAMWRAMBNK1
|
|
||||||
sta (DRV.BUFF),y
|
|
||||||
bit RRAMWRAMBNK2
|
|
||||||
rts
|
|
||||||
DRV.200.LEN .EQ *-DRV.200
|
|
||||||
*--------------------------------------
|
|
||||||
.EP
|
|
||||||
*--------------------------------------
|
|
||||||
.LIST ON
|
|
||||||
DRV.SIZE .EQ *-DRV
|
|
||||||
.LIST OFF
|
|
||||||
*--------------------------------------
|
|
||||||
* CONTROL SECTION :
|
|
||||||
*--------------------------------------
|
|
||||||
.DO DRV.SIZE>255
|
|
||||||
* ERROR:DRV.SIZE too big
|
|
||||||
.FIN
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
|
||||||
SAVE usr/src/sys/pm.vsdrive.s
|
|
||||||
ASM
|
|
Loading…
x
Reference in New Issue
Block a user