diff --git a/pidrive/pidrive.s b/pidrive/pidrive.s index e0c51f7..e112b78 100755 --- a/pidrive/pidrive.s +++ b/pidrive/pidrive.s @@ -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) diff --git a/pidrive/rom.s b/pidrive/rom.s index dea8f5b..38880ff 100755 --- a/pidrive/rom.s +++ b/pidrive/rom.s @@ -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 > 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 */ {