From 59b560e64c3ceffc9541dded211db30d3a8af186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 9 Jan 2018 16:35:30 +0000 Subject: [PATCH] Kernel 0.9.1 : BugFix in KM.VSDRIVE & USR Block devices --- SYS/KM.VSDRIVE.S.txt | 548 ------------------------------------------- 1 file changed, 548 deletions(-) delete mode 100644 SYS/KM.VSDRIVE.S.txt diff --git a/SYS/KM.VSDRIVE.S.txt b/SYS/KM.VSDRIVE.S.txt deleted file mode 100644 index fd188eed..00000000 --- a/SYS/KM.VSDRIVE.S.txt +++ /dev/null @@ -1,548 +0,0 @@ -NEW -PREFIX /A2OSX.BUILD -AUTO 4,1 - .LIST OFF - .OP 65C02 - .OR $2000 - .TF /A2OSX.BUILD/SYS/KM.VSDRIVE -*-------------------------------------- - .INB /A2OSX.BUILD/INC/MACROS.I - .INB /A2OSX.BUILD/INC/IO.I - .INB /A2OSX.BUILD/INC/MONITOR.I - .INB /A2OSX.BUILD/INC/PRODOS.I - .INB /A2OSX.BUILD/INC/MLI.ERR.I - .INB /A2OSX.BUILD/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 >LDAXI VSDRIVE.MSG0 - jsr PrintFAX - - jsr VSDRIVE.Check - bcs .90 - -.1 lda #$C1 Self Modified - -.2 jsr SSC.Detect - bcs .99 - - stx DRV+2 DRV.Slotn0 - - sta .1+1 Slot Cn - - and #$0F - pha slot n - - >LDAXI VSDRIVE.SSCOK - jsr PrintFAX - - jsr VSDRIVE.Ping - - bcs .92 - - >LDAXI VSDRIVE.SRVOK - jsr PrintFAX - - jsr VSDRIVE.SetSlot - bcs .91 - - pha save slot - pha 2 times - >LDAXI VSDRIVE.DEVOK - jsr PrintFAX - - jsr VSDRIVE.Install - - >LDAXI VSDRIVE.OK - jsr PrintFAX - rts - -.90 >LDAXI VSDRIVE.DRVKO - jsr PrintFAX - rts - -.91 >LDAXI VSDRIVE.NOSLOT - jsr PrintFAX - rts - -.92 >LDAXI VSDRIVE.SRVKO - jsr PrintFAX - - inc .1+1 - lda .1+1 - cmp #$C8 - bne .2 Go try next SSC.... - -.99 >LDAXI VSDRIVE.SSCKO - jsr PrintFAX - rts -*-------------------------------------- -VSDRIVE.Check bit RRAMWRAMBNK2 - bit RRAMWRAMBNK2 - - clc - lda $D001 - eor DRV - bne .8 - lda $D002 - eor DRV+1 - bne .8 - sec - -.8 bit RROMBNK1 - rts -*-------------------------------------- -SSC.Detect stz TmpPtr1 - sta TmpPtr1+1 - -.1 ldx #DEVSIG.Value-DEVSIG.Offset-1 - -.2 ldy DEVSIG.Offset,x - lda (TmpPtr1),y - cmp DEVSIG.Value,x - bne .3 - - dex - bpl .2 - - lda TmpPtr1+1 A=SlotCN - asl - asl - asl - asl - tax X=SlotN0 - - stz SSC.RESET,x - - jsr VSDRIVE.Wait - - lda #SSC.CTL.CLKINT+SSC.CTL.B115200+SSC.CTL.8D+SSC.CTL.1S+SSC.CMD.NOP - sta SSC.CTL,x - - jsr VSDRIVE.Wait - - lda #SSC.CMD.RIRQDIS+SSC.CMD.TE+SSC.CMD.DTR - sta SSC.CMD,x - - jsr VSDRIVE.Wait - - lda TmpPtr1+1 A=Slot Cn, X=n0 - - clc - rts X=SlotN0, A=SlotCN - -.3 inc TmpPtr1+1 no match, try next slot.... - lda TmpPtr1+1 - cmp #$C8 - bne .1 - -.9 sec - rts -*-------------------------------------- -VSDRIVE.Ping ldx DRV+2 DRV.Slotn0 - - stz VSDRIVE.Ping.TO - stz VSDRIVE.Ping.TO+1 - - ldy #10 - -.1 lda SSC.STATUS,x - and #SSC.STATUS.TDRE Ready for transmit? - bne .20 - - jsr VSDRIVE.IncTimer Wait....... - bne .1 - dey - bne .1 - - lda #1 - -.9 sec - rts Time Out..... - - stz VSDRIVE.Ping.TO - stz VSDRIVE.Ping.TO+1 - -.20 ldy #5 5 bytes to send - -.2 lda VSDRIVE.CMDS-1,y - sta SSC.DATA,x - - jsr VSDRIVE.Wait - -.3 lda SSC.STATUS,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 recieve - sta VSDRIVE.Ping.BC - lda /521^$ffff - sta VSDRIVE.Ping.BC+1 - - stz VSDRIVE.Ping.TO - stz VSDRIVE.Ping.TO+1 - -.5 lda SSC.STATUS,x - and #SSC.STATUS.RDRF incoming char? - bne .6 - - jsr VSDRIVE.IncTimer - bne .5 - - lda #3 - bra .9 - -.6 lda SSC.DATA,x - inc VSDRIVE.Ping.BC - bne .5 - inc VSDRIVE.Ping.BC+1 - bne .5 - - clc - rts -*-------------------------------------- -VSDRIVE.IncTimer - inc VSDRIVE.Ping.TO - bne .8 - inc VSDRIVE.Ping.TO+1 -.8 rts -*-------------------------------------- -VSDRIVE.Wait lda #0 - -.1 dec - bne .1 - 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.SIZE - -.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 - - bit RROMBNK1 - - clc - rts -*-------------------------------------- - .INB /A2OSX.SRC/X.PRINTF.S -*-------------------------------------- -DEVSIG.Offset .HS 05070B0C -DEVSIG.Value .HS 38180131 -VSDRIVE.MSG0 >CSTR "VSDRIVE (ADTPro Vitual Serial HD) Driver For A2osX\n" -VSDRIVE.DRVKO >CSTR "VSDRIVE (Or other custom Driver) Already Installed.\n" -VSDRIVE.SSCKO >CSTR "SSC Not Detected.\n" -VSDRIVE.SSCOK >CSTR "SSC Found At Slot %d.\nContacting ADTPro Server..." -VSDRIVE.SRVKO >CSTR "No Response From ADTPro Server.\n" -VSDRIVE.SRVOK >CSTR "ADTPro Server Is Online.\n" -VSDRIVE.NOSLOT >CSTR "No ProDOS device slot available.\n" -VSDRIVE.DEVOK >CSTR "VSDRIVE Installed 2 devices at S%d,D1 & S%d,D2.\n" -VSDRIVE.OK >CSTR "VSDRIVE Driver Successfully Installed.\n" -*-------------------------------------- -* ProDOS $BE41->$BE4B Patch for switching to BANK2 (10 bytes) -*-------------------------------------- -PATCH .PH DRV.EntryPoint - bit RRAMWRAMBNK2 - jsr $D001 - bit RRAMWRAMBNK1 - rts - .EP -PATCH.SIZE .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 -* 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 .EQ * - .PH $D001 Main LC Bnk 2 $D001->$DFFF - cld -DRV.Slotn0 ldx #$ff Self Modified - lda DRV.COMMAND S=0,R=1,W=2,F=3 - bne .1 - - ldx #$ff return Status - ldy #$ff -.8 lda #0 - clc - rts - -.1 cmp #3 - beq .8 Format .... -* bcs DRV.DO.CMD.ERR more....IO error - - ora #2 W=2,R=3 - ldy DRV.UNITNUM - bpl .2 - - adc #2 CC from bcs - -.2 sta DRV.CmdBuf.Cmd store cmd - eor #ADT.CMD.VSD - eor DRV.BLKNUM - eor DRV.BLKNUM+1 - sta DRV.CmdBuf.Sum Compute & store CheckSum - - lda DRV.BLKNUM - sta DRV.CmdBuf.BlkL - - lda DRV.BLKNUM+1 - sta DRV.CmdBuf.BlkH - -* send CMD+CS - ldy #4 Send 5 bytes including Sum - -.3 lda DRV.CmdBuf.Sum,y - jsr DRV.SSCSend - dey - bpl .3 - - ldy #8 - -.5 lda DRV.READWRITE,y - sta $100,y - dey - bpl .5 -*-------------------------------------- - lda DRV.COMMAND - dec 1-1=0 if read - bne DRV.DO.CMD.W go write -*-------------------------------------- -* Read block -*-------------------------------------- -DRV.DO.CMD.R ldy #3 Read Back and check 4 bytes - -.1 jsr DRV.SSCGet - eor DRV.CmdBuf.BlkH,y - bne DRV.DO.CMD.ERR - dey - bpl .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 - -.3 jsr DRV.SSCGet - jsr $100 - eor DRV.CmdBuf.Sum - sta DRV.CmdBuf.Sum - iny - bne .3 - - bcc .4 - inc DRV.BUFF+1 - clc - bcc .3 - -.4 dec DRV.BUFF+1 - - jsr DRV.SSCGet - - eor DRV.CmdBuf.Sum - bne DRV.DO.CMD.ERR - rts A=0,CC from bcc .4 -*-------------------------------------- -DRV.DO.CMD.ERR1 pla - pla - -DRV.DO.CMD.ERR lda #MLI.E.IO - sec - rts -*-------------------------------------- -* Write Block -*-------------------------------------- -DRV.DO.CMD.W lda #$B1 lda (),y - - sta $103 - - ldy #0 - - stz DRV.CmdBuf.Sum - - sec - -.1 jsr $100 - jsr DRV.SSCSend - eor DRV.CmdBuf.Sum - sta DRV.CmdBuf.Sum - iny - bne .1 - - bcc .2 - - inc DRV.BUFF+1 - clc - bcc .1 - -.2 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 - rts -*-------------------------------------- -DRV.SSCSend sta .2+1 - -.1 lda SSC.STATUS,x -* bit #SSC.STATUS.DCD+SSC.STATUS.DSR -* beq DRV.DO.CMD.ERR1 - - and #SSC.STATUS.TDRE Outgoing char? - beq .1 - -.2 lda #$ff - sta SSC.DATA,x - - rts -*-------------------------------------- -DRV.SSCGet lda SSC.STATUS,x -* bit #SSC.STATUS.DCD+SSC.STATUS.DSR -* beq DRV.DO.CMD.ERR1 - - and #SSC.STATUS.RDRF incoming char? - beq DRV.SSCGet - - lda SSC.DATA,x - rts -*-------------------------------------- -DRV.READWRITE bit RRAMWRAMBNK1 - sta (DRV.BUFF),y - bit RRAMWRAMBNK2 - rts -*-------------------------------------- -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 .DA #ADT.CMD.VSD -*-------------------------------------- - .EP -*-------------------------------------- - .LIST ON -DRV.SIZE .EQ *-DRV - .LIST OFF -*-------------------------------------- -* CONTROL SECTION : -*-------------------------------------- - .DO DRV.SIZE>255 -* ERROR:DRV.SIZE too big - .FIN -*-------------------------------------- -MAN -SAVE /A2OSX.SRC/SYS/KM.VSDRIVE.S -ASM