www.pudn.com > hpbios.rar > AM29F002.NVM
; []===========================================================[] ; ; 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 ;---------------------------------------------------------------------------- ;R09 02/16/00 BAR Support winbond LPC W49V002 2M Flash ; Move old code ;R08 02/01/00 BAR Added define post flash write use XDGROUP ;R07 07/20/99 BAR Support use SMI update flash ROM . ; Move all RXX . ;R06 01/28/99 BAR Support update ESCD DMI in SMM mode. ; define switch "Flash_IN_SMBASE" ;R05 05/14/98 BAR Support ATMEL 49F001T 1M flash. ;R04 13/04/98 BAR Added support ATMEL AT49F002T ; AMD 29F002T only use A0-A12 0X555h=05555h ;R03 06/01/98 BAR Fixed system hold when AM29F002NT write protection ; by EEPROM write. ;R02 05/02/97 AVN Added More Wait For SIS 5597/8, 5581/2 Updating ESCD Succes. ;R01 12/05/96 AVN Suppost Both With/out Define ESCD_M2 and Save Code. ;R00 07/02/96 AVN Initial Revision. ;**************************************************************** ;* * ;* SUBROUTINES TO SUPPORT AMD 2M TYPE FLASH ROM * ;* * ;**************************************************************** ifndef Flash_IN_SMBASE ;[]========================================================================[] ; AM29F002T_Flash_Erase : ; ; Erase AM29F002T PARAMETER BLOCK (FA000h - FBFFFh) ; ;Saves : None ;Input : None ; ;Output: CF = 0 , Successful ; CF = 1 , Error Erase ; ;[]========================================================================[] AT49F001T_Flash_Erase: AM29F002T_Flash_Erase Proc Near pusha mov byte ptr gs:[05555h],0aah ; mov byte ptr gs:[02aaah],055h ; mov byte ptr gs:[05555h],080h ;page erase mov byte ptr gs:[05555h],0aah ;command mov byte ptr gs:[02aaah],055h ; mov byte ptr es:[di],030h ; ifNdef POST_FLASH_IN_XGROUP ;R09 mov dx,offset EEPROM_Wait_10ms call dx else; POST_FLASH_IN_XGROUP ;R09 push cx mov cx,350 call dx pop cx endif; POST_FLASH_IN_XGROUP ;R09 call AM29F002T_Check_Toggle_Ready jnc AM29F002T_Erase_OK AM29F002T_Erase_Fail: stc popa ret AM29F002T_Erase_OK: mov al,byte ptr es:[di] cmp al,0ffh jne short AM29F002T_Erase_Fail clc popa ret AM29F002T_Flash_Erase endp ;[]====================================================================[] ; AM29F002T_Flash_Write : ; ; Program AM29F002T PARAMETER BLOCK ; ;Saves : ;Input : Source = DS : SI ; Target = ES : DI (Range = FA000h-FBFFFh) ; Length = CX ; ;Output: CF = 0 Successful ; CF = 1 Error Program ; ;[]====================================================================[] AT49F001T_Flash_Write: AM29F002T_Flash_Write Proc Near pusha AM29F002T_Prg_Next_Byte: mov bx,25 ;Program Retry Count mov al,ds:[si] ;Read Data AM29F002T_Verify_Retry: call AM29F002T_Prg_Sequence mov byte ptr es:[di],al ;R08 call AM29F002T_Check_Toggle_Ready jc short AM29F002NT_Toggle_error ;; Make Sure Program Correct mov al, byte ptr es:[di] ;R08 cmp al,ds:[si] je short AM29F002T_Verify_OK AM29F002NT_Toggle_error: dec bx jnz short AM29F002T_Verify_Retry stc ;Set Program Fail jmp short AM29F002T_Prog_Exit AM29F002T_Verify_OK: inc si inc di loop AM29F002T_Prg_Next_Byte clc AM29F002T_Prog_Exit: popa ret AM29F002T_Flash_Write Endp AM29F002T_Prg_Sequence proc near mov byte ptr gs:[05555h],0aah mov byte ptr gs:[02AAAh],055h mov byte ptr gs:[05555h],0a0h ret AM29F002T_Prg_Sequence endp AM29F002T_Check_Toggle_Ready proc near Toggle_Bit = 01000000b push cx push bx mov ah, byte ptr es:[di] mov bx,1000 Ststus_Read_Loop: xor cx,cx Ststus_Read_Loop_1: mov al, byte ptr es:[di] xor ah,al test ah,Toggle_Bit jz short Toggle_End mov ah,al loop Ststus_Read_Loop_1 dec bx jnz Ststus_Read_Loop stc ;Time out pop bx pop cx ret Toggle_End: clc ;Toggle end pop bx pop cx ret AM29F002T_Check_Toggle_Ready endp else; Flash_IN_SMBASE ;[]========================================================================[] ; AM29F002T_Flash_Erase : ; ; Erase AM29F002T PARAMETER BLOCK (FA000h - FBFFFh) ; ;Saves : None ;Input : None ; ;Output: CF = 0 , Successful ; CF = 1 , Error Erase ; ;[]========================================================================[] AT49F001T_Flash_Erase: AM29F002T_Flash_Erase Proc Near push esi push edi mov esi,0FFFF5555H mov edi,0FFFF2AAAH mov byte ptr es:[esi],0AAh mov byte ptr es:[edi],055h mov byte ptr es:[esi],080h mov byte ptr es:[esi],0AAh mov byte ptr es:[edi],055h pop edi pop esi mov byte ptr es:[edi],30h push cx ifdef More_Flash_Wait_Time mov cx,350 * 3 else; More_Flash_Wait_Time mov cx,350 endif; More_Flash_Wait_Time call dx ;delay time = (30ns)* cx =10.5ms pop cx pusha mov al,byte ptr es:[edi] mov bh,al AM29F002T_Erase_Verify: mov al,byte ptr es:[edi] mov bl,bh xor bh,al test bh,40h mov bh,al jz short AM29F002T_Erase_OK test bl,20h jz short AM29F002T_Erase_Verify mov al,byte ptr es:[edi] xor bl,al test bl,40h jz short AM29F002T_Erase_OK AM29F002T_Erase_Fail: stc popa ret AM29F002T_Erase_OK: cmp al,0ffh jne short AM29F002T_Erase_Fail clc popa ret AM29F002T_Flash_Erase endp ;[]====================================================================[] ; AM29F002T_Flash_Write : ; ; Program AM29F002T PARAMETER BLOCK ; ;Saves : ;Input : Source = DS : SI ; Target = ES : DI (Range = FA000h-FBFFFh) ; Length = CX ; ;Output: CF = 0 Successful ; CF = 1 Error Program ; ;[]====================================================================[] AT49F001T_Flash_Write: AM29F002T_Flash_Write Proc Near pusha AM29F002T_Prg_Next_Byte: mov bx,25 ;Program Retry Count mov al,byte ptr ds:[esi] ;Read Data AM29F002T_Verify_Retry: ; Program Sequence push edi mov edi,0FFFF0000H mov byte ptr es:[edi + 05555h],0aah mov byte ptr es:[edi + 02AAAh],055h mov byte ptr es:[edi + 05555h],0A0h pop edi mov byte ptr es:[edi],al ;Write Data call AM29F002T_Check_Toggle_Ready jc short AM29F002NT_Toggle_error ;; Make Sure Program Correct mov al,byte ptr es:[edi] cmp al,byte ptr ds:[esi] je short AM29F002T_Verify_OK AM29F002NT_Toggle_error: dec bx jnz short AM29F002T_Verify_Retry stc ;Set Program Fail jmp short AM29F002T_Prog_Exit AM29F002T_Verify_OK: inc esi inc edi loop AM29F002T_Prg_Next_Byte clc AM29F002T_Prog_Exit: popa ret AM29F002T_Flash_Write Endp AM29F002T_Check_Toggle_Ready proc near clc push ax push bx AM29F002T_CTR_TOG1: mov al,byte ptr es:[edi] mov ah,byte ptr ds:[esi] ;Read Source Bit once and ax,8080h cmp al,ah je short AM29F002T_CTR_TOG3 AM29F002T_CTR_TOG2: mov bl,ah mov al,byte ptr es:[edi] and al,0a0h test al,20h jz short AM29F002T_CTR_TOG1 and al,80h cmp al,bl je short AM29F002T_CTR_TOG3 stc AM29F002T_CTR_TOG3: pop bx pop ax ret AM29F002T_Check_Toggle_Ready endp endif; Flash_IN_SMBASE