mirror of
https://github.com/dschmenk/apple2pi.git
synced 2025-02-08 22:30:42 +00:00
Implement correct drive stat for pidrive
This commit is contained in:
parent
0376c18141
commit
48b4df9e15
@ -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)
|
||||
|
@ -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
|
||||
|
14
src/a2pid.c
14
src/a2pid.c
@ -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 */
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user