From 49359cc221e608f7216a0cec75dfdccc9d246ed7 Mon Sep 17 00:00:00 2001 From: Dean Netherton Date: Mon, 11 May 2020 11:10:31 +1000 Subject: [PATCH] ay38910: Updated boot beep to use a timer, if active for termination of boot beep sound --- Source/HBIOS/audio.inc | 2 +- Source/HBIOS/ay38910.asm | 45 ++++++++++++++++++++++++++++++++++---- Source/HBIOS/cfg_state.inc | 30 +++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 Source/HBIOS/cfg_state.inc diff --git a/Source/HBIOS/audio.inc b/Source/HBIOS/audio.inc index a3ca68da..b6365494 100644 --- a/Source/HBIOS/audio.inc +++ b/Source/HBIOS/audio.inc @@ -72,4 +72,4 @@ AUD_NOTE2: LD H, $FF ; OTHERWISE RETURN -1 PERIOD (ERROR) LD L, $FF RET -#ENDIF \ No newline at end of file +#ENDIF diff --git a/Source/HBIOS/ay38910.asm b/Source/HBIOS/ay38910.asm index 01dc90a5..38744a31 100644 --- a/Source/HBIOS/ay38910.asm +++ b/Source/HBIOS/ay38910.asm @@ -4,6 +4,10 @@ ; ;====================================================================== ; + +#include "cfg_state.inc" + + AY_RCSND .EQU 0 ; 0 = EB MODULE, 1=MF MODULE ; #IF (AYMODE == AYMODE_SCG) @@ -123,13 +127,46 @@ AY_FND: LD IY, AY_IDAT ; SETUP FUNCTION TABLE LD DE,(AY_R3CHBP*256)+$00 CALL AY_WRTPSG ; R03 = $00 = XXXX0000 ; - CALL LDELAY ; HALF SECOND DELAY -; - LD E,$00 ; SET VOLUME OFF - CALL AY_SETV ; ON ALL CHANNELS + +#IF SYSTIMEN + LD A, TICKFREQ / 3 ; SCHEDULE IN 1/3 SECOND TO TURN OFF SOUND + LD (AY_TIMTIK), A + + LD HL, (VEC_TICK + 1) ; GET CUR SECONDS VECTOR + LD (AY_TIMHOOK), HL ; SAVE IT INTERNALLY + LD HL, AY_TIMER ; INSTALL TIMER HOOK HANDLER + LD (VEC_TICK + 1), HL + +#ELSE + CALL LDELAY ; HALF SECOND DELAY + LD E,$00 ; SET VOLUME OFF + CALL AY_SETV ; ON ALL CHANNELS + +#ENDIF ; XOR A ; SUCCESSFULL INIT RET + +#IF SYSTIMEN +AY_TIMER: + LD A, (AY_TIMTIK) + DEC A + LD (AY_TIMTIK), A + JR NZ, AY_TIMER1 + + LD HL, (AY_TIMHOOK) ; REMOVE US FROM THE TIMER HOOKS LIST + LD (VEC_TICK + 1), HL + + LD E,$00 ; SET VOLUME OFF + CALL AY_SETV ; ON ALL CHANNELS + +AY_TIMER1: + JP 0 ; OVERWRITTEN WITH NEXT HANDLER +AY_TIMHOOK: .EQU $ - 2 + +AY_TIMTIK .DB 0 ; COUNT DOWN TO FINISH BOOT BEEP + +#ENDIF ; ;====================================================================== ; INITIALIZE DEVICE diff --git a/Source/HBIOS/cfg_state.inc b/Source/HBIOS/cfg_state.inc new file mode 100644 index 00000000..754f434b --- /dev/null +++ b/Source/HBIOS/cfg_state.inc @@ -0,0 +1,30 @@ + +#IFNDEF CFG_STATE +#DEFINE CFG_STATE + +SYSTIMEN .EQU FALSE + +#IF (CTCENABLE & INTMODE == 2 & CTCTIMER) +SYSTIMEN .SET TRUE +#ENDIF + +#IF (TMSENABLE & INTMODE == 1 & TMSTIMENABLE) +SYSTIMEN .SET TRUE +#ENDIF + +#IF (INTMODE == 1 & PLATFORM == PLT_SBC & HTIMENABLE) +SYSTIMEN .SET TRUE +#ENDIF + +#IF (INTMODE == 2 & CPUFAM == CPU_Z180) +SYSTIMEN .SET TRUE +#ENDIF + + .ECHO "TIMER INTERRUPT " +#IF SYSTIMEN + .ECHO "ACTIVE\n" +#ELSE + .ECHO "NOT ACTIVE\n" +#ENDIF + +#ENDIF