From c8794d2b9c5cbff0515b1df67ce1724c2d6e0e0b Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Fri, 19 Apr 2024 16:49:12 -0700 Subject: [PATCH] NABU LEDs - Utilize NABU front panel LEDs for startup diagnostics and disk activity. - Modified NABU keyboard driver to pass thru joystick activity codes. --- Source/HBIOS/ansi.asm | 12 +++++++++++ Source/HBIOS/cfg_duo.asm | 2 +- Source/HBIOS/cfg_dyno.asm | 2 +- Source/HBIOS/cfg_epitx.asm | 2 +- Source/HBIOS/cfg_heath.asm | 2 +- Source/HBIOS/cfg_master.asm | 2 +- Source/HBIOS/cfg_mbc.asm | 2 +- Source/HBIOS/cfg_mk4.asm | 2 +- Source/HBIOS/cfg_mon.asm | 2 +- Source/HBIOS/cfg_n8.asm | 2 +- Source/HBIOS/cfg_nabu.asm | 6 +++--- Source/HBIOS/cfg_rcz180.asm | 2 +- Source/HBIOS/cfg_rcz280.asm | 2 +- Source/HBIOS/cfg_rcz80.asm | 2 +- Source/HBIOS/cfg_rph.asm | 2 +- Source/HBIOS/cfg_s100.asm | 2 +- Source/HBIOS/cfg_sbc.asm | 2 +- Source/HBIOS/cfg_scz180.asm | 2 +- Source/HBIOS/cfg_z80retro.asm | 2 +- Source/HBIOS/cfg_zeta.asm | 2 +- Source/HBIOS/cfg_zeta2.asm | 2 +- Source/HBIOS/hbios.asm | 10 +++++++++ Source/HBIOS/nabukb.asm | 38 +++++++++++++++++++++++++++++------ Source/HBIOS/romldr.asm | 5 +++++ Source/HBIOS/std.asm | 1 + Source/ver.inc | 2 +- Source/ver.lib | 2 +- 27 files changed, 84 insertions(+), 30 deletions(-) diff --git a/Source/HBIOS/ansi.asm b/Source/HBIOS/ansi.asm index f6a9dc88..8ca7e7f5 100644 --- a/Source/HBIOS/ansi.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_duo.asm b/Source/HBIOS/cfg_duo.asm index 107fb3a9..893a6587 100644 --- a/Source/HBIOS/cfg_duo.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index 791177fe..63c18fcf 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_epitx.asm b/Source/HBIOS/cfg_epitx.asm index a5b0c1c9..932a62c6 100644 --- a/Source/HBIOS/cfg_epitx.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_heath.asm b/Source/HBIOS/cfg_heath.asm index 72c2737e..8ad98887 100644 --- a/Source/HBIOS/cfg_heath.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 8c4b9d50..b813b71a 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index 890e6a84..a9bc9bd8 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 31b60aef..2063892c 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_mon.asm b/Source/HBIOS/cfg_mon.asm index f3cb889e..94e2dfd1 100644 --- a/Source/HBIOS/cfg_mon.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index ffcac599..6aaeba20 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_nabu.asm b/Source/HBIOS/cfg_nabu.asm index a44a56a8..d906ee10 100644 --- a/Source/HBIOS/cfg_nabu.asm +++ b/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 diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 84a54d59..b10812ba 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index 92b1c01c..c2c24b2c 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index a04c1803..7a78404b 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index dcdad453..206a8db0 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_s100.asm b/Source/HBIOS/cfg_s100.asm index 123f37e9..d3ed65c7 100644 --- a/Source/HBIOS/cfg_s100.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index fbf65a8e..a64395e0 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index 2b189277..57a60175 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_z80retro.asm b/Source/HBIOS/cfg_z80retro.asm index ee96e89e..36b86b85 100644 --- a/Source/HBIOS/cfg_z80retro.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index c2b9e790..cfe19702 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/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 ; diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index fe567637..778b7a13 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/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 ; diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 9aa76cc8..db0466d1 100644 --- a/Source/HBIOS/hbios.asm +++ b/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 diff --git a/Source/HBIOS/nabukb.asm b/Source/HBIOS/nabukb.asm index 4d936e97..873bd79c 100644 --- a/Source/HBIOS/nabukb.asm +++ b/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 ; diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 611a50cf..021efe85 100644 --- a/Source/HBIOS/romldr.asm +++ b/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 diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index d66f8eb9..62bc7b72 100644 --- a/Source/HBIOS/std.asm +++ b/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 ; diff --git a/Source/ver.inc b/Source/ver.inc index a19eed64..d557051d 100644 --- a/Source/ver.inc +++ b/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 diff --git a/Source/ver.lib b/Source/ver.lib index b95a624a..bf0a23fb 100644 --- a/Source/ver.lib +++ b/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