From 5014a47a6400af32b981431a3a16a5cd9e9e0109 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 13 Dec 2025 12:40:23 -0800 Subject: [PATCH] SCSI and ESPSD Driver Cleaning - Improved error handling flow - Simplified ESPSD I/O timeout handling --- Source/HBIOS/espsd.asm | 245 ++++++++++++++++++++--------------------- Source/HBIOS/scsi.asm | 87 +++++++-------- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 4 files changed, 162 insertions(+), 174 deletions(-) diff --git a/Source/HBIOS/espsd.asm b/Source/HBIOS/espsd.asm index 5fef9aa7..3772f970 100644 --- a/Source/HBIOS/espsd.asm +++ b/Source/HBIOS/espsd.asm @@ -288,8 +288,9 @@ ESPSD_INIT5: CALL ESPSD_INITDEV ; INITIALIZE DEVICE #IF (ESPSDTRACE < 2) JP NZ,ESPSD_PRTSTAT -#ENDIF +#ELSE RET NZ +#ENDIF ; CALL ESPSD_PRTPREFIX ; TAG FOR ACTIVE DEVICE ; @@ -345,7 +346,7 @@ ESPSD_READ: ;;;LD A,'R' ;;;CALL COUT ;;;CALL PRTHEXWORDHL - LD A,ESPSD_CMD_READ ; SETUP FOR BLOCK READ CMD + LD E,ESPSD_CMD_READ ; SETUP FOR BLOCK READ CMD JP ESPSD_IO ; CONTINUE TO GENERIC IO ROUTINE ; ; @@ -356,7 +357,7 @@ ESPSD_WRITE: ;;;LD A,'W' ;;;CALL COUT ;;;CALL PRTHEXWORDHL - LD A,ESPSD_CMD_WRITE ; SETUP FOR BLOCK WRITE CMD + LD E,ESPSD_CMD_WRITE ; SETUP FOR BLOCK WRITE CMD JP ESPSD_IO ; CONTINUE TO GENERIC IO ROUTINE ; ; @@ -501,15 +502,23 @@ ESPSD_INITDEV1: ; COMMON SECTOR I/O ; ESPSD_IO: - LD (ESPSD_CMDVAL),A ; SAVE THE COMMAND - LD (ESPSD_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS -; - ; CHECK FOR ERROR STATUS AND REINIT? ; #IF (ESPSDTRACE == 1) - LD HL,ESPSD_PRTERR ; SET UP SD_PRTERR - PUSH HL ; ... TO FILTER ALL EXITS + PUSH HL + LD HL,ESPSD_PRTERR ; SET UP ESPSD_PRTERR + EX (SP),HL ; ... TO FILTER ALL EXITS #ENDIF +; + PUSH DE + PUSH HL + CALL ESPSD_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO + POP HL + POP DE + RET NZ ; BAIL OUT ON ERROR +; + LD A,E ; COMMAND TO ACCUM + LD (ESPSD_CMDVAL),A ; SAVE THE COMMAND + LD (ESPSD_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS ; ; SELECT PRI/SEC DEVICE CALL ESPSD_SELECT ; SELECT DEVICE @@ -532,7 +541,7 @@ ESPSD_IO: ESPSD_IO2: CALL ESPSD_BLKWRITE ; DO THE WRITE ESPSD_IO3: - JP NZ,ESPSD_ERR ; ON ERROR, RECORD AND BAIL OUT + JR NZ,ESPSD_IO4 ; IF ERROR, SKIP INCREMENT ; ; INCREMENT LBA LD A,ESPSD_LBA ; LBA OFFSET @@ -544,11 +553,24 @@ ESPSD_IO3: INC (HL) ; BUMP DMA BY INC (HL) ; ... 512 BYTES ; - ; CLEAN UP - LD HL,(ESPSD_DSKBUF) ; CURRENT DMA TO HL XOR A ; SIGNAL SUCCESS +ESPSD_IO4: + LD HL,(ESPSD_DSKBUF) ; CURRENT DMA TO HL + OR A ; SET FLAGS + RET Z ; DONE IF NO ERROR + LD A,ERR_IO ; SIGNAL IO ERROR + OR A ; SET FLAGS RET ; AND DONE ; +; CHECK CURRENT DEVICE FOR ERROR STATUS AND ATTEMPT TO RECOVER +; VIA RESET IF DEVICE IS IN ERROR. +; +ESPSD_CHKERR: + LD A,(IY+ESPSD_STAT) ; GET STATUS + OR A ; SET FLAGS + CALL NZ,ESPSD_RESET ; IF ERROR STATUS, RESET BUS + RET +; ;============================================================================= ; COMMAND PROCESSING ;============================================================================= @@ -568,11 +590,9 @@ ESPSD_INITCARD: ; ; GET CAPACITY LD E,ESPSD_CMD_CAP ; GET CAPACITY COMMAND - CALL ESPSD_CMD_SLOW ; SEND IT + CALL ESPSD_CMD ; SEND IT RET NZ ; HANDLE ERROR ; - - LD A,ESPSD_MEDCAP ; OFFSET TO CAPACITY FIELD CALL LDHLIYA ; HL := IY + A, REG A TRASHED LD A,4 ; START AT END FOR LITTLE ENDIAN @@ -582,7 +602,7 @@ ESPSD_INITCARD: ESPSD_INITCARD1: DEC HL ; DEC POINTER PUSH BC ; SAVE LOOP CONTROL - CALL ESPSD_GETBYTE_SLOW ; FIRST BYTE (MSB) + CALL ESPSD_GETBYTE ; FIRST BYTE (MSB) POP BC ; RESTORE LOOP CONTROL RET NZ ; HANDLE ERROR LD (HL),E ; SAVE IT @@ -594,18 +614,18 @@ ESPSD_INITCARD1: ; ESPSD_FWVER: LD E,ESPSD_CMD_FWVER ; FWVER COMMAND - CALL ESPSD_CMD_SLOW ; SEND IT + CALL ESPSD_CMD ; SEND IT RET NZ ; HANDLE ERROR - CALL ESPSD_GETBYTE_SLOW ; GET BOARD ID + CALL ESPSD_GETBYTE ; GET BOARD ID RET NZ ; HANDLE ERROR LD D,E ; SAVE IN D - CALL ESPSD_GETBYTE_SLOW ; GET VER MAJOR + CALL ESPSD_GETBYTE ; GET VER MAJOR RET NZ ; HANDLE ERROR LD H,E ; PUT IN H - CALL ESPSD_GETBYTE_SLOW ; GET VER MINOR + CALL ESPSD_GETBYTE ; GET VER MINOR RET NZ ; HANDLE ERROR LD L,E ; PUT IN H - CALL ESPSD_GETBYTE_SLOW ; GET RESULT + CALL ESPSD_GETBYTE ; GET RESULT RET NZ ; HANDLE ERROR LD A,E ; RESULT TO ACCUM LD E,D ; BOARD ID BACK TO E @@ -626,10 +646,10 @@ ESPSD_SELECT: ; ESPSD_RUNCMD: LD E,A ; PUT IN E - CALL ESPSD_CMD_SLOW ; SEND COMMAND + CALL ESPSD_CMD ; SEND COMMAND RET NZ ; HANDLE ERROR ESPSD_GETRESULT: - CALL ESPSD_GETBYTE_SLOW ; GET RESULT + CALL ESPSD_GETBYTE ; GET RESULT RET NZ ; HANDLE ERROR LD A,E ; RESULT TO ACCUM OR A ; SET FLAGS @@ -644,7 +664,7 @@ ESPSD_GETRESULT: ; ESPSD_SETLBA: LD E,ESPSD_CMD_SETLBA ; SETLBA COMMAND - CALL ESPSD_CMD_SLOW ; SEND IT + CALL ESPSD_CMD ; SEND IT RET NZ ; HANDLE ERROR LD A,4 ; LITTLE ENDIAN CALL ADDHLA ; BUMP TO END OF LBA BYTES @@ -654,12 +674,12 @@ ESPSD_SETLBA1: DEC HL ; DEC POINTER LD E,(HL) ; GET NEXT BYTE TO SEND PUSH BC ; SAVE LOOP CONTROL - CALL ESPSD_PUTBYTE_SLOW ; SEND BYTE + CALL ESPSD_PUTBYTE ; SEND BYTE POP BC ; RESTORE LOOP CONTROL RET NZ ; HANDLE ERROR DJNZ ESPSD_SETLBA1 ; LOOP AS NEEDED ; - CALL ESPSD_GETBYTE_SLOW ; GET RESULT + CALL ESPSD_GETBYTE ; GET RESULT RET NZ ; HANDLE ERROR LD A,E ; RESULT TO ACCUM OR A ; SET FLAGS @@ -672,7 +692,7 @@ ESPSD_SETLBA1: ; ESPSD_BLKREAD: LD E,ESPSD_CMD_READ - CALL ESPSD_CMD_SLOW + CALL ESPSD_CMD RET NZ ; LD B,0 ; LOOP COUNTER @@ -680,13 +700,13 @@ ESPSD_BLKREAD: #IF FALSE ESPSD_BLKREAD1: PUSH BC - CALL ESPSD_GETBYTE_SLOW + CALL ESPSD_GETBYTE POP BC RET NZ LD (HL),E INC HL PUSH BC - CALL ESPSD_GETBYTE_SLOW + CALL ESPSD_GETBYTE POP BC RET NZ LD (HL),E @@ -699,14 +719,13 @@ ESPSD_BLKREAD1: CALL ESPSD_BLKREAD2 ; DO SECOND 256 BYTES #ENDIF ; - CALL ESPSD_GETBYTE_SLOW ; GET RESULT + CALL ESPSD_GETBYTE ; GET RESULT RET NZ ; HANDLE ERROR LD A,E ; RESULT TO ACCUM OR A ; SET FLAGS - RET Z ; GOOD RETURN - LD A,ESPSD_STIOERR ; CALL THIS AN IO ERROR - OR A ; SET FLAGS - RET ; DONE + JP NZ,ESPSD_IOERR ; HANDLE AS IO ERROR + XOR A ; SIGNAL SUCCESS + RET ; AND DONE ; ESPSD_BLKREAD2: ; READ BYTES FAST (NO TIMEOUT CHECK) @@ -726,7 +745,7 @@ ESPSD_BLKREAD2A: ; ESPSD_BLKWRITE: LD E,ESPSD_CMD_WRITE - CALL ESPSD_CMD_SLOW + CALL ESPSD_CMD RET NZ ; LD B,0 ; LOOP COUNTER @@ -736,13 +755,13 @@ ESPSD_BLKWRITE1: LD E,(HL) INC HL PUSH BC - CALL ESPSD_PUTBYTE_SLOW + CALL ESPSD_PUTBYTE POP BC RET NZ LD E,(HL) INC HL PUSH BC - CALL ESPSD_PUTBYTE_SLOW + CALL ESPSD_PUTBYTE POP BC RET NZ DJNZ ESPSD_BLKWRITE1 @@ -753,14 +772,13 @@ ESPSD_BLKWRITE1: CALL ESPSD_BLKWRITE2 ; DO SECOND 256 BYTES #ENDIF ; - CALL ESPSD_GETBYTE_SLOW ; GET RESULT + CALL ESPSD_GETBYTE ; GET RESULT RET NZ ; HANDLE ERROR LD A,E ; RESULT TO ACCUM OR A ; SET FLAGS - RET Z ; GOOD RETURN - LD A,ESPSD_STIOERR ; CALL THIS AN IO ERROR - OR A ; SET FLAGS - RET ; DONE + JP NZ,ESPSD_IOERR ; HANDLE AS IO ERROR + XOR A ; SIGNAL SUCCESS + RET ; AND DONE ; ESPSD_BLKWRITE2: ; WRITE BYTES FAST (NO TIMEOUT CHECK) @@ -791,126 +809,103 @@ ESPSD_CMD: RET NZ JR ESPSD_PUTBYTE ; -; SEND COMMAND BYTE IN E TO ESP32 -; -ESPSD_CMD_SLOW: - PUSH DE - LD E,$33 ; COMMAND PREFIX BYTE - CALL ESPSD_PUTBYTE_SLOW - POP DE - RET NZ - JR ESPSD_PUTBYTE_SLOW -; ; WRITE BYTE IN E TO ESP32 ; RETURN STATUS IN A (0=SUCCESS) +; BC IS DESTROYED ; ESPSD_PUTBYTE: #IF (ESPSDTRACE >= 3) CALL PC_GT #ENDIF - LD B,0 + + PUSH HL ; PRESERVE HL LD C,(IY+ESPSD_IOBASE) -ESPSD_PUTBYTE1: + LD HL,100 * CPUMHZ ; SETUP OUTER LOOP COUNTER +; +ESPSD_PUTBYTE1: ; OUTER LOOP + LD B,0 ; SETUP INNER LOOP COUNTER +; +ESPSD_PUTBYTE2: ; INNER LOOP #IF (PLATFORM == PLT_SZ180) IN A,(C) ; EXTRA READ FOR Z180 STABILITY #ENDIF - IN A,(C) - BIT 0,A - JR Z,ESPSD_PUTBYTE2 - DJNZ ESPSD_PUTBYTE1 - LD A,ESPSD_STTO - OR A - RET -ESPSD_PUTBYTE2: - ; NOPS NEEDED FOR RELIABILITY + IN A,(C) ; READ STATUS + BIT 0,A ; ISOLATE SENDACT (TXF) + JR Z,ESPSD_PUTBYTE3 ; IF NOT ACTIVE, GO TO SEND BYTE + DJNZ ESPSD_PUTBYTE2 ; LOOP SOME MORE +; + DEC HL ; DEC OUTER LOOP COUNTER + LD A,H ; TEST COUNTER + OR L ; ... FOR ZERO + JR NZ,ESPSD_PUTBYTE1 ; IF NOT ZERO, LOOP MORE +; + ; HANDLE TIMEOUT + POP HL ; RECOVER HL + JP ESPSD_TO ; RETURN VIA ERROR HANDLER +; +ESPSD_PUTBYTE3: + POP HL ; RECOVER HL + ; SEND THE DATA BYTE + ; NOPS NEEDED FOR RELIABILITY??? ;NOP \ NOP \ NOP \ NOP \ NOP \ NOP - INC C - OUT (C),E + INC C ; BUMP TO DATA PORT + OUT (C),E ; SEND IT ; #IF (ESPSDTRACE >= 3) LD A,E CALL PRTHEXBYTE #ENDIF ; - XOR A - RET -; -; WRITE BYTE TO ESP32 FROM E WITH EXTRA LONG TIMEOUT -; -ESPSD_PUTBYTE_SLOW: - PUSH HL - LD HL,100 * CPUMHZ ; CPU SPEED SCALED TIMEOUT -ESPSD_PUTBYTE_SLOW1: - PUSH HL - CALL ESPSD_PUTBYTE - POP HL - JR Z,ESPSD_PUTBYTE_SLOW_Z - DEC HL - LD A,H - OR L - JR NZ,ESPSD_PUTBYTE_SLOW1 - LD A,ESPSD_STTO -ESPSD_PUTBYTE_SLOW_Z: - ;CALL PC_SPACE ; *DEBUG* - ;CALL PRTHEXWORDHL ; *DEBUG* - POP HL - OR A ; SET FLAGS - RET + XOR A ; SIGNAL SUCCESS + RET ; DONE ; ; READ BYTE FROM ESP32 INTO E ; RETURN STATUS IN A (0=SUCCESS) +; BC IS DESTROYED ; ESPSD_GETBYTE: #IF (ESPSDTRACE >= 3) CALL PC_LT #ENDIF - LD B,0 + + PUSH HL ; PRESERVE HL LD C,(IY+ESPSD_IOBASE) -ESPSD_GETBYTE1: + LD HL,100 * CPUMHZ ; SETUP OUTER LOOP COUNTER +; +ESPSD_GETBYTE1: ; OUTER LOOP + LD B,0 ; SETUP INNER LOOP COUNTER +; +ESPSD_GETBYTE2: ; INNER LOOP #IF (PLATFORM == PLT_SZ180) IN A,(C) ; EXTRA READ FOR Z180 STABILITY #ENDIF - IN A,(C) - JP M,ESPSD_GETBYTE2 - DJNZ ESPSD_GETBYTE1 - LD A,ESPSD_STTO - OR A - RET -ESPSD_GETBYTE2: - ; NOPS NEEDED FOR RELIABILITY + IN A,(C) ; READ STATUS + JP M,ESPSD_GETBYTE3 ; IF RCV READY, GO TO GET BYTE + DJNZ ESPSD_GETBYTE2 ; LOOP SOME MORE +; + DEC HL ; DEC OUTER LOOP COUNTER + LD A,H ; TEST COUNTER + OR L ; ... FOR ZERO + JR NZ,ESPSD_GETBYTE1 ; IF NOT ZERO, LOOP MORE +; + ; HANDLE TIMEOUT + POP HL ; RECOVER HL + JP ESPSD_TO ; RETURN VIA ERROR HANDLER +; +ESPSD_GETBYTE3: + POP HL ; RECOVER HL + ; NOPS NEEDED FOR RELIABILITY??? ;NOP \ NOP \ NOP \ NOP \ NOP \ NOP - INC C - IN E,(C) + INC C ; BUMP TO DATA PORT + IN E,(C) ; GET DATA BYTE ; #IF (ESPSDTRACE >= 3) LD A,E CALL PRTHEXBYTE #ENDIF ; - XOR A - RET -; -; READ BYTE FROM ESP32 INTO E WITH EXTRA LONG TIMEOUT -; -ESPSD_GETBYTE_SLOW: - PUSH HL - LD HL,100 * CPUMHZ ; CPU SPEED SCALED TIMEOUT -ESPSD_GETBYTE_SLOW1: - PUSH HL - CALL ESPSD_GETBYTE - POP HL - JR Z,ESPSD_GETBYTE_SLOW_Z - DEC HL - LD A,H - OR L - JR NZ,ESPSD_GETBYTE_SLOW1 - LD A,ESPSD_STTO -ESPSD_GETBYTE_SLOW_Z: - ;CALL PC_SPACE ; *DEBUG* - ;CALL PRTHEXWORDHL ; *DEBUG* - POP HL - OR A ; SET FLAGS - RET + XOR A ; SIGNAL SUCCESS + RET ; DONE ; ;============================================================================= ; ERROR HANDLING AND DIAGNOSTICS diff --git a/Source/HBIOS/scsi.asm b/Source/HBIOS/scsi.asm index 6e5fb294..94cadcb0 100644 --- a/Source/HBIOS/scsi.asm +++ b/Source/HBIOS/scsi.asm @@ -167,7 +167,11 @@ SCSI_INIT3: CALL PRTDEC8 ; DISPLAY IT ; CALL SCSI_INITDEV ; INITIALIZE DEVICE +#IF (SCSITRACE < 2) JP NZ,SCSI_PRTSTATSTR ; IF ERROR, EXIT VIA PRINT +#ELSE + RET NZ +#ENDIF ; ; PRINT STORAGE CAPACITY (BLOCK COUNT) PRTS(" BLOCKS=0x$") ; PRINT FIELD LABEL @@ -230,14 +234,14 @@ SCSI_DEFMED: ; SCSI_READ: CALL HB_DSKREAD ; HOOK HBIOS DISK READ SUPERVISOR - LD A,SCSI_CMD_READ ; SETUP READ COMMAND + LD E,SCSI_CMD_READ ; SETUP READ COMMAND JP SCSI_IO ; DO THE IO ; ; ; SCSI_WRITE: CALL HB_DSKWRITE ; HOOK HBIOS DISK WRITE SUPERVISOR - LD A,SCSI_CMD_WRITE ; SETUP WRITE COMMAND + LD E,SCSI_CMD_WRITE ; SETUP WRITE COMMAND JP SCSI_IO ; DO THE IO ; ; @@ -362,8 +366,23 @@ SCSI_INITDEV: ; ; SCSI_IO: +; +#IF (ESPSDTRACE == 1) + PUSH HL + LD HL,SCSI_PRTERR ; SET UP ESPSD_PRTERR + EX (SP),HL ; ... TO FILTER ALL EXITS +#ENDIF +; LD (SCSI_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS + PUSH DE ; SAVE COMMAND BYTE + PUSH HL ; SAVE BUFFER ADDRESS + CALL SCSI_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO + POP HL ; RESTORE BUFFER ADDRESS + POP DE ; RESTORE COMMAND BYTE + RET NZ ; BAIL OUT ON ERROR +; ; SETUP SCSI COMMAND + LD A,E LD (SCSI_S_CDB),A ; SET SCSI COMMAND ; SETUP DISK BUFFER POINTERS LD (SCSI_BUF_OUT),HL ; INPUT BUFFER @@ -386,12 +405,7 @@ SCSI_IO: LD A,(IY+SCSI_LBA+0) ; LBA MID LD (SCSI_CUR_LBN+1),A ; PUT IN CDB ; DO THE SCSI TRANSACTION - PUSH IX ; SAVE IX - LD IX,SCSI_S_IOT ; SET POINTER CALL SCSI_GO ; DO THE SCSI TRANSACTION - POP IX ; RESTORE IX - AND %00111110 ; IGNORE RESERVED BITS OF STATUS - CALL NZ,SCSI_IOERR ; DIAGNOSE/RECORD ERRORS JR NZ,SCSI_IO1 ; IF ERROR, SKIP INCREMENT ; INCREMENT LBA LD A,SCSI_LBA ; LBA OFFSET @@ -410,12 +424,14 @@ SCSI_IO1: OR A ; SET FLAGS RET ; AND DONE ; -; CHECK FOR DEVICE EXISTENCE +; CHECK CURRENT DEVICE FOR ERROR STATUS AND ATTEMPT TO RECOVER +; VIA RESET IF DEVICE IS IN ERROR. ; -SCSI_TSTRDY: - XOR A ; SIGNAL SUCCESS +SCSI_CHKERR: + LD A,(IY+SCSI_STAT) ; GET STATUS + OR A ; SET FLAGS + CALL NZ,SCSI_RESET ; IF ERROR STATUS, RESET BUS RET - ; ; ISSUE SCSI INQUIRY COMMAND ; ON INPUT, HL POINTS TO OUTPUT DATA BUFFER @@ -434,13 +450,7 @@ SCSI_INQUIRY: RRCA ; ... LD (SCSI_INQ_LUN),A ; PUT IN INQ CDB ; DO THE SCSI TRANSACTION - PUSH IX ; SAVE IX - LD IX,SCSI_S_IOT ; SET POINTER - CALL SCSI_GO ; DO THE SCSI TRANSACTION - POP IX ; RESTORE IX - AND %00111110 ; IGNORE RESERVED BITS OF STATUS - JP NZ,SCSI_IOERR ; HANDLE ERROR - RET ; DONE + JP SCSI_GO ; DO THE SCSI TRANSACTION ; ; ISSUE SCSI CAPACITY COMMAND AND CAPTURE ; RESULTS AS DEVICE CAPACITY @@ -460,12 +470,8 @@ SCSI_CAPACITY: RRCA ; ... LD (SCSI_CAP_LUN),A ; PUT IN INQ CDB ; DO THE SCSI TRANSACTION - PUSH IX ; SAVE IX - LD IX,SCSI_S_IOT ; SET POINTER CALL SCSI_GO ; DO THE SCSI TRANSACTION - POP IX ; RESTORE IX - AND %00111110 ; IGNORE RESERVED BITS OF STATUS - JP NZ,SCSI_IOERR ; HANDLE ERROR + RET NZ ; ABORT ON ERROR ; ; RETURNED LBA IS BIG ENDIAN. CONVERT TO A STANDARD 32-BIT ; INTEGER IN DE:HL @@ -501,35 +507,22 @@ SCSI_CAPACITY: ; COMMAND PROCESSING ;============================================================================= ; -;---------------------------------------------------------------- -;WRITE LOGICAL BLOCK TO DISK -;CUR_TID,CUR_LUN,CUR_LBN ALREADY SET -;EXIT WITH ZERO STATUS IF OK -;---------------------------------------------------------------- +; WRAPPER FOR HBIOS INVOCATION ; -WR_PHY: - LD A,0AH ;WRITE COMMAND - JR PHY_COM ;FINISH SAME AS READ - -;---------------------------------------------------------------- -;READ LOGICAL BLOCK FROM DISK -;CUR_TID,CUR_LUN,CUR_LBN ALREADY SET -;EXIT WITH ZERO STATUS IF OK -;---------------------------------------------------------------- +SCSI_GO: + PUSH IX ; PRESERVE IX + LD IX,SCSI_S_IOT ; POINT TO IO TABLE + CALL SCSI_GO1 ; RUN THE TRANSACTION + POP IX ; RESTORE IX + AND %00111110 ; IGNORE RESERVED BITS OF STATUS + JP NZ,SCSI_IOERR ; HANDLE ERROR + RET ; DONE ; -RD_PHY: - LD A,8 ;READ COMMAND -PHY_COM: - LD (SCSI_S_CDB),A ;SET IN COMMAND BLOCK - LD IX,SCSI_S_IOT ;POINT TO IO TABLE - CALL SCSI_GO - AND 02H ;MASK TO ERROR BIT - RET ;------------------------------------------------------------------------------- ;DO SCSI TRANSACTION -; IX=SCSI IO BLOCK ;------------------------------------------------------------------------------- -SCSI_GO: +; +SCSI_GO1: LD A,$FF ;PRESET ERROR STATUS LD L,(IX+4) ;POINT TO STATUS ADDRESS LD H,(IX+5) ;POINT TO STATUS ADDRESS diff --git a/Source/ver.inc b/Source/ver.inc index a420775c..7d4d147d 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 6 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.6.0-dev.46" +#DEFINE BIOSVER "3.6.0-dev.47" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 82adf546..c9aa85f4 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 6 rup equ 0 rtp equ 0 biosver macro - db "3.6.0-dev.46" + db "3.6.0-dev.47" endm