Implement correct drive stat for pidrive

This commit is contained in:
dschmenk 2015-02-05 15:19:46 -08:00
parent 0376c18141
commit 48b4df9e15
3 changed files with 37 additions and 21 deletions

View File

@ -259,6 +259,15 @@ IOERR: LDA #PDIOERR
CMDERR: PLP
SEC
DOCLK: RTS ; NO OP CLOCK ROUTINE
STATUS: JSR RECVACC
TAX
JSR RECVACC
TAY
CMDEX: JSR RECVACC
BNE CMDERR
PLP
CLC
RTS
RDBLK: JSR RECVACC
STA (PDBUFF),Y
INY
@ -266,13 +275,7 @@ RDBLK: JSR RECVACC
INC PDBUFH
DEX
BNE RDBLK
STATUS: LDX #$FF
DEY ; LDY #$FF
CMDEX: JSR RECVACC
BNE CMDERR
PLP
CLC
RTS
BEQ CMDEX
WRBLK: LDA (PDBUFF),Y
JSR SENDACC
INY
@ -300,3 +303,5 @@ RECVWT: LDA ACIASR
BEQ RECVWT
FIXUP4: LDA ACIADR
RTS
.ASSERT * - DOCMD <= DRVRLEN, error, "Driver too big"
.OUT .SPRINTF("Driver size %i", * - DOCMD)

View File

@ -249,18 +249,19 @@ STATUS:
LDA #'S'-$40
STA INDCTR+3
.ENDIF
LDA IOSLOT
AND #$0F
TAY
JSR RECVACC
LDX #$FF
LDY #$FF
; PHA
; JSR RECVACC
; TAY
; PLA
; TAX
; BNE :+
; CPY #$00
; BEQ NODEV
;: LDA #$00
STA SCRTCH6,Y
JSR RECVACC
STA SCRTCH7,Y
JSR RECVACC
PHA
LDX SCRTCH6,Y
LDA SCRTCH7,Y
TAY
PLA
RTS
;*
;* READ A BLOCK (512 BYTES) FROM SIDRIVE
@ -406,7 +407,7 @@ ENDCMD:
.REPEAT $C700+250-*
DB $00
.ENDREP
DB "Si" ; SIGNATURE
DB "SI" ; SIGNATURE
DW 0 ; USE STATUS TO GET SIZE
DB $97 ; REMOVEABLE, 2 DEVICES, R/W
DB <CMDENTRY

View File

@ -140,8 +140,18 @@ int vdrvtime(int afd)
{
return write(afd, prodos_time(), 4);
}
int vdrvstatus(int drive)
int vdrvstat(int afd, int drive)
{
struct stat vstat;
unsigned char size_buff[2];
if (vdrvfd[drive])
fstat(vdrvfd[drive], &vstat);
else
vstat.st_size = 0;
size_buff[0] = vstat.st_size >> 9;
size_buff[1] = vstat.st_size >> 17;
write(afd, size_buff, 2);
return vdrvfd[drive] == 0 ? 0x28 : 0x00;
}
int vdrvread(int afd, int drive, int block)
@ -833,7 +843,7 @@ reset:
//printf("vdrive: STATUS unit:%d\n", (iopkt[0] >> 1) & 0x01);
iopkt[3] = iopkt[0] + 1; /* ack */
write(a2fd, &iopkt[3], 1);
iopkt[0] = vdrvstatus((iopkt[0] >> 1) & 0x01);
iopkt[0] = vdrvstat(a2fd, (iopkt[0] >> 1) & 0x01);
write(a2fd, iopkt, 1);
if (a2reqlist && !(a2reqlist->type & AWAIT_COMPLETE)) /* resend last request */
{