                TITLE SNDCLR : CALLER (SOUND.ASM)
                PAGE,132
                NAME MAIN_AEM
                ;
                ;HERE IS THE CODE FOR THE CALLING PROGRAM
                ;
                CSEG    SEGMENT PARA    PUBLIC  'CODE'
                BEEP  PROC    FAR
                        ASSUME  CS:CSEG
                ;FIXUP THE STACK TO RETURN TO DOS OR DEBUG
                ;
                begin:
		push    ds
		sub     ax,ax
		push    ax
		mov     ax,cseg         ;get the return program return segment
		mov     ds,ax
                        MOV     BX,25
                        MOV     DI,1000         ;the clock interval divisor
                        MOV     AL,0B6H         ;WRITE TIMER MODE REGISTER
                        OUT     43H,AL          ;LOAD THE PORT
                        MOV     DX,14H
                        MOV     AX,4F38H        ;1331000/FREQUENCY PULSE
                        DIV     DI
                        OUT     42H,AL          ;WRITE TIMER LOW BYTE
                        MOV     AL,AH
                        OUT     42H,AL
                        IN      AL,61H          ;GET CURRENT PORT B SETTING
                        MOV     AH,AL           ;AND MOVE IT TO AH
                        OR      AL,3            ;SWITCH SPEAKER ON
                        OUT     61H,AL
                WAIT:   MOV     CX,2801         ;WAIT 10 MILLISECONDS
                SPK_ON: LOOP    SPK_ON
                        DEC     BX              ;SPEAKER ON TIME EXPIRED?
                        JNZ     WAIT            ;IF NOT KEEP SPEAKER ON
                        MOV     AL,AH
                        OUT     61H,AL          ;PORT VALUE RECOVERED..CONTINUE
                        RET
	  beep	endp
                CSEG    ENDS
                        END     begin
