Implement correct drive stat for pidrive
This commit is contained in:
parent
0376c18141
commit
48b4df9e15
|
@ -259,6 +259,15 @@ IOERR: LDA #PDIOERR
|
||||||
CMDERR: PLP
|
CMDERR: PLP
|
||||||
SEC
|
SEC
|
||||||
DOCLK: RTS ; NO OP CLOCK ROUTINE
|
DOCLK: RTS ; NO OP CLOCK ROUTINE
|
||||||
|
STATUS: JSR RECVACC
|
||||||
|
TAX
|
||||||
|
JSR RECVACC
|
||||||
|
TAY
|
||||||
|
CMDEX: JSR RECVACC
|
||||||
|
BNE CMDERR
|
||||||
|
PLP
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
RDBLK: JSR RECVACC
|
RDBLK: JSR RECVACC
|
||||||
STA (PDBUFF),Y
|
STA (PDBUFF),Y
|
||||||
INY
|
INY
|
||||||
|
@ -266,13 +275,7 @@ RDBLK: JSR RECVACC
|
||||||
INC PDBUFH
|
INC PDBUFH
|
||||||
DEX
|
DEX
|
||||||
BNE RDBLK
|
BNE RDBLK
|
||||||
STATUS: LDX #$FF
|
BEQ CMDEX
|
||||||
DEY ; LDY #$FF
|
|
||||||
CMDEX: JSR RECVACC
|
|
||||||
BNE CMDERR
|
|
||||||
PLP
|
|
||||||
CLC
|
|
||||||
RTS
|
|
||||||
WRBLK: LDA (PDBUFF),Y
|
WRBLK: LDA (PDBUFF),Y
|
||||||
JSR SENDACC
|
JSR SENDACC
|
||||||
INY
|
INY
|
||||||
|
@ -300,3 +303,5 @@ RECVWT: LDA ACIASR
|
||||||
BEQ RECVWT
|
BEQ RECVWT
|
||||||
FIXUP4: LDA ACIADR
|
FIXUP4: LDA ACIADR
|
||||||
RTS
|
RTS
|
||||||
|
.ASSERT * - DOCMD <= DRVRLEN, error, "Driver too big"
|
||||||
|
.OUT .SPRINTF("Driver size %i", * - DOCMD)
|
||||||
|
|
|
@ -249,18 +249,19 @@ STATUS:
|
||||||
LDA #'S'-$40
|
LDA #'S'-$40
|
||||||
STA INDCTR+3
|
STA INDCTR+3
|
||||||
.ENDIF
|
.ENDIF
|
||||||
|
LDA IOSLOT
|
||||||
|
AND #$0F
|
||||||
|
TAY
|
||||||
JSR RECVACC
|
JSR RECVACC
|
||||||
LDX #$FF
|
STA SCRTCH6,Y
|
||||||
LDY #$FF
|
JSR RECVACC
|
||||||
; PHA
|
STA SCRTCH7,Y
|
||||||
; JSR RECVACC
|
JSR RECVACC
|
||||||
; TAY
|
PHA
|
||||||
; PLA
|
LDX SCRTCH6,Y
|
||||||
; TAX
|
LDA SCRTCH7,Y
|
||||||
; BNE :+
|
TAY
|
||||||
; CPY #$00
|
PLA
|
||||||
; BEQ NODEV
|
|
||||||
;: LDA #$00
|
|
||||||
RTS
|
RTS
|
||||||
;*
|
;*
|
||||||
;* READ A BLOCK (512 BYTES) FROM SIDRIVE
|
;* READ A BLOCK (512 BYTES) FROM SIDRIVE
|
||||||
|
@ -406,7 +407,7 @@ ENDCMD:
|
||||||
.REPEAT $C700+250-*
|
.REPEAT $C700+250-*
|
||||||
DB $00
|
DB $00
|
||||||
.ENDREP
|
.ENDREP
|
||||||
DB "Si" ; SIGNATURE
|
DB "SI" ; SIGNATURE
|
||||||
DW 0 ; USE STATUS TO GET SIZE
|
DW 0 ; USE STATUS TO GET SIZE
|
||||||
DB $97 ; REMOVEABLE, 2 DEVICES, R/W
|
DB $97 ; REMOVEABLE, 2 DEVICES, R/W
|
||||||
DB <CMDENTRY
|
DB <CMDENTRY
|
||||||
|
|
14
src/a2pid.c
14
src/a2pid.c
|
@ -140,8 +140,18 @@ int vdrvtime(int afd)
|
||||||
{
|
{
|
||||||
return write(afd, prodos_time(), 4);
|
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;
|
return vdrvfd[drive] == 0 ? 0x28 : 0x00;
|
||||||
}
|
}
|
||||||
int vdrvread(int afd, int drive, int block)
|
int vdrvread(int afd, int drive, int block)
|
||||||
|
@ -833,7 +843,7 @@ reset:
|
||||||
//printf("vdrive: STATUS unit:%d\n", (iopkt[0] >> 1) & 0x01);
|
//printf("vdrive: STATUS unit:%d\n", (iopkt[0] >> 1) & 0x01);
|
||||||
iopkt[3] = iopkt[0] + 1; /* ack */
|
iopkt[3] = iopkt[0] + 1; /* ack */
|
||||||
write(a2fd, &iopkt[3], 1);
|
write(a2fd, &iopkt[3], 1);
|
||||||
iopkt[0] = vdrvstatus((iopkt[0] >> 1) & 0x01);
|
iopkt[0] = vdrvstat(a2fd, (iopkt[0] >> 1) & 0x01);
|
||||||
write(a2fd, iopkt, 1);
|
write(a2fd, iopkt, 1);
|
||||||
if (a2reqlist && !(a2reqlist->type & AWAIT_COMPLETE)) /* resend last request */
|
if (a2reqlist && !(a2reqlist->type & AWAIT_COMPLETE)) /* resend last request */
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue