Browse Source

Add Speaker Beep

Added a generic routine in HBIOS to play a beep sound on the first available sound device.  Implemented the beep in the ANSI and TTY terminal emulators.
pull/331/head v3.1.1-pre.177
Wayne Warthen 4 years ago
parent
commit
11ea0c8c27
  1. 5
      Source/HBIOS/ansi.asm
  2. 82
      Source/HBIOS/hbios.asm
  3. 103
      Source/HBIOS/sn76489.asm
  4. 2
      Source/HBIOS/tty.asm
  5. 2
      Source/ver.inc
  6. 2
      Source/ver.lib

5
Source/HBIOS/ansi.asm

@ -280,6 +280,8 @@ ANSI_STSTR: ; STATE == STRING DATA
;================================================================================================== ;==================================================================================================
; ;
ANSI_C0DISP: ANSI_C0DISP:
CP $07 ; BEL
JP Z,ANSI_BEL
CP $08 ; BS: BACKSPACE CP $08 ; BS: BACKSPACE
JP Z,ANSI_BS JP Z,ANSI_BS
CP $09 ; HT: TAB CP $09 ; HT: TAB
@ -615,6 +617,9 @@ ANSI_FF:
CALL ANSI_VDADISP ; PERFORM FILL CALL ANSI_VDADISP ; PERFORM FILL
JP ANSI_XY ; HOME CURSOR AND RETURN JP ANSI_XY ; HOME CURSOR AND RETURN
; ;
ANSI_BEL:
JP SND_BEEP ; BEEP THE SPEAKER
;
ANSI_BS: ANSI_BS:
LD A,(ANSI_COL) ; GET CURRENT COLUMN LD A,(ANSI_COL) ; GET CURRENT COLUMN
DEC A ; BACK IT UP BY ONE DEC A ; BACK IT UP BY ONE

82
Source/HBIOS/hbios.asm

@ -2827,42 +2827,7 @@ INITSYS4:
#ENDIF #ENDIF
; ;
#IFDEF TESTING #IFDEF TESTING
;
; ROUTINE TO BEEP THE DEAULT SOUND UNIT (NOT FINISHED)
; NEED TO CHECK FOR EXISTENCE OF SOUND UNIT 0
; NEED TO TEST AGAINST ALL SOUND DRIVERS
; CAN SPEAKER DRIVER BE MODIFIED TO PLAY ARBITRARY DURATION?
; WHICH CHANNEL SHOULD BE USED? IS THERE A GOOD DEFAULT CHANNEL?
;
SNDUNIT .EQU 0
;
HB_BEEP:
LD B,$50 ; SOUND RESET FUNCTION
LD C,SNDUNIT ; SOUND UNIT NUMBER
CALL SND_DISPATCH ; DO IT
LD B,$51 ; VOLUME
LD C,SNDUNIT ; SOUND UNIT NUMBER
LD L,$FF ; MAX
CALL SND_DISPATCH ; DO IT
LD B,$53 ; SELECT NOTE
LD C,SNDUNIT ; SOUND UNIT NUMBER
;LD HL,0 ; A0#
LD HL,200 ; C4
CALL SND_DISPATCH ; DO IT
;LD B,$56 ; DURATION
;LD C,SNDUNIT ; SOUND UNIT NUMBER
;LD HL,500 ; 1/2 SECOND
;CALL SND_DISPATCH ; DO IT
LD B,$54 ; PLAY SOUND
LD C,SNDUNIT ; SOUND UNIT NUMBER
LD D,1 ; CHANNEL 0
CALL SND_DISPATCH ; DO IT
LD DE,15625 ; PLAY FOR 1/4 SECOND
CALL VDELAY
LD B,$50 ; SOUND RESET FUNCTION
LD C,SNDUNIT ; SOUND UNIT NUMBER
CALL SND_DISPATCH ; DO IT
;
CALL SND_BEEP
#ENDIF #ENDIF
; ;
#IFNDEF ROMBOOT #IFNDEF ROMBOOT
@ -3749,7 +3714,7 @@ SND_ADDENT:
; WORD UNIT SPECIFIC DATA (TYPICALLY A DEVICE INSTANCE DATA ADDRESS) ; WORD UNIT SPECIFIC DATA (TYPICALLY A DEVICE INSTANCE DATA ADDRESS)
; ;
SND_FNCNT .EQU 8 ; NUMBER OF SND FUNCS (FOR RANGE CHECK) SND_FNCNT .EQU 8 ; NUMBER OF SND FUNCS (FOR RANGE CHECK)
SND_MAX .EQU 4 ; UP TO 3 UNITS
SND_MAX .EQU 4 ; UP TO 4 UNITS
SND_SIZ .EQU SND_MAX * 4 ; EACH ENTRY IS 4 BYTES SND_SIZ .EQU SND_MAX * 4 ; EACH ENTRY IS 4 BYTES
; ;
.DB SND_FNCNT ; SND FUNCTION COUNT (FOR RANGE CHECK) .DB SND_FNCNT ; SND FUNCTION COUNT (FOR RANGE CHECK)
@ -3758,6 +3723,49 @@ SND_CNT .DB 0 ; ENTRY COUNT PREFIX
SND_TBL .FILL SND_SIZ,0 ; SPACE FOR ENTRIES SND_TBL .FILL SND_SIZ,0 ; SPACE FOR ENTRIES
; ;
;================================================================================================== ;==================================================================================================
; SPEAKER BEEP ROUTINE
;==================================================================================================
;
; ROUTINE TO BEEP THE DEAULT SOUND UNIT
; NEED TO CHECK FOR EXISTENCE OF SOUND UNIT
; WHICH CHANNEL SHOULD BE USED? IS THERE A GOOD DEFAULT CHANNEL?
;
SND_BEEP:
; CHECK FOR AT LEAST 1 SOUND DEVICE
LD A,(SND_CNT) ; GET SOUND UNIT COUNT
OR A ; CHECK FOR ZERO
RET Z ; BAIL OUT IF NO SOUND UNITS
; PLAY A BEEP ON SOUND DEVICE UNIT 0
LD B,$50 ; SOUND RESET FUNCTION
LD C,0 ; SOUND UNIT NUMBER
CALL SND_DISPATCH ; DO IT
LD B,$51 ; VOLUME
LD C,0 ; SOUND UNIT NUMBER
LD L,$FF ; MAX
CALL SND_DISPATCH ; DO IT
LD B,$53 ; SELECT NOTE
LD C,0 ; SOUND UNIT NUMBER
;LD HL,0 ; A0#
LD HL,244 ; B5 (CLOSE TO 1 KHZ)
CALL SND_DISPATCH ; DO IT
;LD B,$56 ; DURATION
;LD C,0 ; SOUND UNIT NUMBER
;LD HL,500 ; 1/2 SECOND
;CALL SND_DISPATCH ; DO IT
LD B,$54 ; PLAY SOUND
LD C,0 ; SOUND UNIT NUMBER
LD D,0 ; CHANNEL 0
CALL SND_DISPATCH ; DO IT
LD DE,15625 ; PLAY FOR 1/4 SECOND
CALL VDELAY ; WAIT WHILE TONE IS PLAYED
;CALL LDELAY ; LET SOUND PLAY 1/2 SECOND
LD B,$50 ; SOUND RESET FUNCTION
LD C,0 ; SOUND UNIT NUMBER
CALL SND_DISPATCH ; DO IT
RET ; DONE
;
;==================================================================================================
; SYSTEM FUNCTION DISPATCHER ; SYSTEM FUNCTION DISPATCHER
;================================================================================================== ;==================================================================================================
; ;

103
Source/HBIOS/sn76489.asm

@ -409,58 +409,57 @@ SNT_PLAY .DB "\r\nSN7_PLAY CH: $"
SNT_REGWR .DB "\r\nOUT SN76489, $" SNT_REGWR .DB "\r\nOUT SN76489, $"
#ENDIF #ENDIF
; THE FREQUENCY BY QUARTER TONE STARTING AT A0# OCTAVE 0
; THE FREQUENCY BY QUARTER TONE STARTING AT A0#
; USED TO MAP EACH OCTAVE (DIV BY 2 TO JUMP AN OCTAVE UP) ; USED TO MAP EACH OCTAVE (DIV BY 2 TO JUMP AN OCTAVE UP)
; FIRST PLAYABLE NOTE WILL BE $2E
; ASSUMING A CLOCK OF 1843200 THIS MAPS TO
; 2 QUATER TONES BELOW A1#, WITH A1# AT $30
; ASSUMING A CLOCK OF 3575950 HZ, THE FIRST PLAYABLE
; NOTE WILL BE A2 (HBIOS NOTE CODE 92).
SN7NOTETBL: SN7NOTETBL:
.DW SN7RATIO / 2913
.DW SN7RATIO / 2956
.DW SN7RATIO / 2999
.DW SN7RATIO / 3042
.DW SN7RATIO / 3086
.DW SN7RATIO / 3131
.DW SN7RATIO / 3177
.DW SN7RATIO / 3223
.DW SN7RATIO / 3270
.DW SN7RATIO / 3318
.DW SN7RATIO / 3366
.DW SN7RATIO / 3415
.DW SN7RATIO / 3464
.DW SN7RATIO / 3515
.DW SN7RATIO / 3566
.DW SN7RATIO / 3618
.DW SN7RATIO / 3670
.DW SN7RATIO / 3724
.DW SN7RATIO / 3778
.DW SN7RATIO / 3833
.DW SN7RATIO / 3889
.DW SN7RATIO / 3945
.DW SN7RATIO / 4003
.DW SN7RATIO / 4061
.DW SN7RATIO / 4120
.DW SN7RATIO / 4180
.DW SN7RATIO / 4241
.DW SN7RATIO / 4302
.DW SN7RATIO / 4365
.DW SN7RATIO / 4428
.DW SN7RATIO / 4493
.DW SN7RATIO / 4558
.DW SN7RATIO / 4624
.DW SN7RATIO / 4692
.DW SN7RATIO / 4760
.DW SN7RATIO / 4829
.DW SN7RATIO / 4899
.DW SN7RATIO / 4971
.DW SN7RATIO / 5043
.DW SN7RATIO / 5116
.DW SN7RATIO / 5191
.DW SN7RATIO / 5266
.DW SN7RATIO / 5343
.DW SN7RATIO / 5421
.DW SN7RATIO / 5499
.DW SN7RATIO / 5579
.DW SN7RATIO / 5661
.DW SN7RATIO / 5743
.DW SN7RATIO / 2913 ; A0#/B0b
.DW SN7RATIO / 2956 ;
.DW SN7RATIO / 2999 ;
.DW SN7RATIO / 3042 ;
.DW SN7RATIO / 3086 ; B0
.DW SN7RATIO / 3131 ;
.DW SN7RATIO / 3177 ;
.DW SN7RATIO / 3223 ;
.DW SN7RATIO / 3270 ; C1
.DW SN7RATIO / 3318 ;
.DW SN7RATIO / 3366 ;
.DW SN7RATIO / 3415 ;
.DW SN7RATIO / 3464 ; C1#/D1b
.DW SN7RATIO / 3515 ;
.DW SN7RATIO / 3566 ;
.DW SN7RATIO / 3618 ;
.DW SN7RATIO / 3670 ; D1
.DW SN7RATIO / 3724 ;
.DW SN7RATIO / 3778 ;
.DW SN7RATIO / 3833 ;
.DW SN7RATIO / 3889 ; D1#/E1b
.DW SN7RATIO / 3945 ;
.DW SN7RATIO / 4003 ;
.DW SN7RATIO / 4061 ;
.DW SN7RATIO / 4120 ; E1
.DW SN7RATIO / 4180 ;
.DW SN7RATIO / 4241 ;
.DW SN7RATIO / 4302 ;
.DW SN7RATIO / 4365 ; F1
.DW SN7RATIO / 4428 ;
.DW SN7RATIO / 4493 ;
.DW SN7RATIO / 4558 ;
.DW SN7RATIO / 4624 ; F1#/G1b
.DW SN7RATIO / 4692 ;
.DW SN7RATIO / 4760 ;
.DW SN7RATIO / 4829 ;
.DW SN7RATIO / 4899 ; G1
.DW SN7RATIO / 4971 ;
.DW SN7RATIO / 5043 ;
.DW SN7RATIO / 5116 ;
.DW SN7RATIO / 5191 ; G1#/A1b
.DW SN7RATIO / 5266 ;
.DW SN7RATIO / 5343 ;
.DW SN7RATIO / 5421 ;
.DW SN7RATIO / 5499 ; A1
.DW SN7RATIO / 5579 ;
.DW SN7RATIO / 5661 ;
.DW SN7RATIO / 5743 ;

2
Source/HBIOS/tty.asm

@ -131,6 +131,8 @@ TTY_DEVICE:
; ;
TTY_DOCHAR: TTY_DOCHAR:
LD A,E ; CHARACTER TO PROCESS LD A,E ; CHARACTER TO PROCESS
CP 7 ; BEL
JP Z,SND_BEEP
CP 8 ; BACKSPACE CP 8 ; BACKSPACE
JR Z,TTY_BS JR Z,TTY_BS
CP 12 ; FORMFEED CP 12 ; FORMFEED

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1 #DEFINE RMN 1
#DEFINE RUP 1 #DEFINE RUP 1
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.176"
#DEFINE BIOSVER "3.1.1-pre.177"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1 rup equ 1
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.1.1-pre.176"
db "3.1.1-pre.177"
endm endm

Loading…
Cancel
Save