diff --git a/Source/HBIOS/fd.asm b/Source/HBIOS/fd.asm index 5edc02d1..c94aa41a 100644 --- a/Source/HBIOS/fd.asm +++ b/Source/HBIOS/fd.asm @@ -1120,23 +1120,14 @@ FD_WRITE: ; FD_RW: LD (FCD_DOP),A ; SAVE REQUESTED DISK OPERATION - LD A,E ; BLOCK COUNT TO A - OR A ; SET FLAGS - RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 - LD B,A ; INIT SECTOR DOWNCOUNTER - LD C,0 ; INIT SECTOR READ/WRITE COUNT - - PUSH BC ; SAVE COUNTERS CALL FD_GEOM ; E := SPT, D := HDS - POP BC ; RESTORE COUNTERS JR NZ,FD_RW4 ; BAIL OUT ON ERROR RES 7,D ; MAKE SURE LBA BIT IS CLEARED LD (FD_CURGEOM),DE ; SAVE AS FD_CURSPT & FD_CURHDS FD_RW1: - PUSH BC ; SAVE COUNTERS CALL FD_RUN ; PERFORM SECTOR READ/WRITE - JR NZ,FD_RW3 ; IF ERROR, SKIP INCREMENT + JR NZ,FD_RW4 ; IF ERROR, SKIP INCREMENT ; INCREMENT SECTOR AND CHECK FOR TRACK OVERFLOW LD A,FD_HSTSEC ; HST SECTOR OFFSET IN CFG @@ -1166,13 +1157,7 @@ FD_RW2: INC (HL) ; BUMP DMA BY INC (HL) ; ... 512 BYTES XOR A ; SIGNAL SUCCESS -FD_RW3: - POP BC ; RECOVER COUNTERS - JR NZ,FD_RW4 ; IF ERROR, BAIL OUT - INC C ; BUMP COUNT OF SECTORS READ - DJNZ FD_RW1 ; LOOP AS NEEDED FD_RW4: - LD E,C ; SECTOR READ COUNT TO E LD HL,(FD_DSKBUF) ; CURRENT DMA TO HL OR A ; SET FLAGS BASED ON RETURN CODE RET ; AND RETURN, A HAS RETURN CODE diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 4b59c772..4887f96c 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -4646,6 +4646,7 @@ HB_DSKREAD1: LD HL,HB_WRKBUF ; USE WORK BUF REAL I/O ; ; CALL READ FN + LD E,1 ; READ EXACTLY 1 SECTOR CALL HB_DSKFN ; READ ONE SECTOR ; ; IF FAIL, RETURN ERR @@ -4748,6 +4749,7 @@ HB_DSKWRITE1: ; ; CALL WRITE FN LD HL,HB_WRKBUF ; WRITE FROM WORK BUFFER + LD E,1 ; WRITE EXACTLY 1 SECTOR CALL HB_DSKFN ; WRITE ONE SECTOR ; ; IF FAIL, RETURN ERR @@ -4774,6 +4776,7 @@ HB_DSKIO: ; HB_DSKIO1: ; CALL READ/WRITE FN + LD E,1 ; READ/WRITE EXACTLY 1 SECTOR CALL HB_DSKFN ; READ/WRITE ONE SECTOR ; ; IF FAIL, RETURN ERR diff --git a/Source/HBIOS/hdsk.asm b/Source/HBIOS/hdsk.asm index af357564..c4d97357 100644 --- a/Source/HBIOS/hdsk.asm +++ b/Source/HBIOS/hdsk.asm @@ -218,24 +218,16 @@ HDSK_WRITE: HDSK_RW: LD (HDSK_CMD),A ; SET COMMAND BYTE LD (HDSK_DMA),HL ; SAVE INITIAL DMA - LD A,E ; SECTOR COUNT TO A - OR A ; SET FLAGS - RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 - LD B,A ; INIT SECTOR DOWNCOUNTER - LD C,0 ; INIT SECTOR READ/WRITE COUNT LD A,(IY+HDSK_DEV) ; GET DEVICE NUMBER LD (HDSK_DRV),A ; ... AND SET FIELD IN HDSK PARM BLOCK ; RESET HDSK INTERFACE IF NEEDED LD A,(IY+HDSK_STAT) ; GET CURRENT STATUS OR A ; SET FLAGS - PUSH BC ; SAVE COUNTERS CALL NZ,HDSK_DSKRESET ; RESET IF NOT READY - POP BC ; RESTORE COUNTERS JR NZ,HDSK_RW6 ; ABORT ON FAILURE HDSK_RW0: - PUSH BC ; SAVE COUNTERS XOR A ; A = 0 LD (HDSK_RC),A ; CLEAR RETURN CODE ; @@ -282,7 +274,7 @@ HDSK_RW0: POP AF ; RESTORE RETURN CODE #ENDIF - JR NZ,HDSK_RW5 ; BAIL OUT ON ERROR + JR NZ,HDSK_RW6 ; BAIL OUT ON ERROR ; INCREMENT LBA LD A,HDSK_LBA ; LBA OFFSET IN CFG ENTRY @@ -296,16 +288,8 @@ HDSK_RW0: XOR A ; A := 0 SIGNALS SUCCESS -HDSK_RW5: - POP BC ; RECOVER COUNTERS - JR NZ,HDSK_RW6 ; IF ERROR, GET OUT - - INC C ; RECORD SECTOR COMPLETED - DJNZ HDSK_RW0 ; LOOP AS NEEDED - HDSK_RW6: ; RETURN WITH SECTORS READ IN E AND UPDATED DMA ADDRESS IN HL - LD E,C ; SECTOR READ COUNT TO E LD HL,(HDSK_DMA) ; CURRENT DMA TO HL OR A ; SET FLAGS BASED ON RETURN CODE RET Z ; RETURN IF SUCCESS diff --git a/Source/HBIOS/ide.asm b/Source/HBIOS/ide.asm index c365f8e1..da5171a2 100644 --- a/Source/HBIOS/ide.asm +++ b/Source/HBIOS/ide.asm @@ -667,25 +667,17 @@ IDE_WRITE: ; IDE_IO: LD (IDE_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS - LD A,E ; BLOCK COUNT TO A - OR A ; SET FLAGS - RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 - LD B,A ; INIT SECTOR DOWNCOUNTER - LD C,0 ; INIT SECTOR READ/WRITE COUNT #IF (IDETRACE == 1) LD HL,IDE_PRTERR ; SET UP IDE_PRTERR PUSH HL ; ... TO FILTER ALL EXITS #ENDIF - PUSH BC ; SAVE COUNTERS CALL IDE_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO - POP BC ; RESTORE COUNTERS JR NZ,IDE_IO3 ; BAIL OUT ON ERROR IDE_IO1: - PUSH BC ; SAVE COUNTERS CALL IDE_SELUNIT ; HARDWARE SELECTION OF TARGET UNIT LD HL,(IDE_IOFNADR) ; GET PENDING IO FUNCTION ADDRESS CALL JPHL ; ... AND CALL IT - JR NZ,IDE_IO2 ; IF ERROR, SKIP INCREMENT + JR NZ,IDE_IO3 ; IF ERROR, SKIP INCREMENT ; INCREMENT LBA LD A,IDE_LBA ; LBA OFFSET CALL LDHLIYA ; HL := IY + A, REG A TRASHED @@ -695,13 +687,7 @@ IDE_IO1: INC (HL) ; BUMP DMA BY INC (HL) ; ... 512 BYTES XOR A ; SIGNAL SUCCESS -IDE_IO2: - POP BC ; RECOVER COUNTERS - JR NZ,IDE_IO3 ; IF ERROR, BAIL OUT - INC C ; BUMP COUNT OF SECTORS READ - DJNZ IDE_IO1 ; LOOP AS NEEDED IDE_IO3: - LD E,C ; SECTOR READ COUNT TO E LD HL,(IDE_DSKBUF) ; CURRENT DMA TO HL OR A ; SET FLAGS BASED ON RETURN CODE RET Z ; RETURN IF SUCCESS diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 589419d1..3eef75b9 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -295,13 +295,7 @@ MD_WR1: ; MD_RW: LD (MD_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS - LD A,E ; BLOCK COUNT TO A - OR A ; SET FLAGS - RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 - LD B,A ; INIT SECTOR DOWNCOUNTER - LD C,0 ; INIT SECTOR READ/WRITE COUNT MD_RW1: - PUSH BC ; SAVE COUNTERS ; ;;;#IF (DSKYENABLE) ;;; #IF (DSKYDSKACT) @@ -319,7 +313,7 @@ MD_RW1: #ELSE CALL JPHL ; ... AND CALL IT #ENDIF - JR NZ,MD_RW2 ; IF ERROR, SKIP INCREMENT + JR NZ,MD_RW3 ; IF ERROR, SKIP INCREMENT ; INCREMENT LBA LD A,MD_LBA ; LBA OFFSET IN CFG ENTRY CALL LDHLIYA ; HL := IY + A, REG A TRASHED @@ -329,13 +323,7 @@ MD_RW1: INC (HL) ; BUMP DMA BY INC (HL) ; ... 512 BYTES XOR A ; SIGNAL SUCCESS -MD_RW2: - POP BC ; RECOVER COUNTERS - JR NZ,MD_RW3 ; IF ERROR, BAIL OUT - INC C ; BUMP COUNT OF SECTORS READ - DJNZ MD_RW1 ; LOOP AS NEEDED MD_RW3: - LD E,C ; SECTOR READ COUNT TO E LD HL,(MD_DSKBUF) ; CURRENT DMA TO HL OR A ; SET FLAGS BASED ON RETURN CODE RET ; AND RETURN, A HAS RETURN CODE diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index 541d320f..a109720d 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -694,25 +694,17 @@ PPIDE_WRITE: ; PPIDE_IO: LD (PPIDE_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS - LD A,E ; BLOCK COUNT TO A - OR A ; SET FLAGS - RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 - LD B,A ; INIT SECTOR DOWNCOUNTER - LD C,0 ; INIT SECTOR READ/WRITE COUNT #IF (PPIDETRACE == 1) LD HL,PPIDE_PRTERR ; SET UP PPIDE_PRTERR PUSH HL ; ... TO FILTER ALL EXITS #ENDIF - PUSH BC ; SAVE COUNTERS CALL PPIDE_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO - POP BC ; RESTORE COUNTERS JR NZ,PPIDE_IO3 ; BAIL OUT ON ERROR PPIDE_IO1: - PUSH BC ; SAVE COUNTERS CALL PPIDE_SELUNIT ; HARDWARE SELECTION OF TARGET UNIT LD HL,(PPIDE_IOFNADR) ; GET PENDING IO FUNCTION ADDRESS CALL JPHL ; ... AND CALL IT - JR NZ,PPIDE_IO2 ; IF ERROR, SKIP INCREMENT + JR NZ,PPIDE_IO3 ; IF ERROR, SKIP INCREMENT ; INCREMENT LBA LD A,PPIDE_LBA ; LBA OFFSET CALL LDHLIYA ; HL := IY + A, REG A TRASHED @@ -722,13 +714,7 @@ PPIDE_IO1: INC (HL) ; BUMP DMA BY INC (HL) ; ... 512 BYTES XOR A ; SIGNAL SUCCESS -PPIDE_IO2: - POP BC ; RECOVER COUNTERS - JR NZ,PPIDE_IO3 ; IF ERROR, BAIL OUT - INC C ; BUMP COUNT OF SECTORS READ - DJNZ PPIDE_IO1 ; LOOP AS NEEDED PPIDE_IO3: - LD E,C ; SECTOR READ COUNT TO E LD HL,(PPIDE_DSKBUF) ; CURRENT DMA TO HL OR A ; SET FLAGS BASED ON RETURN CODE RET Z ; RETURN IF SUCCESS diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index a4afb9e5..b1de0b83 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -534,24 +534,16 @@ PPPSD_WRITE: ; PPPSD_IO: LD (PPPSD_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS - LD A,E ; BLOCK COUNT TO A - OR A ; SET FLAGS - RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 - LD B,A ; INIT SECTOR DOWNCOUNTER - LD C,0 ; INIT SECTOR R/W COUNTER #IF (PPPSDTRACE == 1) LD HL,PPPSD_PRTERR ; SET UP PPPSD_PRTERR PUSH HL ; ... TO FILTER ALL EXITS #ENDIF - PUSH BC ; SAVE COUNTERS CALL PPPSD_CHKCARD ; CHECK / REINIT CARD AS NEEDED - POP BC ; RESTORE COUNTERS JR NZ,PPPSD_IO3 ; BAIL OUT ON ERROR PPPSD_IO1: - PUSH BC ; SAVE COUNTERS #IF (PPPSDTRACE >= 3) CALL PPPSD_PRTPREFIX @@ -559,7 +551,7 @@ PPPSD_IO1: LD HL,(PPPSD_IOFNADR) ; GET PENDING IO FUNCTION ADDRESS CALL JPHL ; ... AND CALL IT - JR NZ,PPPSD_IO2 ; BAIL OUT ON ERROR + JR NZ,PPPSD_IO3 ; BAIL OUT ON ERROR ; INCREMENT LBA LD A,PPPSD_LBA ; LBA OFFSET CALL LDHLIYA ; HL := IY + A, REG A TRASHED @@ -570,14 +562,7 @@ PPPSD_IO1: INC (HL) ; ... 512 BYTES XOR A ; SIGNAL SUCCESS -PPPSD_IO2: - POP BC ; RECOVER COUNTERS - JR NZ,PPPSD_IO3 ; IF ERROR PENDING, BAIL OUT - INC C ; BUMP COUNT OF SECTORS READ - DJNZ PPPSD_IO1 ; LOOP AS NEEDED - PPPSD_IO3: - LD E,C ; SECTOR READ COUNT TO E LD HL,(PPPSD_DSKBUF) ; CURRENT BUF ADR TO HL OR A ; SET FLAGS BASED ON RETURN CODE RET Z ; RETURN IF SUCCESS diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index db923c5a..0efe5361 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -431,32 +431,23 @@ PRPSD_WRITE: ; PRPSD_IO: LD (PRPSD_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS - LD A,E ; BLOCK COUNT TO A - OR A ; SET FLAGS - RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 - LD B,A ; INIT SECTOR DOWNCOUNTER - LD C,0 ; INIT SECTOR R/W COUNTER #IF (PRPSDTRACE == 1) LD HL,PRPSD_PRTERR ; SET UP PRPSD_PRTERR PUSH HL ; ... TO FILTER ALL EXITS #ENDIF - PUSH BC ; SAVE COUNTERS CALL PRPSD_CHKCARD ; CHECK / REINIT CARD AS NEEDED - POP BC ; RESTORE COUNTERS JR NZ,PRPSD_IO3 ; BAIL OUT ON ERROR PRPSD_IO1: - PUSH BC ; SAVE COUNTERS - #IF (PRPSDTRACE >= 3) CALL PRPSD_PRTPREFIX #ENDIF LD HL,(PRPSD_IOFNADR) ; GET PENDING IO FUNCTION ADDRESS CALL JPHL ; ... AND CALL IT - JR NZ,PRPSD_IO2 ; BAIL OUT ON ERROR + JR NZ,PRPSD_IO3 ; BAIL OUT ON ERROR ; INCREMENT LBA LD A,PRPSD_LBA ; LBA OFFSET CALL LDHLIYA ; HL := IY + A, REG A TRASHED @@ -467,14 +458,7 @@ PRPSD_IO1: INC (HL) ; ... 512 BYTES XOR A ; SIGNAL SUCCESS -PRPSD_IO2: - POP BC ; RECOVER COUNTERS - JR NZ,PRPSD_IO3 ; IF ERROR PENDING, BAIL OUT - INC C ; BUMP COUNT OF SECTORS READ - DJNZ PRPSD_IO1 ; LOOP AS NEEDED - PRPSD_IO3: - LD E,C ; SECTOR READ COUNT TO E LD HL,(PRPSD_DSKBUF) ; CURRENT BUF ADR TO HL OR A ; SET FLAGS BASED ON RETURN CODE RET Z ; RETURN IF SUCCESS diff --git a/Source/HBIOS/rf.asm b/Source/HBIOS/rf.asm index 9fa5eb83..2ffa687e 100644 --- a/Source/HBIOS/rf.asm +++ b/Source/HBIOS/rf.asm @@ -250,17 +250,11 @@ RF_WRITE: ; RF_RW: LD (RF_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS - LD A,E ; BLOCK COUNT TO A - OR A ; SET FLAGS - RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 - LD B,A ; INIT SECTOR DOWNCOUNTER - LD C,0 ; INIT SECTOR READ/WRITE COUNT CALL RF_SETIO ; SET BASE PORT IO ADR FOR SELECTED UNIT RF_RW1: - PUSH BC ; SAVE COUNTERS LD HL,(RF_RWFNADR) ; GET PENDING IO FUNCTION ADDRESS CALL JPHL ; ... AND CALL IT - JR NZ,RF_RW2 ; IF ERROR, SKIP INCREMENT + JR NZ,RF_RW3 ; IF ERROR, SKIP INCREMENT ; INCREMENT LBA LD A,MD_LBA ; OFFSET OF LBA VALUE CALL LDHLIYA ; HL := IY + A, REG A TRASHED @@ -270,13 +264,7 @@ RF_RW1: INC (HL) ; BUMP DMA BY INC (HL) ; ... 512 BYTES XOR A ; SIGNAL SUCCESS -RF_RW2: - POP BC ; RECOVER COUNTERS - JR NZ,RF_RW3 ; IF ERROR, BAIL OUT - INC C ; BUMP COUNT OF SECTORS READ - DJNZ RF_RW1 ; LOOP AS NEEDED RF_RW3: - LD E,C ; SECTOR READ COUNT TO E LD HL,(RF_DSKBUF) ; CURRENT DMA TO HL OR A ; SET FLAGS BASED ON RETURN CODE RET Z ; RETURN SUCCESS diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index 123ab687..71812ce6 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -1005,10 +1005,6 @@ SD_WRITE: SD_IO: LD (SD_CMDVAL),A ; SAVE THE SD CARD COMMAND LD (SD_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS - LD A,E ; GET BLOCK COUNT REQUESTED - LD (SD_BLKCNT),A ; ... AND SAVE IT - OR A ; SET FLAGS - RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 ; ; SET CSIO FOR HIGH SPEED OPERATION CALL SD_SPD_FAST @@ -1028,18 +1024,11 @@ SD_IO: CP SD_CMD_READ_SNGL_BLK ; IS THIS A READ? CALL NZ,SD_CHKWP ; CHECK FOR WRITE PROTECT IF NOT A READ JP NZ,SD_WRTPROT ; HANDLE WRITE PROTECT ERR - LD A,(SD_BLKCNT) ; BLOCK COUNT TO A - LD E,A ; ... AND TO E IN CASE OF ZERO ERR BELOW - OR A ; SET FLAGS - RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 - LD B,A ; INIT SECTOR DOWNCOUNTER - LD C,0 ; INIT SECTOR READ/WRITE COUNT SD_IO1: - PUSH BC ; SAVE COUNTERS LD A,(SD_CMDVAL) ; SET COMMAND LD C,A ; ... AND PUT IN C CALL SD_SECTIO ; DO SECTOR I/O - JR NZ,SD_IO2 ; IF ERROR, SKIP INCREMENT + JR NZ,SD_IO3 ; IF ERROR, SKIP INCREMENT ; INCREMENT LBA LD A,SD_LBA ; LBA OFFSET CALL LDHLIYA ; HL := IY + A, REG A TRASHED @@ -1049,13 +1038,7 @@ SD_IO1: INC (HL) ; BUMP DMA BY INC (HL) ; ... 512 BYTES XOR A ; SIGNAL SUCCESS -SD_IO2: - POP BC ; RECOVER COUNTERS - JR NZ,SD_IO3 ; IF ERROR, BAIL OUT - INC C ; BUMP COUNT OF SECTORS READ - DJNZ SD_IO1 ; LOOP AS NEEDED SD_IO3: - LD E,C ; SECTOR READ COUNT TO E LD HL,(SD_DSKBUF) ; CURRENT DMA TO HL OR A ; SET FLAGS BASED ON RETURN CODE RET Z ; RETURN IF SUCCESS @@ -2656,7 +2639,6 @@ SD_STR_TYPESDXC .TEXT "SDXC$" SD_OPRVAL .DB 0 ; CURRENT OPR REG VALUE SD_LCNT .DB 0 ; LOOP COUNTER SD_CMDVAL .DB 0 ; PENDING COMMAND FOR IO FUCNTIONS -SD_BLKCNT .DB 0 ; BLOCK COUNT REQUESTED FOR IO FUNCTIONS ; SD_BUF .FILL 16,0 ; WORK BUFFER ; diff --git a/Source/ver.inc b/Source/ver.inc index d9fcfede..50f4c8b0 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.38" +#DEFINE BIOSVER "3.6.0-dev.39" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 7c14b45e..299e3563 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.38" + db "3.6.0-dev.39" endm