Status LED Support

This commit is contained in:
Wayne Warthen
2019-09-30 17:22:02 -07:00
parent 341c55945c
commit 8d96efb6f5
13 changed files with 134 additions and 67 deletions

View File

@@ -47,6 +47,10 @@ DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -65,6 +65,10 @@ DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -51,6 +51,10 @@ DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -54,6 +54,10 @@ DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -51,6 +51,10 @@ DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -46,6 +46,10 @@ DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -43,6 +43,10 @@ DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -46,6 +46,10 @@ DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $0D ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
LEDENABLE .EQU TRUE ; ENABLES STATUS LED (SINGLE LED)
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -43,6 +43,10 @@ DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -47,6 +47,10 @@ DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE)
;
CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP

View File

@@ -163,16 +163,18 @@ DSRTC_INIT:
PRTS("MFPIC$")
#ENDIF
;
LD A,(DSRTC_STAT)
OR A
JR Z,DSRTC_INIT0
; PRINT RTC LATCH PORT ADDRESS
PRTS(" IO=0x$") ; LABEL FOR IO ADDRESS
LD A,DSRTC_BASE ; GET IO ADDRESS
CALL PRTHEXBYTE ; PRINT IT
;
; HARDWARE NOT PRESENT
PRTS(" NOT PRESENT$")
; CHECK PRESENCE STATUS
LD A,(DSRTC_STAT) ; GET DEVICE STATUS
OR A ; SET FLAGS
JR Z,DSRTC_INIT1 ; IF ZERO, ALL GOOD
PRTS(" NOT PRESENT$") ; NOT ZERO, H/W NOT PRESENT
OR $FF ; SIGNAL FAILURE
RET
;
DSRTC_INIT0:
RET ; BAIL OUT
;
DSRTC_INIT1:
; DISPLAY CURRENT TIME
@@ -183,27 +185,13 @@ DSRTC_INIT1:
CALL DSRTC_CLK2TIM
LD HL,DSRTC_TIMBUF
CALL PRTDT
;
#IF DSRTCCHG ; FORCE_RTC_CHARGE_ENABLE
LD E,$8E ; ACCESS WRITE PROT REG
CALL DSRTC_CMD ;
LD E,$00 ; WRITE PROTECT OFF
CALL DSRTC_PUT ;
CALL DSRTC_END ; FINISH CMD
LD E,$90 ; ACCESS CHARGE REGISTER
CALL DSRTC_CMD ;
LD C,$90 ; ACCESS CHARGE REGISTER
LD E,DS1d2k ; STD CHARGE VALUES
CALL DSRTC_PUT ;
CALL DSRTC_END ; FINISH REG WRITE
LD E,$8E ; ACCESS WRITE PROT REG
CALL DSRTC_CMD ;
LD E,$80 ; WRITE PROTECT ON
CALL DSRTC_PUT ;
CALL DSRTC_END ; FINISH CMD
CALL DSRTC_WRBYTWP
#ENDIF
;
PRTS(" CHARGE=$") ; DISPLAY
CALL DSRTC_TSTCHG ; CHARGING
JR NZ,NOCHG1 ; STATUS
@@ -318,47 +306,23 @@ DSRTC_GETBYT:
LD A,C ; INDEX
SLA A ; SHIFT TO INDEX BITS
ADD A,$C1 ; CMD OFFSET
LD E,A
CALL DSRTC_CMD
CALL DSRTC_GET
CALL DSRTC_END
XOR A
RET
LD C,A ; SAVE READ CMD BYTE
CALL DSRTC_RDBYT ; DO IT
XOR A ; SIGNAL SUCCESS
RET ; DONE
;
; RTC SET NVRAM BYTE
; C: INDEX
; E: VALUE
;
DSRTC_SETBYT:
PUSH DE ; SAVE INCOMING INDEX
;
; TURN OFF WRITE PROTECT
LD E,$8E ; ACCESS WRITE PROT REG
CALL DSRTC_CMD ;
LD E,$00 ; WRITE PROTECT OFF
CALL DSRTC_PUT ;
CALL DSRTC_END ; FINISH CMD
;
; SET REGISTER VALUE
LD A,C ; INDEX
SLA A ; SHIFT TO INDEX BITS
ADD A,$C0 ; CMD OFFSET
LD E,A ; INTO E
CALL DSRTC_CMD
POP DE
CALL DSRTC_PUT
CALL DSRTC_END
;
; TURN ON WRITE PROTECT
LD E,$8E ; ACCESS WRITE PROT REG
CALL DSRTC_CMD ;
LD E,$80 ; WRITE PROTECT ON
CALL DSRTC_PUT ;
CALL DSRTC_END ; FINISH CMD
;
; SIGNAL SUCCESS
XOR A
RET
LD C,A ; SAVE WRITE CMD BYTE
CALL DSRTC_WRBYTWP ; DO IT
XOR A ; SIGNAL SUCCESS
RET ; DONE
;
; CONVERT DATA IN CLOCK BUFFER TO TIME BUFFER AT HL
;
@@ -412,13 +376,11 @@ DSRTC_TIM2CLK:
; TEST CLOCK FOR CHARGE DATA
;
DSRTC_TSTCHG:
LD E,$91 ; CHARGE RESISTOR & DIODE VALUES
CALL DSRTC_CMD ; SEND THE COMMAND
CALL DSRTC_GET ; READ THE REGISTER
CALL DSRTC_END ; FINISH IT
LD C,$91 ; CHARGE RESISTOR & DIODE VALUES
CALL DSRTC_RDBYT ; GET VALUE
LD A,E ; VALUE TO A
AND %11110000 ; CHECK FOR
CP %10100000 ; ENABLED FLAG
CP %10100000 ; ... ENABLED FLAG
RET
;
; DETECT RTC HARDWARE PRESENCE
@@ -455,14 +417,61 @@ DSRTC_DETECT1:
; 1 = HALTED
;
DSRTC_TSTCLK:
LD E,$81 ; SECONDS REGISTER HAS CLOCK HALT FLAG
CALL DSRTC_CMD ; SEND THE COMMAND
CALL DSRTC_GET ; READ THE REGISTER
CALL DSRTC_END ; FINISH IT
LD C,$81 ; SECONDS REGISTER HAS CLOCK HALT FLAG
CALL DSRTC_RDBYT ; GET REGISTER VALUE
LD A,E ; VALUE TO A
AND %10000000 ; HIGH ORDER BIT IS CLOCK HALT
RET
;
; READ RAW BYTE
; C=READ CMD BYTE
; E=VALUE (OUTPUT)
;
DSRTC_RDBYT:
LD E,C
CALL DSRTC_CMD
CALL DSRTC_GET
CALL DSRTC_END
RET
;
; WRITE RAW BYTE
; C=WRITE CMD BYTE
; E=VALUE
;
DSRTC_WRBYT:
PUSH DE ; SAVE VALUE TO WRITE
LD E,C ; CMD TO E
CALL DSRTC_CMD
POP DE ; RESTORE VALUE
CALL DSRTC_PUT
CALL DSRTC_END
RET
;
; WRITE RAW BYTE W/ WRITE PROTECT BRACKETING
; C=WRITE CMD BYTE
; E=VALUE
;
DSRTC_WRBYTWP:
LD D,C ; WRITE CMD TO D
PUSH DE ; SAVE PARMS
;
; TURN OFF WRITE PROTECT
LD C,$8E ; CMD
LD E,0 ; WRITE PROTECT OFF
CALL DSRTC_WRBYT ; DO IT
;
; WRITE THE VALUE
POP DE ; RESTORE INPUTS
LD C,D ; WRITE CMD BACK TO C
CALL DSRTC_WRBYT ; DO IT
;
; TURN WRITE PROTECT BACK ON
LD C,$8E ; WRITE CMD TO D
LD E,$80 ; WRITE PROTECT ON
CALL DSRTC_WRBYT ; DO IT
;
RET
;
; BURST READ CLOCK DATA INTO BUFFER AT HL
;
DSRTC_RDCLK:

View File

@@ -95,6 +95,15 @@ MODCNT .SET MODCNT + 1
#DEFINE DIAG(N) \;
#ENDIF
;
#IF (LEDENABLE)
#DEFINE LED(N) PUSH AF
#DEFCONT \ LD A,N
#DEFCONT \ OUT (LEDPORT),A
#DEFCONT \ POP AF
#ELSE
#DEFINE LED(N) \;
#ENDIF
;
;
;
#IF (INTMODE == 0)
@@ -827,6 +836,7 @@ HB_START:
#ENDIF
;
DIAG(%00000011)
LED($FF)
;
; CHECK BATTERY BACKUP STATUS BEFORE WE COPY PROXY TO UPPER MEMORY
;
@@ -1388,6 +1398,7 @@ HB_CPU2:
#ENDIF
;
DIAG(%01111111)
LED($00)
;
; PRIOR TO THIS POINT, CONSOLE I/O WAS NOT AVAILABLE UNLESS DIRECTED TO DEBUG OUTPUT I.E. XIO
; NOW THAT HBIOS IS READY, SET THE CONSOLE UNIT TO ACTIVATE CONSOLE I/O
@@ -2150,12 +2161,18 @@ HB_DSKFN:
#IF (DIAGENABLE & DIAGDISKIO)
LD A,(HB_DSKBIT) ; LOAD UNIT DISK BIT MASK
OUT (DIAGPORT),A ; DISPLAY ON DIAG LEDS
#ENDIF
#IF (LEDENABLE & LEDDISKIO)
LED($FF)
#ENDIF
LD E,1 ; ONE SECTOR
HB_DSKFNADR .EQU $+1
CALL PANIC ; READ ONE SECTOR
#IF (DIAGENABLE & DIAGDISKIO)
DIAG(0) ; CLEAR DIAG LEDS
#ENDIF
#IF (LEDENABLE & LEDDISKIO)
LED($00)
#ENDIF
POP BC ; RESTORE COUNTERS
RET ; RETURN