Browse Source

Status LED Support

pull/48/head
Wayne Warthen 6 years ago
parent
commit
8d96efb6f5
  1. 1
      Doc/ChangeLog.txt
  2. 4
      Source/HBIOS/cfg_ezz80.asm
  3. 4
      Source/HBIOS/cfg_master.asm
  4. 4
      Source/HBIOS/cfg_mk4.asm
  5. 4
      Source/HBIOS/cfg_n8.asm
  6. 4
      Source/HBIOS/cfg_rcz180.asm
  7. 4
      Source/HBIOS/cfg_rcz80.asm
  8. 4
      Source/HBIOS/cfg_sbc.asm
  9. 4
      Source/HBIOS/cfg_sc126.asm
  10. 4
      Source/HBIOS/cfg_zeta.asm
  11. 4
      Source/HBIOS/cfg_zeta2.asm
  12. 143
      Source/HBIOS/dsrtc.asm
  13. 17
      Source/HBIOS/hbios.asm

1
Doc/ChangeLog.txt

@ -21,6 +21,7 @@ Version 2.9.2
- N?B: Made ZCAL Y2K compliant
- WBW: Show disk activity on diagnostic LEDs
- WBW: DSRTC now detects DS-1302 presence dynamically
- WBW: Add status LED support
Version 2.9.1
-------------

4
Source/HBIOS/cfg_ezz80.asm

@ -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

4
Source/HBIOS/cfg_master.asm

@ -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

4
Source/HBIOS/cfg_mk4.asm

@ -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

4
Source/HBIOS/cfg_n8.asm

@ -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

4
Source/HBIOS/cfg_rcz180.asm

@ -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

4
Source/HBIOS/cfg_rcz80.asm

@ -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

4
Source/HBIOS/cfg_sbc.asm

@ -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

4
Source/HBIOS/cfg_sc126.asm

@ -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

4
Source/HBIOS/cfg_zeta.asm

@ -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

4
Source/HBIOS/cfg_zeta2.asm

@ -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

143
Source/HBIOS/dsrtc.asm

@ -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:

17
Source/HBIOS/hbios.asm

@ -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

Loading…
Cancel
Save