mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Diag LED Enhancement
Diagnostic LEDs will now show disk activity by disk unit number.
This commit is contained in:
@@ -1588,6 +1588,7 @@ HB_SPDTST:
|
||||
#ENDIF
|
||||
;
|
||||
INITSYS3:
|
||||
DIAG(0)
|
||||
;
|
||||
CALL PRTSUM ; PRINT UNIT/DEVICE SUMMARY TABLE
|
||||
;
|
||||
@@ -1949,19 +1950,36 @@ DIO_TBL .FILL DIO_SIZ,0 ; SPACE FOR ENTRIES
|
||||
;
|
||||
; TOS=READ FN ADR
|
||||
; HL=BUF ADR
|
||||
; C=SEC COUNT
|
||||
; E=SEC COUNT
|
||||
; D=BUF BANK ID
|
||||
;
|
||||
HB_DSKREAD:
|
||||
;
|
||||
; THE ACTUAL SECTOR READ FUNCTION ADDRESS IS ON TOS, SAVE IT
|
||||
EX (SP),HL ; SAVE HL TO TOS, HL := READ FN ADR
|
||||
LD (HB_DSKFNADR),HL ; IMBED IN CALL OP BELOW
|
||||
POP HL ; RECOVER HL
|
||||
;
|
||||
#IF (DIAGENABLE)
|
||||
; SAVE DISK UNIT NUMBER BIT MASK
|
||||
LD A,C ; GET DISK UNIT NUMBER
|
||||
LD B,A ; PUT IN B FOR LOOP COUNTER
|
||||
INC B ; LOOP ONE EXTRA TIME TO HANDLE UNIT=0
|
||||
XOR A ; START WITH ACCUM ZERO
|
||||
SCF ; ... AND CF SET
|
||||
HB_DSKREAD0:
|
||||
RLA ; ROTATE BIT
|
||||
DJNZ HB_DSKREAD0 ; ... UNTIL IN PROPER LOCATION
|
||||
LD (HB_DSKBIT),A ; SAVE IT FOR DIAGNOSTICS
|
||||
#ENDIF
|
||||
;
|
||||
#IF 1
|
||||
; CHECK TO SEE IF INTER-BANK I/O NEEDED. IF NOT
|
||||
; WE JUST ABORT BACK TO DISK DRIVER TO HANDLE.
|
||||
; CHECK TO SEE IF INTER-BANK I/O NEEDED.
|
||||
BIT 7,H ; TGT BUF IN UPPER 32K?
|
||||
RET NZ ; IF SO, NOTHING TO DO
|
||||
JP NZ,HB_DSKIO ; IF SO, NON-BANKED
|
||||
LD A,D ; GET TGT BANK
|
||||
CP BID_BIOS ; BIOS BANK?
|
||||
RET Z ; IF SO, NOTHING TO DO
|
||||
JP Z,HB_DSKIO ; IF SO, NON-BANKED
|
||||
#ENDIF
|
||||
;
|
||||
#IF 1
|
||||
@@ -1975,23 +1993,16 @@ HB_DSKREAD:
|
||||
LD (HB_IOBUF),HL
|
||||
LD A,D
|
||||
LD (HB_IOBNK),A
|
||||
;
|
||||
; SETUP READ FN ADR
|
||||
POP HL ; READ FN ADR IS AT TOS
|
||||
LD (HB_DSKREADFN),HL ; IMBED IN CALL OP BELOW
|
||||
;
|
||||
; SETUP READ AND LOOP COUNT
|
||||
LD B,E ; SEC LOOP COUNTER
|
||||
LD C,0 ; SEC COMPLETE COUNTER
|
||||
;
|
||||
HB_DSKREAD1:
|
||||
LD HL,HB_WRKBUF ; USE WORK BUF REAL I/O
|
||||
;
|
||||
; CALL READ FN
|
||||
PUSH BC ; SAVE COUNTERS
|
||||
LD E,1 ; ONE SECTOR
|
||||
LD HL,HB_WRKBUF ; USE WORK BUF FOR DATA
|
||||
HB_DSKREADFN .EQU $+1
|
||||
CALL PANIC ; READ ONE SECTOR
|
||||
POP BC ; RESTORE COUNTERS
|
||||
CALL HB_DSKFN ; READ ONE SECTOR
|
||||
;
|
||||
; IF FAIL, RETURN ERR
|
||||
JR NZ,HB_DSKREADX ; BAIL OUT ON ERROR
|
||||
@@ -2016,9 +2027,7 @@ HB_DSKREADFN .EQU $+1
|
||||
;
|
||||
HB_DSKREADX:
|
||||
LD HL,(HB_IOBUF) ; NEXT BUF ADR
|
||||
LD E,C ; READ COUNT TO E
|
||||
OR A ; SET RESULT FLAGS
|
||||
RET ; DONE
|
||||
JR HB_DSKIOX ; DONE
|
||||
;
|
||||
;==================================================================================================
|
||||
; DISK WRITE HELPER
|
||||
@@ -2029,19 +2038,36 @@ HB_DSKREADX:
|
||||
;
|
||||
; TOS=WRITE FN ADR
|
||||
; HL=BUF ADR
|
||||
; C=SEC COUNT
|
||||
; E=SEC COUNT
|
||||
; D=BUF BANK ID
|
||||
;
|
||||
HB_DSKWRITE:
|
||||
;
|
||||
; THE ACTUAL SECTOR READ FUNCTION ADDRESS IS ON TOS, SAVE IT
|
||||
EX (SP),HL ; SAVE HL TO TOS, HL := READ FN ADR
|
||||
LD (HB_DSKFNADR),HL ; IMBED IN CALL OP BELOW
|
||||
POP HL ; RECOVER HL
|
||||
;
|
||||
#IF (DIAGENABLE)
|
||||
; SAVE DISK UNIT NUMBER BIT MASK
|
||||
LD A,C ; GET DISK UNIT NUMBER
|
||||
LD B,A ; PUT IN B FOR LOOP COUNTER
|
||||
INC B ; LOOP ONE EXTRA TIME TO HANDLE UNIT=0
|
||||
XOR A ; START WITH ACCUM ZERO
|
||||
SCF ; ... AND CF SET
|
||||
HB_DSKWRITE0:
|
||||
RLA ; ROTATE BIT
|
||||
DJNZ HB_DSKWRITE0 ; ... UNTIL IN PROPER LOCATION
|
||||
LD (HB_DSKBIT),A ; SAVE IT FOR DIAGNOSTICS
|
||||
#ENDIF
|
||||
;
|
||||
#IF 1
|
||||
; CHECK TO SEE IF INTER-BANK I/O NEEDED. IF NOT
|
||||
; WE JUST ABORT BACK TO DISK DRIVER TO HANDLE.
|
||||
; CHECK TO SEE IF INTER-BANK I/O NEEDED.
|
||||
BIT 7,H ; TGT BUF IN UPPER 32K?
|
||||
RET NZ ; IF SO, NOTHING TO DO
|
||||
JP NZ,HB_DSKIO ; IF SO, NON-BANKED
|
||||
LD A,D ; GET TGT BANK
|
||||
CP BID_BIOS ; BIOS BANK?
|
||||
RET Z ; IF SO, NOTHING TO DO
|
||||
JP Z,HB_DSKIO ; IF SO, NON-BANKED
|
||||
#ENDIF
|
||||
;
|
||||
#IF 1
|
||||
@@ -2055,10 +2081,6 @@ HB_DSKWRITE:
|
||||
LD (HB_IOBUF),HL
|
||||
LD A,D
|
||||
LD (HB_IOBNK),A
|
||||
;
|
||||
; SETUP WRITE FN ADR
|
||||
POP HL ; WRITE FN ADR IS AT TOS
|
||||
LD (HB_DSKWRITEFN),HL ; IMBED IN CALL OP BELOW
|
||||
;
|
||||
; SETUP WRITE AND LOOP COUNT
|
||||
LD B,E ; SEC LOOP COUNTER
|
||||
@@ -2079,12 +2101,8 @@ HB_DSKWRITE1:
|
||||
POP BC ; RESTORE COUNTERS
|
||||
;
|
||||
; CALL WRITE FN
|
||||
PUSH BC ; SAVE COUNTERS
|
||||
LD E,1 ; ONE SECTOR
|
||||
LD HL,HB_WRKBUF ; USE WORK BUF FOR DATA
|
||||
HB_DSKWRITEFN .EQU $+1
|
||||
CALL PANIC ; READ ONE SECTOR
|
||||
POP BC ; RESTORE COUNTERS
|
||||
LD HL,HB_WRKBUF ; WRITE FROM WORK BUFFER
|
||||
CALL HB_DSKFN ; WRITE ONE SECTOR
|
||||
;
|
||||
; IF FAIL, RETURN ERR
|
||||
JR NZ,HB_DSKWRITEX ; BAIL OUT ON ERROR
|
||||
@@ -2096,12 +2114,51 @@ HB_DSKWRITEFN .EQU $+1
|
||||
;
|
||||
HB_DSKWRITEX:
|
||||
LD HL,(HB_IOBUF) ; NEXT BUF ADR
|
||||
JR HB_DSKIOX ; DONE
|
||||
;
|
||||
;==================================================================================================
|
||||
; NON-BANKED DISK READ/WRITE
|
||||
;==================================================================================================
|
||||
;
|
||||
HB_DSKIO:
|
||||
;
|
||||
; SETUP LOOP COUNT
|
||||
LD B,E ; SEC LOOP COUNTER
|
||||
LD C,0 ; SEC COMPLETE COUNTER
|
||||
;
|
||||
HB_DSKIO1:
|
||||
; CALL READ/WRITE FN
|
||||
CALL HB_DSKFN ; READ/WRITE ONE SECTOR
|
||||
;
|
||||
; IF FAIL, RETURN ERR
|
||||
JR NZ,HB_DSKIOX ; BAIL OUT ON ERROR
|
||||
;
|
||||
; INC SECTOR COUNT
|
||||
INC C ; BUMP SEC READ/WRITE COUNT
|
||||
DJNZ HB_DSKIO1 ; LOOP AS NEEDED
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
;
|
||||
HB_DSKIOX:
|
||||
LD E,C ; WRITE COUNT TO E
|
||||
OR A ; SET RESULT FLAGS
|
||||
RET ; DONE
|
||||
;
|
||||
HB_IOBUF .DW 0
|
||||
HB_IOBNK .DB 0
|
||||
HB_DSKFN:
|
||||
PUSH BC ; SAVE COUNTERS
|
||||
#IF (DIAGENABLE)
|
||||
LD A,(HB_DSKBIT) ; LOAD UNIT DISK BIT MASK
|
||||
OUT (DIAGPORT),A ; DISPLAY ON DIAG LEDS
|
||||
#ENDIF
|
||||
LD E,1 ; ONE SECTOR
|
||||
HB_DSKFNADR .EQU $+1
|
||||
CALL PANIC ; READ ONE SECTOR
|
||||
DIAG(0) ; CLEAR DIAG DISPLAY
|
||||
POP BC ; RESTORE COUNTERS
|
||||
RET ; RETURN
|
||||
;
|
||||
HB_DSKBIT .DB 0 ; ACTIVE DISK UNIT
|
||||
HB_IOBUF .DW 0 ; CURRENT IO BUFFER ADR
|
||||
HB_IOBNK .DB 0 ; CURRENT IO BUFFER BANK ID
|
||||
;
|
||||
;==================================================================================================
|
||||
; REAL TIME CLOCK DEVICE DISPATCHER
|
||||
@@ -2723,10 +2780,12 @@ HB_DISPCALL:
|
||||
JR NC,HB_DISPERR ; HANDLE FN NUM OUT OF RANGE ERROR
|
||||
|
||||
; BUMP IY TO ACTUAL XXX_TBL ENTRY FOR INCOMING UNIT INDEX
|
||||
PUSH BC ; SAVE BC
|
||||
LD B,0 ; MSB IS ALWAYS ZERO
|
||||
RLC C ; MULTIPLY UNIT INDEX
|
||||
RLC C ; ... BY 4 FOR TABLE ENTRY OFFSET
|
||||
ADD IY,BC ; SET IY TO ENTRY ADDRESS
|
||||
POP BC ; RESTORE BC
|
||||
|
||||
; DERIVE DRIVER FUNC ADR TO CALL
|
||||
PUSH HL ; SAVE INCOMING HL
|
||||
|
||||
Reference in New Issue
Block a user