Browse Source

NABU LEDs

- Utilize NABU front panel LEDs for startup diagnostics and disk activity.
- Modified NABU keyboard driver to pass thru joystick activity codes.
pull/396/head v3.5.0-dev.31
Wayne Warthen 2 years ago
parent
commit
c8794d2b9c
  1. 12
      Source/HBIOS/ansi.asm
  2. 2
      Source/HBIOS/cfg_duo.asm
  3. 2
      Source/HBIOS/cfg_dyno.asm
  4. 2
      Source/HBIOS/cfg_epitx.asm
  5. 2
      Source/HBIOS/cfg_heath.asm
  6. 2
      Source/HBIOS/cfg_master.asm
  7. 2
      Source/HBIOS/cfg_mbc.asm
  8. 2
      Source/HBIOS/cfg_mk4.asm
  9. 2
      Source/HBIOS/cfg_mon.asm
  10. 2
      Source/HBIOS/cfg_n8.asm
  11. 6
      Source/HBIOS/cfg_nabu.asm
  12. 2
      Source/HBIOS/cfg_rcz180.asm
  13. 2
      Source/HBIOS/cfg_rcz280.asm
  14. 2
      Source/HBIOS/cfg_rcz80.asm
  15. 2
      Source/HBIOS/cfg_rph.asm
  16. 2
      Source/HBIOS/cfg_s100.asm
  17. 2
      Source/HBIOS/cfg_sbc.asm
  18. 2
      Source/HBIOS/cfg_scz180.asm
  19. 2
      Source/HBIOS/cfg_z80retro.asm
  20. 2
      Source/HBIOS/cfg_zeta.asm
  21. 2
      Source/HBIOS/cfg_zeta2.asm
  22. 10
      Source/HBIOS/hbios.asm
  23. 38
      Source/HBIOS/nabukb.asm
  24. 5
      Source/HBIOS/romldr.asm
  25. 1
      Source/HBIOS/std.asm
  26. 2
      Source/ver.inc
  27. 2
      Source/ver.lib

12
Source/HBIOS/ansi.asm

@ -149,8 +149,20 @@ ANSI_IN1: ; PERFORM ACTUAL KEYBOARD INPUT
LD B,BF_VDAKRD ; SET FUNCTION TO KEYBOARD READ
CALL ANSI_VDADISP ; CALL VDA DISPATCHER
LD A,E ; CHARACTER READ INTO A
;
; THE NABU USES KEYBOARD CODES TO REPORT JOYSTICK ACTIVITY USING
; VALUES $A0-$BF. NORMALLY, WE WOULD PROCESS ANYTHING OVER $80 AS
; A SPECIAL CHAR AND WIND UP IGNORING $80-$DF. FOR NABU, WE ALLOW
; ANYTHING LESS THAN $E0 TO BE RETURNED TO THE APPLICATION FOR
; JOYSTICK PROCESSING.
;
#IF (PLATFORM == PLT_NABU)
CP $E0 ; >= $E0 IS SPECIAL KEY
JR NC,ANSI_IN2 ; HANDLE SPECIAL KEY
#ELSE
BIT 7,A ; TEST HIGH BIT
JR NZ,ANSI_IN2 ; HANDLE $80 OR HIGHER AS SPECIAL CHAR
#ENDIF
XOR A ; OTHERWISE, SIGNAL SUCCESS
RET ; AND RETURN THE KEY
;

2
Source/HBIOS/cfg_duo.asm

@ -78,7 +78,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU TRUE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_dyno.asm

@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_epitx.asm

@ -81,7 +81,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_heath.asm

@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_master.asm

@ -109,7 +109,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_mbc.asm

@ -75,7 +75,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU TRUE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_mk4.asm

@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_mon.asm

@ -75,7 +75,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_n8.asm

@ -82,7 +82,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

6
Source/HBIOS/cfg_nabu.asm

@ -79,9 +79,9 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
;
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDENABLE .EQU TRUE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_NABU ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $00 ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;
DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY

2
Source/HBIOS/cfg_rcz180.asm

@ -86,7 +86,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_rcz280.asm

@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_rcz80.asm

@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_rph.asm

@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_s100.asm

@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU TRUE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_sbc.asm

@ -75,7 +75,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_scz180.asm

@ -80,7 +80,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED)
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_z80retro.asm

@ -78,7 +78,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU $00 ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_zeta.asm

@ -67,7 +67,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

2
Source/HBIOS/cfg_zeta2.asm

@ -78,7 +78,7 @@ FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED
DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING
;
LEDENABLE .EQU FALSE ; ENABLES STATUS LED
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC]
LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|RTC|NABU]
LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS
LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED
;

10
Source/HBIOS/hbios.asm

@ -126,6 +126,7 @@ MODCNT .SET MODCNT + 1
; MBC: LED Port=0x70, bits 1-0, normal, shared w/ RTC port
; DUO: LED Port=0x94, bits 1-0, normal, shared w/ RTC port
; S100: LED Port = $0E, bit 2, inverted, dedicated port
; NABU: LED Port = $00, bits 5-3, normal, shared port
;
#IF (LEDENABLE)
#IF (LEDMODE == LEDMODE_STD)
@ -143,6 +144,12 @@ MODCNT .SET MODCNT + 1
#DEFCONT \ OUT (LEDPORT),A
#DEFCONT \ POP AF
#ENDIF
#IF (LEDMODE == LEDMODE_NABU)
#DEFINE LED(N) PUSH AF
#DEFCONT \ LD A,+(((N << 3)) & %00011000)
#DEFCONT \ OUT (LEDPORT),A
#DEFCONT \ POP AF
#ENDIF
#ELSE
#DEFINE LED(N) \;
#ENDIF
@ -1220,6 +1227,9 @@ BOOTWAIT:
;LD A,(RTCDEFVAL) ; DEFAULT LATCH VALUE
LD A,RTCDEF ; DEFAULT LATCH VALUE
OR %00000001 ; LED 0 ON
#ENDIF
#IF (LEDMODE == LEDMODE_NABU)
LD A,%00001000 ; LOW LED BIT ONLY
#ENDIF
OUT (LEDPORT),A
#ENDIF

38
Source/HBIOS/nabukb.asm

@ -5,6 +5,22 @@
;
;======================================================================
;
; NABU KEYBOARD CODES:
;
; $00-$7F STANDARD ASCII CODES
; $80-$8F JOYSTICK PREFIXES ($80 = JS1, $81 = JS2)
; $90-$9F KEYBOARD ERROR CODES
; $A0-$BF JOYSTICK DATA
; $C0-$DF UNUSED
; $E0-$EF SPECIAL KEYS
;
; NOTE THAT THE ERROR CODE $94 IS A WATCHDOG TIMER THAT WILL BE
; SENT BY THE KEYBOARD EVERY 3.7 SECONDS.
;
; THE CODE BELOW WILL IGNORE (SWALLOW) THE ERROR CODES ($90-$9F) AND
; WILL TRANSLATE SPECIAL KEYS ($E0-$FF) TO ROMWBW EQUIVALENTS. ALL
; OTHER KEYS WILL BE PASSED THROUGH AS IS.
;
; KBPORT EQU $90
;
; POLL FOR INPUT
@ -58,18 +74,28 @@ NABUKB_STAT:
RET NZ ; KEY WAITING, ALL SET
IN A,(NABUKB_DAT+1) ; GET BKD STATUS
AND $02 ; CHECK DATA RDY BIT
JR Z,NABUKB_STAT1 ; BAIL OUT IF NOT
JR Z,NABUKB_STATX ; BAIL OUT IF NOT
IN A,(NABUKB_DAT) ; GET THE KEY
BIT 7,A ; HIGH BIT IS SPECIAL CHAR
CALL NZ,NABUKB_XLAT ; IF SO, TRANSLATE IT
JR C,NABUKB_STAT1 ; CF INDICATES INVALID
JR Z,NABUKB_STAT2 ; IF NORMAL CHAR, BUFFER IT
CP $90 ; START OF ERR CODES
JR C,NABUKB_STAT1 ; NOT ERR CODE, CONTINUE
CP $A0 ; END OF ERR CODES
JR NC,NABUKB_STAT1 ; NOT ERR CODE, CONTINUE
JR NABUKB_STATX ; IS ERR CODE, IGNORE IT
NABUKB_STAT1:
CP $E0 ; SPECIAL CHARACTER?
JR C,NABUKB_STAT2 ; IF NOT, SKIP XLAT, BUFFER KEY
CALL NABUKB_XLAT ; IF SO, TRANSLATE IT
JR C,NABUKB_STATX ; CF INDICATES INVALID
NABUKB_STAT2:
LD (NABUKB_KEY),A ; BUFFER IT
LD A,1 ; KEY WAITING STATUS
LD A,1 ; SIGNAL KEY WAITING
LD (NABUKB_KSTAT),A ; SAVE IT
OR A ; SET FLAGS
RET
RET ; DONE
;
NABUKB_STAT1:
NABUKB_STATX:
XOR A ; SIGNAL NO CHAR READY
JP CIO_IDLE ; RETURN VIA IDLE PROCESSOR
;

5
Source/HBIOS/romldr.asm

@ -1496,6 +1496,11 @@ clrled:
out (RTCIO),a ; clear led
ld (HB_RTCVAL),a
#endif
#if (LEDMODE == LEDMODE_NABU)
; Bits 0 and 1 of the RTC latch are for the LEDs.
xor a
out (LEDPORT),a
#endif
#endif
#endif
ret

1
Source/HBIOS/std.asm

@ -148,6 +148,7 @@ CONBELL_IOBIT .EQU 2
LEDMODE_NONE .EQU 0
LEDMODE_STD .EQU 1
LEDMODE_RTC .EQU 2
LEDMODE_NABU .EQU 3
;
; DSKY MODE SELECTIONS
;

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 5
#DEFINE RUP 0
#DEFINE RTP 0
#DEFINE BIOSVER "3.5.0-dev.30"
#DEFINE BIOSVER "3.5.0-dev.31"
#define rmj RMJ
#define rmn RMN
#define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 5
rup equ 0
rtp equ 0
biosver macro
db "3.5.0-dev.30"
db "3.5.0-dev.31"
endm

Loading…
Cancel
Save