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