Browse Source

ay38910: Updated boot beep to use a timer, if active for termination of boot beep sound

pull/127/head
Dean Netherton 6 years ago
parent
commit
49359cc221
  1. 2
      Source/HBIOS/audio.inc
  2. 45
      Source/HBIOS/ay38910.asm
  3. 30
      Source/HBIOS/cfg_state.inc

2
Source/HBIOS/audio.inc

@ -72,4 +72,4 @@ AUD_NOTE2:
LD H, $FF ; OTHERWISE RETURN -1 PERIOD (ERROR)
LD L, $FF
RET
#ENDIF
#ENDIF

45
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

30
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
Loading…
Cancel
Save