www.pudn.com > hpbios.rar > AUDIO.ASM


	 
;	[]===========================================================[] 
; 
;	NOTICE: THIS PROGRAM BELONGS TO AWARD SOFTWARE INTERNATIONAL(R) 
;	        INC. IT IS CONSIDERED A TRADE SECRET AND IS NOT TO BE 
;	        DIVULGED OR USED BY PARTIES WHO HAVE NOT RECEIVED 
;	        WRITTEN AUTHORIZATION FROM THE OWNER. 
; 
; 	[]===========================================================[] 
; 
    										 
;---------------------------------------------------------------------------- 
;Rev	Date	 Name	Description 
;---------------------------------------------------------------------------- 
;R19	06/01/98 JDN	Added codes for YMF715 suspend/resume 
 
.386p 
		PAGE	56,132 
		TITLE	AUDIO.ASM 
.XLIST 
		INCLUDE	BIOS.CFG 
		INCLUDE	COMMON.EQU		 
		INCLUDE	COMMON.MAC 
		INCLUDE POST.EQU 
 
		extrn	F000_call_proc:near 
		extrn	F000_GetItem_Value:near 
		extrn	F000_VECT:near 
		extrn	RET_E_SEG:near 
 
IF	AUDIO_KERNEL 
 
		COMPILE_FOR_AUDIO_ASM	=	1 
 
		include	AUDIO.AIO 
 
ENDIF	;AUDIO_KERNEL 
 
	ifdef Crystal_Item_Cmos_Bit			 
		extrn	Crystal_Item:near		 
	endif ;Crystal_Item_Cmos_Bit			 
 
 
G_RAM		SEGMENT	USE16 AT 0 
 
		ORG	04H*4 
		INCLUDE	SEG_0.INC 
 
		ORG	400H 
		INCLUDE	G_RAM.INC 
 
G_RAM		ENDS 
 
ifdef	Notebook_Power_Management 
SM_RAM		SEGMENT	USE16 AT 0 
		INCLUDE	SM_RAM.INC 
SM_RAM		ENDS 
endif	;Notebook_Power_Management 
 
.LIST 
 
DGROUP		GROUP	FCODE 
FCODE           SEGMENT PARA PUBLIC 'CODE' 
                ASSUME  CS:DGROUP 
FCODE           ENDS 
 
EGROUP		GROUP	ECODE 
ECODE		SEGMENT	USE16 PARA PUBLIC 'ECODE' 
		ASSUME	CS:EGROUP,DS:G_RAM,ES:EGROUP 
 
;[]======================================================================[] 
;[]======================================================================[] 
		Public	Init_Onboard_AUDIO 
Init_Onboard_AUDIO	Proc	Near 
 
IF	AUDIO_KERNEL 
 
		pushad 
		push	ds 
		push	es 
		pushf 
		cli 
 
		call	Prg_Audio_Chip 
 
		popf 
		pop	es 
		pop	ds 
		popad 
 
ENDIF	;AUDIO_KERNEL 
 
		ret 
 
Init_Onboard_AUDIO	Endp 
 
;[]======================================================================[] 
;[]======================================================================[] 
 
IF	AUDIO_KERNEL 
 
		COMPILE_FOR_AUDIO_ASM	=	2 
 
		Public	Prg_Audio_Chip		 
		include	AUDIO.AIO 
 
ENDIF	;AUDIO_KERNEL 
 
;[]======================================================================[] 
;[]======================================================================[] 
;;;		Public	E_GetItem_Value 
E_GetItem_Value	Proc	Near 
		jmp	F000_GetItem_Value 
		ret 
E_GetItem_Value	Endp 
 
ifdef CS4237B		 
CS4236	EQU	1 
endif ;CS4237B 
 
ifdef CS4236B 
CS4236	EQU	1 
endif ;CS4236B		 
 
;[]======================================================================[] 
;Special_PNP_Audio_Init 
;	Initialize Some Special PNP Audio 
;Save  : all but flags 
;Input : None 
;Output: None 
;Note  : 
;[]======================================================================[] 
		Public	Special_PNP_Audio_Init 
Special_PNP_Audio_Init	Proc	Near 
 
	ifdef	YMF711 
     		call	Program_YMF711_Audio_Resource_Data 
	endif	;YMF711 
 
	ifdef	YMF715						 
     		call	Program_YMF715_Audio_Resource_Data	 
	endif	;YMF715						 
 
	ifdef	CS4236						 
     		call	Program_CS4236_Audio_Resource_Data	 
	endif	;CS4236						 
 
 
	ifdef	CMI8330_Audio_Support                            
		extrn	Program_CMI8330_Audio:near               
     		call	Program_CMI8330_Audio                    
	endif	;CMI8330_Audio_Support                           
 
 
		ret 
Special_PNP_Audio_Init	Endp 
 
 
 
;add follow define for moving code to YMF711.AIO, CS4236.AIO, ..... 
 
		include	BIOSPNP.AIO 
ifdef	Notebook_Power_Management 
		Public	Save_Sound 
Save_Sound	proc	near 
 
		push	es 
		push	ds 
		push	ebx 
 
		xor	ax,ax 
		mov	es,ax 
ifdef	YMF715				 
		call	Getlogdev 
		call	Get_Index		;R19 
		call	Save_WssMixer 
endif	;YMF715 
 		call	Save_SbMixer 
		call	Suspend_Save_Audio	 
 
		pop	ebx 
		pop	ds 
		pop	es 
 
 
		ret 
Save_Sound	Endp 
 
Save_SbMixer	proc	near 
		push 	ebx	 
		mov	edi,ebx 
		add	edi,offset Sound_State_Save 
 
		mov	si,offset Mix_addr_tbl 
		mov	cx,((offset Mix_addr_end)-(offset Mix_addr_tbl))/2 
 
	@@: 
		mov	dx,cs:[si] 
		mov	al,04h		;Save original Voice val 
		call	Get_Mix_Val 
		push	ax 
 
		mov	ax,5504h	;Set Voice val = 55h 
		call	Set_Mix_val 
		IODELAY 
		mov	al,04h		;Get Voice val 
		call	Get_Mix_Val 
		cmp	al,55h 
		pop	ax 
		jz	short @f 
 
		add	si,2 
		loop	@B 
 
	    	jmp	short No_Find_Sound_S 
	@@: 
		mov	ah,al 
		mov	al,04h		;Restore original Voice val 
		call	Set_Mix_val 
		Call	SAVE_BEFORE_TURN_ON_AUDIO	 
	  		 
		mov	cx,((offset Mix_tbl_end)-(offset Mix_tbl)) 
		mov	si,offset Mix_tbl 
	@@: 
		mov	al,byte ptr cs:[si] 
		call	Get_Mix_Val 
		stos	byte ptr es:[edi] 
		inc	si 
		loop	short @B 
 
No_Find_Sound_S:	 
		pop   	ebx 
		ret 
Save_SbMixer	ENDP 
 
SAVE_BEFORE_TURN_ON_AUDIO	Proc Near 
ifdef	CT2510_AUDIO_SAVE 
		mov	al,7ch 
		call	Get_Mix_Val 
		and	al,11101111b 
		or	al,11000000b 
		xchg	al,ah 
		mov	al,7ch 
		call	Set_Mix_val 
endif	;CT2510_AUDIO_SAVE 
ifdef	ES1879_Suspend_patch 
		push	dx 
		mov	al,40h 
		out	dx,al 
		inc	dx 
		in	al,dx 
		in	al,dx 
		in	al,dx 
		mov	ah,al 
		in	al,dx 
		mov	dx,ax 
		mov	al,2dh 
		out	dx,al 
		inc	dx 
		in	al,dx 
		or	al,00000011b 
		out	dx,al 
		pop	dx 
endif	;ES1879_Suspend_patch 
		ret 
SAVE_BEFORE_TURN_ON_AUDIO	Endp 
 
		Public	Restore_Sound 
Restore_Sound	proc	near 
 
		push	es 
		push	ds 
		push	ebx 
 
		xor	ax,ax 
		mov	ds,ax 
ifdef	YMF715 
		call	SetLogdev   	 
		call    Restore_WssMixer 
endif	;YMF715 
		call	Restore_SbMixer 
		call	Suspend_Restore_Audio		 
		pop	ebx 
		pop	ds 
		pop	es 
		ret 
Restore_Sound	Endp 
 
Restore_SbMixer	Proc	near 
		push    ebx 
		mov	si,offset Mix_addr_tbl 
		mov	cx,((offset Mix_addr_end)-(offset Mix_addr_tbl))/2 
	@@: 
		mov	dx,cs:[si] 
		mov	ax,5504h	;Set Voice val = 55h 
		call	Set_Mix_val 
		IODELAY 
		mov	al,04h		;Get Voice val 
		call	Get_Mix_Val 
		cmp	al,55h 
		jz	short @f 
 
		add	si,2 
		loop	@B 
	    	jmp	short No_Find_Sound_R 
	@@: 
 
		mov	cx,((offset Mix_tbl_end)-(offset Mix_tbl)) 
		mov	esi,ebx 
		add	esi,offset Sound_State_Save 
		mov	di,offset Mix_tbl 
	@@: 
		mov	ah, byte ptr ds:[esi] 
		mov	al, byte ptr cs:[di] 
		call	Set_Mix_Val 
		inc	esi 
		inc	di 
		loop	short @B 
 
No_Find_Sound_R:		 
		pop 	ebx 
		ret 
Restore_SbMixer	ENDP 
 
Get_Mix_val	proc	near 
		out	dx,al 
		IODELAY 
		inc	dx 
		in	al,dx 
		IODELAY 
		dec	dx	 
		ret 
Get_Mix_val	ENDP 
 
Set_Mix_val	proc	near 
		out	dx,al 
		IODELAY 
		inc	dx 
		mov	al,ah 
		out	dx,al 
		IODELAY 
		dec	dx	 
		ret 
Set_Mix_val	ENDP 
 
Mix_tbl: 
	db	04h 
	db	0ah 
	db	0ch 
	db	0eh   
	db	22h 
	db	26h 
	db	28h 
	db	2eh 
ifndef	YMF715	 
	db	30h 
	db	31h 
	db	32h 
	db	33h 
	db	34h 
	db	35h 
	db	36h 
	db	37h 
	db	38h 
        db	39h 
	db	3ah 
	db	3bh 
	db	3ch 
	db	3dh 
	db	3eh 
endif	;YMF715 
Mix_tbl_end: 
 
Mix_addr_tbl: 
	dw	224h 
	dw	234h 
	dw	244h 
	dw	254h 
	dw	264h 
	dw	274h 
	dw	284h 
Mix_addr_end: 
 
IF	AUDIO_KERNEL	EQ	0 
Suspend_Save_Audio	Proc	near 
ifdef	ES1869_Suspend_patch 
			;Sound chip use ES1869 
			;issue reset signal : sound chip wakeup 
			mov	dx,226h		;Audio_Base + 6 = 1 
			mov	al,1		 
			out	dx,al		 
			in	al,dx		 
 
			mov	al,0		;Audio_Base + 6 = 0 
			out	dx,al		 
			xor	cx,cx		 
			loop	$		 
 
			mov	dx,22eh		;if Audio_Base+E bit 7 = 1 
			in	al,dx		;   then reset ok 
			test	al,10000000b	 
			jz	short Reset_ok	 
			mov	dx,22ah		;else read Audio_Base+A 
		retry:				 
			in	al,dx		 
			cmp	al,0aah		;if Audio_Base+A != 0aah 
			jne	short retry	;   then retry 
		Reset_ok:			 
 
			xor	cx,cx		 
			loop	short $		 
endif	;ES1869_Suspend_patch 
 
ifdef	YMF715 
		call	Save_Wss 
endif	;YMF715 
		ret 
Suspend_Save_Audio	endp 
 
Suspend_Restore_Audio	Proc	near 
ifdef	YMF715 
		call    Restore_Wss 
		call	Set_Index		;R19					 
endif	;YMF715				 
		ret 
Suspend_Restore_Audio	endp 
 
 
ENDIF	;AUDIO_KERNEL	EQ	0 
endif	;Notebook_Power_Management 
 
ECODE		ENDS 
		END