Kernel version 0.9 : VSDRIVE bugfix in write block

This commit is contained in:
Rémy GIBERT 2017-01-23 22:32:06 +01:00
parent fe833adeea
commit 77965e5c9d
4 changed files with 82 additions and 39 deletions

Binary file not shown.

Binary file not shown.

View File

@ -67,6 +67,8 @@ In Progress : moving TCPIP to socket API
| ------- | ------ | ------- | | ------- | ------ | ------- |
| KM.NSC | Working | No-Slot-Clock | | KM.NSC | Working | No-Slot-Clock |
| KM.RAMWORKS | Working | AE-Ramworks I,II,III | | KM.RAMWORKS | Working | AE-Ramworks I,II,III |
| KM.VSDRIVE | Working | AdtPRO Virtual Drive |
| KM.APPLETALK | Working | AppleTalk Support for ProDOS |
## SBIN,Daemons/Commands: ## SBIN,Daemons/Commands:
| Name | Status | Comment | K.Ver | | Name | Status | Comment | K.Ver |

View File

@ -26,14 +26,14 @@ VSDRIVE.Init >LDAXI VSDRIVE.MSG0
jsr VSDRIVE.Check jsr VSDRIVE.Check
bcc .1 bcc .1
>LDAXI VSDRIVE.MSG1 >LDAXI VSDRIVE.DRVKO
jsr PrintCStrAX jsr PrintCStrAX
rts rts
.1 jsr SSC.Detect .1 jsr SSC.Detect
bcc .2 bcc .2
>LDAXI VSDRIVE.MSG2 >LDAXI VSDRIVE.SSCKO
jsr PrintCStrAX jsr PrintCStrAX
rts rts
@ -43,23 +43,34 @@ VSDRIVE.Init >LDAXI VSDRIVE.MSG0
lsr lsr
lsr lsr
pha pha
>LDAXI VSDRIVE.MSG3 >LDAXI VSDRIVE.SSCOK
jsr PrintCStrAX jsr PrintCStrAX
jsr VSDRIVE.SetSlot jsr VSDRIVE.Ping
bcc .3 bcc .3
>LDAXI VSDRIVE.MSG4
>LDAXI VSDRIVE.SRVKO
jsr PrintCStrAX
rts
.3 >LDAXI VSDRIVE.SRVOK
jsr PrintCStrAX
jsr VSDRIVE.SetSlot
bcc .4
>LDAXI VSDRIVE.NOSLOT
jsr PrintCStrAX jsr PrintCStrAX
rts rts
.3 pha save slot .4 pha save slot
pha 2 times pha 2 times
>LDAXI VSDRIVE.MSG5 >LDAXI VSDRIVE.DEVOK
jsr PrintCStrAX jsr PrintCStrAX
jsr VSDRIVE.Install jsr VSDRIVE.Install
>LDAXI VSDRIVE.MSG6 >LDAXI VSDRIVE.OK
jsr PrintCStrAX jsr PrintCStrAX
rts rts
@ -118,9 +129,37 @@ SSC.Detect stz TmpPtr1
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
VSDRIVE.Ping VSDRIVE.Ping ldx DRV+2 DRV.Slotn0
.10 lda #$C4 Send "D" (DIR)
sta SSC.DATA,x
.1 inc VSDRIVE.Ping.TO
bne .2
inc VSDRIVE.Ping.TO+1
beq .9
.2 lda SSC.STATUS,x
and #SSC.STATUS.RDRF incoming char?
bne .1
lda SSC.DATA,x
bne .2 end of string ?
.3 lda SSC.STATUS,x
and #SSC.STATUS.RDRF incoming char?
bne .3
lda SSC.DATA,x
bne .10 end of list ?
clc clc
rts rts
.9 sec
rts
VSDRIVE.Ping.TO .DA 0
*-------------------------------------- *--------------------------------------
* Find 2 free slots in DEVPTRS (D1 & D2) * Find 2 free slots in DEVPTRS (D1 & D2)
*-------------------------------------- *--------------------------------------
@ -196,13 +235,15 @@ VSDRIVE.Install ldx #PATCH.SIZE
*-------------------------------------- *--------------------------------------
DEVSIG.Offset .HS 05070B0C DEVSIG.Offset .HS 05070B0C
DEVSIG.Value .HS 38180131 DEVSIG.Value .HS 38180131
VSDRIVE.MSG0 >CSTR "VSDRIVE (ADT Vitual Serial Hard Drive) Driver For A2osX\n" VSDRIVE.MSG0 >CSTR "VSDRIVE (ADTPro Vitual Serial HD) Driver For A2osX\n"
VSDRIVE.MSG1 >CSTR "VSDRIVE (Or other custom Driver) Already Installed.\n" VSDRIVE.DRVKO >CSTR "VSDRIVE (Or other custom Driver) Already Installed.\n"
VSDRIVE.MSG2 >CSTR "SSC Not Detected.\n" VSDRIVE.SSCKO >CSTR "SSC Not Detected.\n"
VSDRIVE.MSG3 >CSTR "SCC Found At Slot %d.\n" VSDRIVE.SSCOK >CSTR "SCC Found At Slot %d.\n"
VSDRIVE.MSG4 >CSTR "No ProDOS device slot available.\n" VSDRIVE.SRVKO >CSTR "No Response From ADTPro Server.\n"
VSDRIVE.MSG5 >CSTR "VSDRIVE Installed 2 devices at S%dD1 & S%dD2.\n" VSDRIVE.SRVOK >CSTR "ADTPro Server Is Online.\n"
VSDRIVE.MSG6 >CSTR "VSDRIVE Driver Successfully Installed.\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) * ProDOS $BE41->$BE4B Patch for switching to BANK2 (10 bytes)
*-------------------------------------- *--------------------------------------
@ -277,14 +318,6 @@ DRV.Slotn0 ldx #$ff Self Modified
jsr DRV.SSCSend jsr DRV.SSCSend
dey dey
bpl .3 bpl .3
* read back CMD
ldy #3 Read Back and check 4 bytes
.4 jsr DRV.SSCGet
eor DRV.CmdBuf.BlkHi,y
bne DRV.DO.CMD.ERR
dey
bpl .4
ldy #8 ldy #8
@ -293,28 +326,34 @@ DRV.Slotn0 ldx #$ff Self Modified
dey dey
bpl .5 bpl .5
*--------------------------------------
lda DRV.COMMAND lda DRV.COMMAND
dec 1-1=0 if read dec 1-1=0 if read
bne DRV.DO.CMD.W go write bne DRV.DO.CMD.W go write
*-------------------------------------- *--------------------------------------
* Read block : Discard ProDOS time recieved from Server (4 bytes) * Read block
*-------------------------------------- *--------------------------------------
DRV.DO.CMD.R ldy #4 Read 4 bytes DRV.DO.CMD.R ldy #3 Read Back and check 4 bytes
.1 jsr DRV.SSCGet .1 jsr DRV.SSCGet
eor DRV.CmdBuf.BlkHi,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 eor DRV.CmdBuf.Sum
sta DRV.CmdBuf.Sum sta DRV.CmdBuf.Sum
dey dey
bne .1 bpl .2
* recieve Header Sum and check tay Last EOR was with Checksum, must be 0
jsr DRV.SSCGet
eor DRV.CmdBuf.Sum
bne DRV.DO.CMD.ERR bne DRV.DO.CMD.ERR
* Y=0 from dey/bne * Y=0 from TAY
stz DRV.CmdBuf.Sum stz DRV.CmdBuf.Sum
sec sec
@ -355,7 +394,7 @@ DRV.DO.CMD.W lda #$B1 lda (),y
ldy #0 ldy #0
stz DRV.CmdBuf.Sum stz DRV.CmdBuf.Sum
sec sec
.1 jsr $100 .1 jsr $100
@ -377,6 +416,8 @@ DRV.DO.CMD.W lda #$B1 lda (),y
jsr DRV.SSCSend jsr DRV.SSCSend
* read back CMD
ldy #4 Read 5 bytes (echo from server) ldy #4 Read 5 bytes (echo from server)
.3 jsr DRV.SSCGet .3 jsr DRV.SSCGet
@ -387,12 +428,6 @@ DRV.DO.CMD.W lda #$B1 lda (),y
bpl .3 bpl .3
rts rts
*-------------------------------------- *--------------------------------------
DRV.CmdBuf.Sum .BS 1 Reverse order for dey
DRV.CmdBuf.BlkHi .BS 1
DRV.CmdBuf.BlkLo .BS 1
DRV.CmdBuf.Cmd .BS 1
DRV.CmdBuf.Env .DA #VS.CMD
*--------------------------------------
DRV.SSCSend sta .2+1 DRV.SSCSend sta .2+1
.1 lda SSC.STATUS,x .1 lda SSC.STATUS,x
@ -421,6 +456,12 @@ DRV.READWRITE bit RRAMWRAMBNK1
sta (DRV.BUFF),y sta (DRV.BUFF),y
bit RRAMWRAMBNK2 bit RRAMWRAMBNK2
rts rts
*--------------------------------------
DRV.CmdBuf.Sum .BS 1 Reverse order for dey
DRV.CmdBuf.BlkHi .BS 1
DRV.CmdBuf.BlkLo .BS 1
DRV.CmdBuf.Cmd .BS 1
DRV.CmdBuf.Env .DA #VS.CMD
*-------------------------------------- *--------------------------------------
.EP .EP
*-------------------------------------- *--------------------------------------