Browse Source

Disk Driver Code Cleaning

Some disk drivers still had internal code for multi-sector I/O.  With the read supervisors, this is no longer needed.  Removed the extraneous code from these drivers.
pull/633/head
Wayne Warthen 3 months ago
parent
commit
ad2d3f3ac3
No known key found for this signature in database GPG Key ID: 8B34ED29C07EEB0A
  1. 17
      Source/HBIOS/fd.asm
  2. 3
      Source/HBIOS/hbios.asm
  3. 18
      Source/HBIOS/hdsk.asm
  4. 16
      Source/HBIOS/ide.asm
  5. 14
      Source/HBIOS/md.asm
  6. 16
      Source/HBIOS/ppide.asm
  7. 17
      Source/HBIOS/ppp.asm
  8. 18
      Source/HBIOS/prp.asm
  9. 14
      Source/HBIOS/rf.asm
  10. 20
      Source/HBIOS/sd.asm
  11. 2
      Source/ver.inc
  12. 2
      Source/ver.lib

17
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

3
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

18
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

16
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

14
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

16
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

17
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

18
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

14
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

20
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
;

2
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

2
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

Loading…
Cancel
Save