Kod: ; ; Procedure wait1ms ; This procedure will wait for 1 msec. ; ; Inputs: None ; ; Destroys: None ; ; Outputs: None ; ; Assumes: Stack is not available ; ; wait1ms PROC NEAR mov cx, MSEC ; Set wait time waitForRefreshDetect: in al, PORTB_REFRESH ; Get refresh toggle state and al, REFRESH_MASK ; Isolate refresh toggle cmp al, ah ; Refresh detected? je waitForRefreshDetect ; Loop if refresh not detected mov ah, al ; Save current refresh toggle state loop waitForRefreshDetect ; Repeat until timer expires ret wait1ms ENDP ; ; Procedure cleanupHostErrors ; This procedure will check a SMBUS host controller for ; an incomplete transaction. If one exists, it is killed. ; Then all SMBUS host errors are cleared. ; ; Inputs: None ; ; Destros: None ; ; Outputs: None ; ; Assumes: Stack is not available ; ; cleanupHostErrors PROC NEAR mov dx, SMBUS_PORT + SMB_HST_STS in al, dx test al, 01h ; Test for host busy set jz @f ; Jump if host busy NOT set mov dx, SMBUS_PORT + SMB_HST_CNT mov al, 02h out dx, al ; Kill current SMBUS command @@: mov dx, SMBUS_PORT + SMB_HST_STS mov al, 0ffh ; AL = Mask for SMBUS errors out dx, al ; Clear all errors ret cleanupHostErrors ENDP ; ; ; Procedure Name: AOL_Init ; ; This procedure will detect and initialize the Alert on LAN hardware. ; ; Input: none ; ; Output: AX = Watchdog Timer Value ; ; Name | Date | Description ; ; DNL | 09/16/99 | Initial version for AOL2 ; Public AOL_Init AOL_Init Proc Near mov ax, cs mov es, ax mov ds, ax xor al, al ROm_Call AOL_SaveConfigInfo Rom_Call Find_CapeLookout jc NotDetected Rom_Call AOL_GetConfigInfo test al,80h jnz short Global_Enable AOL2_Disable: ;R01 mov cx, SW_HEARTBEAT_STOP Rom_Call SendSoftware_Message Rom_Call Get_AOL_Add mov bh, ENABLE_CONFIGURATION_REG Rom_Call SmbByteDataRead and al, not 80h Rom_Call SmbByteDataWrite jmp NotDetected Global_Enable: ; Verify that the Cape Lookout Watchdog Timer did not ; expire after the PCI reset. Rom_Call Get_AOL_Add mov bh, MISC_STATUS_REG Rom_Call SmbByteDataRead test al,10h jz short OSHungNotExist ; Jump if OSHung bit is NOT set AOL_Reset: mov cx, SW_HEARTBEAT_STOP Rom_Call SendSoftware_Message Rom_Call Get_AOL_Add mov bh, ENABLE_CONFIGURATION_REG Rom_Call SmbByteDataRead and al, not 80h Rom_Call SmbByteDataWrite mov bh, WATCHDOG_TIMER_REG mov al, 01Eh Rom_Call SmbByteDataWrite Rom_Call Get_AOL_Add mov bh, WATCHDOG_TIMER_REG mov al, 01Eh Rom_Call SmbByteDataWrite ;R01B mov dx,0CF9h ;R01B mov al,6 ;R01B out dx, al ;R01B ;R01B jmp $ jmp short Set_AOL_Disable ;R01B OSHungNotExist: ; Verify the EEPROM was successfully read and that the ; checksum is valid. ;R01 - start ifndef NO_AOL2_EEPROM_CHECK Rom_Call Get_AOL_Add mov bh, EEPROM_CONTROL_REG Rom_Call SmbByteDataRead test al,0C0h ;R01A jnz short AOL_Reset ; Jump if either bit is set ;R01B jnz short Set_AOL_Disable ;R01A jnz short AOL_Reset ;R01B endif ;NO_AOL2_EEPROM_CHECK ;R01 - end

Kod: ; ; ; Procedure Name: Update_WDMessage ; ; This procedure should be called periodically by the BIOS to ; update the watchdog status word. The watchdog status value ; will be sent if watchdog timer expires before the next ; update or reload of the timer. Although the OEM may wish to ; specify custom watchdog byte combinations, the Alert on ; LAN BIOS software reserves the many combinations . ; ; The low order byte of the Watchdog Message Word is used in ; the Cape Lookout Watchdog Information Byte 1. ; The high order byte of the Watchdog Message Word is used in ; the Cape Lookout Watchdog Information Byte 2. ; ; Input: CX = watchdog message word ; ; Output: None ; ; Name | Date | Description ; ; DNL | 09/16/99 | Initial version for AOL2 ; Public Update_WDMessage Update_WDMessage Proc Near shl esp,16 shl ecx,16 Rom_Call AOL_GetConfigInfo test al,80h jz short @F ; Convert the index from the Configuration Byte into ; a Cape Lookout SMBus address Rom_Call Get_AOL_Add mov bh, WATCHDOG_INFO_BYTE1_REG shr ecx,16 mov al, cl shl ecx,8 Rom_Call SmbByteDataWrite mov bh, WATCHDOG_INFO_BYTE2_REG shr ecx,16 mov al, cl Rom_Call SmbByteDataWrite mov bh, WATCHDOG_TIMER_REG mov al,01Eh Rom_Call SmbByteDataWrite mov bh, WATCHDOG_TIMER_REG mov al,01Fh Rom_Call SmbByteDataWrite mov bh, HEARTBEAT_TIMER_REG mov al,03h Rom_Call SmbByteDataWrite mov bh, SOFTWARE_STATUS_BYTE1_REG mov ax, SW_HEARTBEAT_START OR 01h Rom_Call SmbByteDataWrite mov bh, SOFTWARE_STATUS_BYTE2_REG mov al,(SW_HEARTBEAT_START OR 01h ) shr 8 Rom_Call SmbByteDataWrite mov bh, FORCED_ACTIONS_REG mov al,10h Rom_Call SmbByteDataWrite @@: shr esp,16 ret Update_WDMessage ENDP ; ; ; Procedure Name: SendSoftware_Message ; ; The procedure is used to force a network packet containing the ; software message word to be sent via the Alert on LAN device ; and the network controller. ; ; The low order byte of software message word is used in software ; status byte 1 (0x0E) and the high order byte of the software ; message word is used in software status byte 2 (0x0F). ; ; The procedure uses the Cape Lookout Force Software Event ; to force Cape Lookout to send a network packet. ; ; Input: CX = software message word ; ; Output: None ; ; Name | Date | Description ; ; DNL | 09/16/99 | Initial version for AOL2 ; Public SendSoftware_Message SendSoftware_Message Proc Near shl esp,16 shl ecx,16 Rom_Call Get_AOL_Add mov bh, SOFTWARE_STATUS_BYTE1_REG shr ecx,16 mov al, cl shl ecx,8 Rom_Call SmbByteDataWrite shr ecx,16 mov bh, SOFTWARE_STATUS_BYTE2_REG mov al, cl Rom_Call SmbByteDataWrite mov bh, FORCED_ACTIONS_REG mov al,10h Rom_Call SmbByteDataWrite shr esp,16 ret SendSoftware_Message ENDP ; ; ; Procedure Name: Read_AOL_EEPROM ; ; This routine will read a specified byte from the EEPROM. ; ; Input: CL = EEPROM register to read ; ; Output: AL = EEPROM byte register data ;

Kod: ; Name | Date | Description ; ; DNL | 09/16/99 | Initial version for AOL2 ; Public Read_AOL_EEPROM Read_AOL_EEPROM Proc Near shl esp,16 ; Read Control register - Verify that EEC_BUSY and EEC_LOAD ; bits are cleared shl ecx,16 Rom_Call Get_AOL_Add mov bh, EEPROM_CONTROL_REG Rom_Call SmbByteDataRead and al,90h mov al,0FFh jnz short @F ; Write Address register with desired EEPROM address shr ecx,16 mov bh, EEPROM_ADDR_REG mov al, cl Rom_Call SmbByteDataWrite ; Write Control register with Read command mov bh, EEPROM_CONTROL_REG mov al, READ_COMMAND Rom_Call SmbByteDataWrite ; Read Control register - Wait for EEC_BUSY to clear Rom_Call EEpromWaitForNotBusy ; Read Data register to get EEPROM data mov bh, EEPROM_DATA_REG Rom_Call SmbByteDataRead @@: shr esp,16 ret Read_AOL_EEPROM Endp ; ; ; Procedure Name: Write_AOL_EEPROM ; ; This routine will write a specified byte to the EEPROM. ; ; Input: CL = EEPROM register to write ; AL = EEPROM byte register data ; ; Output: None ; ; Name | Date | Description ; ; DNL | 09/16/99 | Initial version for AOL2 ; Public Write_AOL_EEPROM Write_AOL_EEPROM Proc Near shl esp,16 ; Read Control register - Verify that EEC_BUSY and EEC_LOAD ; bits are cleared mov ch, al shl ecx,16 Rom_Call Get_AOL_Add mov bh, EEPROM_CONTROL_REG Rom_Call SmbByteDataRead and al,90h jnz @F ; Write Address register with Write Enable Address mov bh, EEPROM_ADDR_REG mov al, WRITE_ENABLE_ADDRESS Rom_Call SmbByteDataWrite ; Write Control register with Write Enable Command mov bh, EEPROM_CONTROL_REG mov al, WRITE_ENABLE_COMMAND Rom_Call SmbByteDataWrite ; Read Control register - Wait for EEC_BUSY to clear mov eax, ecx Rom_Call EEpromWaitForNotBusy ; Write Adress register with desired EEPROM address mov ecx, eax mov bh, EEPROM_ADDR_REG shr eax,16 Rom_Call SmbByteDataWrite ; Write Data register wih desired write data mov bh, EEPROM_DATA_REG shr ecx,24 mov al, cl Rom_Call SmbByteDataWrite ; Write Control register with the Write command mov bh, EEPROM_CONTROL_REG mov al, WRITE_COMMAND Rom_Call SmbByteDataWrite ; Read Control register - Wait for EEC_BUSY to clear Rom_Call EEpromWaitForNotBusy ; Write Address register with Write Disable Address mov bh, EEPROM_ADDR_REG mov al, WRITE_DISABLE_ADDRESS Rom_Call SmbByteDataWrite ; Write Control register with Write Disable Command mov bh, EEPROM_CONTROL_REG mov al, WRITE_DISABLE_COMMAND Rom_Call SmbByteDataWrite ; Read Control register - Wait for EEC_BUSY to clear Rom_Call EEpromWaitForNotBusy shr esp,16 ret Write_AOL_EEPROM Endp

Kod: ; Read the System ID word contained within the EEPROM ; byte offset 0xF8. ; (The low order byte of the System ID word is at byte offset ; 0F8h and the high order byte of the System ID word is at byte ; offset 0F9h. ;R01 mov cl,0F8h mov cl,0F9h ;R01 Rom_Call Read_AOL_EEPROM movzx di, al and di,07fh ;R01 shl di,8 ;R01 mov cl,0F9h mov cl,0F8h ;R01 Rom_Call Read_AOL_EEPROM xor ah, ah or di, ax ;R01 and di,07fh cmp di, REGISTERED_SYSTEM_ID je short MatchingSystemID UpdateSystemID: ; Since the BIOS and Platform ID are invalid, then ; CL_InitX will write the corrected System ID with ; the Global Disable Set using the low-level stack-less ; routine EEpromByteWriteX . ;R01 - start ifndef NO_AOL2_EEPROM_CHECK mov cl,0F8h mov ax, REGISTERED_SYSTEM_ID Rom_Call Write_AOL_EEPROM mov ax, REGISTERED_SYSTEM_ID OR 8000h mov al, ah mov cl,0F9h Rom_Call Write_AOL_EEPROM jmp NotDetected endif ;NO_AOL2_EEPROM_CHECK ;R01 - end MatchingSystemID: ; Verify the Global Disable is not set ;R01 - start ifndef NO_AOL2_EEPROM_CHECK mov cl,0F9h Rom_Call Read_AOL_EEPROM test al,80h jz short AOL2_Enable Set_AOL_Disable: ;R01A Rom_Call AOL_GetConfigInfo and al, Not 80h ;Global Disable Rom_Call AOL_SaveConfigInfo jmp AOL2_Disable AOL2_Enable: endif ;NO_AOL2_EEPROM_CHECK ;R01 - end ; Set the ACPI state as PREBOOT Rom_Call Get_AOL_Add mov bh, APM_CONFIGURATION_REG Rom_Call SmbByteDataRead or al,00000111b ;Preboot Rom_Call SmbByteDataWrite ; ; Set implementation specific registers here ; ; REVISION_ID_REG is read only ; EVENT_STATUS_REG should not be changes since it contains ; valuable status info that may not have been reported ; MISC_STATUS_REG should not be changes since it contains ; valuable status info that may not have been reported ; EVENT_POLARITY_REG is loaded from the EEPROM ; This register can be programmed here ; EVENT_MASK_REG is loaded from the EEPROM ; This register can be programmed here ; APM_CONFIGURATION_REG bits 3:0 are loaded from the EEPROM ; This register can be programmed here ; WATCHDOG_INFO_BYTE1_REG is used by the Alert on LAN BIOS ; WATCHDOG_INFO_BYTE2_REG is used by the Alert on LAN BIOS ; WATCHDOG_TIMER_REG is used by the Alert on LAN BIOS ; HEARTBEAT_TIMER_REG is used by the Alert on LAN BIOS ; RETRANSMISSION_TIMER_REG is used by the Alert on LAN BIOS mov bh, RETRANSMISSION_TIMER_REG mov al,02h Rom_Call SmbByteDataWrite ; RETRANSMISSION_PACKET_COUNT_REG is used by the Alert on LAN BIOS mov bh, RETRANSMISSION_PACKET_COUNT_REG mov al,01h Rom_Call SmbByteDataWrite ; CONTROL_REG is loaded from EEPROM ; This register can be programmed here ; ENABLE_CONFIGURATION_REG bits 6:0 are loaded from the EEPROM ; Bit 7 is used by the Alert on LAN BIOS ; This register can be programmed here ; SOFTWARE_STATUS_BYTE1_REG is used by the Alert on LAN BIOS ; SOFTWARE_STATUS_BYTE2_REG is used by the Alert on LAN BIOS ; EEPROM_ADDR_REG is used by the Alert on LAN BIOS ; EEPROM_DATA_REG is used by the Alert on LAN BIOS ; EEPROM_CONTROL_REG is used by the Alert on LAN BIOS ; FORCED_ACTIONS_REG bit 4 is used by the Alert on LAN BIOS ; Bits 7:5 and 3:0 are not used or not loaded by the EEPROM ; SEQUENCE_NUM_REG is automatically reset to zero by reset and ; is used by the Alert on LAN BIOS. ; TEST_MODE_REG is not used by the Alert on LAN BIOS. ; POLLING_DATA1 is not used by the Alert on LAN BIOS. ; POLLING_DATA2 is not used by the Alert on LAN BIOS. ; POLLING_DATA3 is not used by the Alert on LAN BIOS. ; POLLING_DATA4 is not used by the Alert on LAN BIOS. ; RAM_PAGE_MODE_REG BIT 0 is forced to zero to disable Ram ; Page Mode in CL_InitX and then is not used by the ; Alert on LAN BIOS.

Bios yazan en iyi "firma" phoenix'tir genelde tüm bilgisayarlarda onlardan vardır. Birde bunların update yapma işlemleri vardır. Peki hiç update kodu gördünüz mü buyrun. artık BİOS update kodlarını burada yayınlamak istiyorum HP BIOS UPDATE KODU Kod: ; ; ; NOTICE: THIS PROGRAM BELONGS TO AWARD SOFTWARE INTERNATIONAL ; 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. ; ; ; ; PAGE 60,132 ; TITLE POST -- 386 ROM/BIOS POST ; ;Rev Date Name Description ; ;R01B 02/15/00 DNL BIOS needs to turn off watchdog timer at same time ;R01A 02/10/2K DNL Fixed system always reset when invalid checksum detected ; for configuration space of EEPROM. ;R01 02/01/2K DNL Fixed some mistakes to let AOL2 function work correctly ;R00 09/16/99 DNL Initial version for Alert on LAN 2 SMB_HST_STS EQU 0 ; Host Status SMB_SLV_STS EQU 1 ; Slave status SMB_HST_CNT EQU 2 ; Host control SMB_HST_CMD EQU 3 ; Host command SMB_HST_ADD EQU 4 ; Host address SMB_HST_DAT0 EQU 5 ; Host Data 0 SMB_HST_DAT1 EQU 6 ; Host Data 1 SMB_BLK_DAT EQU 7 ; Block data PORTB_REFRESH EQU 61h REFRESH_MASK EQU 10h MSEC EQU 43h ; Number of 15 microsecond intervals in 1ms include AOL. EQU ifdef AOL_SUPPORT extrn AOL_Init_Exit:near ; ; Procedure SmbByteDataRead ; This routine performs a SMBUS byte data read command ; to a specified SMBUS device address and command byte. ; The alerpack uses the command byte as a register number. ; ; Input: BH = device register ; BL = SMBUS address ; ; Destroys: Nothing ; ; Output: AL = data byte read ; AH and Zero Flag = SMBUS status ; AH = 0 Success ; AH!=0 Failure ; ; Assumes: Stack is not available ; ; SmbByteDataRead PROC NEAR mov ebp, esp ; Check for errors and kill incomplete commands Rom_call cleanupHostErrors ; Set host command register mov dx, SMBUS_PORT + SMB_HST_CMD mov al, bh out dx, al ; Set command register ; Set SMBUS device address with read attribute mov dx, SMBUS_PORT + SMB_HST_ADD mov al, bl or al, 1 ; Force read operation out dx, al ; Set address + read attribute ; Clear data port of previous data mov dx, SMBUS_PORT + SMB_HST_DAT0 xor al, al out dx, al ; Set protocol as byte data read and start transaction mov dx, SMBUS_PORT + SMB_HST_CNT mov al, 48h out dx, al ; Wait for transaction to start and complete Rom_call waitForHostBusy Rom_call waitForHostNotBusy ; SMBUS status returned in AH and ZF ; Get data byte requested mov dx, SMBUS_PORT + SMB_HST_DAT0 in al, dx ; Get byte read mov esp, ebp ret SmbByteDataRead ENDP ; ; Procedure SmbByteDataWrite ; This routine performs a SMBUS byte data write command ; to a specified SMBUS device address, device register, and ; data byte value. ; ; Input: BH = device register ; BL = SMBUS address ; AL = write value ; ; Destroys: None ; ; Output: AH and Zero Flag = SMBUS status ; AH = 0 Success ; AH!=0 Failure ; ; Assumes: Stack is not available ; ; SmbByteDataWrite PROC NEAR mov ebp, esp mov ah, al ; Save byte value to be written ; Check for errors & kill incomplete commands Rom_Call cleanupHostErrors ; Set host command register mov dx, SMBUS_PORT + SMB_HST_CMD mov al, bh out dx, al ; Set command register ; Set SMBUS device address with write attribute mov dx, SMBUS_PORT + SMB_HST_ADD mov al, bl and al, NOT 1 ; Force write operation out dx, al ; Set address + write attribute ; Set data to write mov dx, SMBUS_PORT + SMB_HST_DAT0 mov al, ah out dx, al ; Set protocol as byte data read/write and start mov dx, SMBUS_PORT + SMB_HST_CNT mov al, 48h out dx, al ; Wait for transaction to start and complete Rom_Call waitForHostBusy Rom_Call waitForHostNotBusy ; SMBUS status returned in AH and ZF mov esp, ebp ret SmbByteDataWrite ENDP -

Kod: ; ; ; Procedure Name: EEpromWaitForNotBusy ; ; This procedure will wait a set maximum time for the EEPROM ; busy bit to clear indicating the last command has successfully ; completed. ; ; This procedure is not designed to be called externally. ; It is used for code support and is intended for use by ; higher level stack-less EEprom routines within this file. ; Input: None ; ; Output: None ; ; Name | Date | Description ; ; DNL | 09/16/99 | Initial version for AOL2 ; EEpromWaitForNotBusy PROC Near mov dr1, esp ; Read Control register - Wait for EEC_BUSY to clear mov cx,100h @@: shl ecx,16 mov bh, EEPROM_CONTROL_REG Rom_Call SmbByteDataRead shr ecx,16 test al,10h loopnz short @B mov esp, dr1 ret EEpromWaitForNotBusy ENDP ; ; ; Procedure Name: AOL_SaveConfigInfo ; ; This routine is called by the Alert on LAN BIOS to store one byte of ; configuration information. ; ; Bit 7 Global Enable State ; 1 = Enabled ; 0 = Disabled ; Bit 6 ICH Detected ; 1 = ICH detected ; 0 = ICH not detected ; Bit 5:4 Unused ; Bit 3-0 Encoded address for the Alert on LAN device ; 0000 = No AOL device ; 0001 = 0x1100010b (C4h) ; 0010 = 0x1100011b (C6h) ; 0011 = 0x1100110b ; 0100 = 0x1100111b ; ; Input: AL = Configuration Information Byte ; ; Output: None ; ; Name | Date | Description ; ; DNL | 09/16/99 | Initial version for AOL2 ; Public AOL_SaveConfigInfo AOL_SaveConfigInfo Proc Near xchg al, ah mov al, AOL_CMOS OR 80h out 70h, al NEWIODELAY xchg al, ah out 71h, al NEWIODELAY ret AOL_SaveConfigInfo Endp ; ; ; Procedure Name: AOL_GetConfigInfo ; ; This routine is called by the Alert on LAN BIOS to get one byte of ; configuration information. ; ; Bit 7 Global Enable State ; 1 = Enabled ; 0 = Disabled ; Bit 6 ICH Detected ; 1 = ICH detected ; 0 = ICH not detected ; Bit 5:4 Unused ; Bit 3-0 Encoded address for the Alert on LAN device ; 0000 = No AOL device ; 0001 = 0x1100010b (C4h) ; 0010 = 0x1100011b (C6h) ; 0011 = 0x1100110b ; 0100 = 0x1100111b ; ; Input: None ; ; Output: AL = Configuration Information Byte ; ; Name | Date | Description ; ; DNL | 09/16/99 | Initial version for AOL2 ; Public AOL_GetConfigInfo AOL_GetConfigInfo Proc Near mov al, AOL_CMOS OR 80h out 70h, al NEWIODELAY in al,71h ret AOL_GetConfigInfo Endp endif ;AOL_SUPPORT

Kod: mov bh, ENABLE_CONFIGURATION_REG Rom_Call SmbByteDataRead or al,80h Rom_Call SmbByteDataWrite mov cx, SW_SYSTEM_AWAKE Rom_Call SendSoftware_Message ; Convert the index from the Configuration Byte into ; a Cape Lookout SMBus address mov cx, WD_FAIL_START_POST Rom_Call Update_WDMessage NotDetected: jmp AOL_Init_Exit AOL_Init Endp ; ; ; Procedure Name: Find_CapeLookout ; ; This routine checks the range of possible Cape Lookout ; addresses to find and clearly identify one Cape Lookout ; device. ; ; The method for identifying Alert on LAN hardware is by ; attempting to read the revision ID that is contained in ; register 0x00 for all possible Cape Lookout SMBus ; addresses. Since the Alert on LAN SMBus address range only ; includes four possibilities, the detection code will loop ; through all available addresses. For every SMBus device that ; responds to this byte read, compare bits 7:3 with the ; Cape Lookout revision ID of 11011b. A match on the revision ; ID will indicate a Cape Lookout device is available. ; ; The Cape Lookout device has a special mode called Ram Page Mode ; that can prevent the reading of the revision ID in register 0. ; To correct for this issue, the detection code will also read ; the RAM Page Mode Register that also contains the revision ID. ; ; Input: none ; ; Output: al = Configuration Information Byte ; CF = 1 AOL device is not exist ; CF = 0 AOL device is exist ; ; Name | Date | Description ; ; DNL | 09/16/99 | Initial version for AOL2 ; Find_CapeLookout Proc Near shl esp,16 lea si, AOL_SMB_add Check_AOL_Device: lodsb cmp al,0FFh je short AOL_device_End mov bl, al mov bh, REVISION_ID_REG Rom_Call SmbByteDataRead and al, REVISION_MASK cmp al, REVISION_ID je short AOL_device_Found mov bh, RAM_PAGE_MODE_REG Rom_Call SmbByteDataRead and al, REVISION_MASK cmp al, REVISION_ID je short AOL_device_Found lodsb jmp short Check_AOL_Device AOL_device_Found: lodsb and al,0Fh ifdef ICH or al,0C0h else ;ICH or al,080h endif ;ICH Rom_Call AOL_SaveConfigInfo shr esp,16 clc ret AOL_device_End: shr esp,16 stc ret Find_CapeLookout Endp AOL_SMB_add: db 0C4h,01h db 0C6h,02h db 0CCh,03h db 0CEh,04h db -1 Get_AOL_Add: mov ebp, esp shl eax,16 Rom_Call AOL_GetConfigInfo and al,0Fh mov bl,0C4h cmp al,01h je short @F mov bl,0C6h cmp al,02h je short @F mov bl,0CCh cmp al,03h je short @F mov bl,0CEh cmp al,04h je short @F mov bl,00h @@: shr eax,16 mov esp, ebp ret

Kod: ; ; Procedure waitForHostNotBusy ; This routine waits for the host busy bit to be cleared for ; a specific period of time. If the host busy bit does not ; in the maximum time frame, the current transaction is ; killed. The error status is then retrieved from the host ; controller. ; ; Input: None ; ; Destroys: AL ; ; Output: AH and Zero Flag = SMBUS status ; AH = 0 Success ; AH!=0 Failure ; ; Assumes: Stack is not available ; ; waitForHostNotBusy PROC NEAR mov cx, 500 MSEC ; Set maximum wait mov dx, SMBUS_PORT + SMB_HST_STS jmp @f ; Start loop with no time delay waitFor: in al, PORTB_REFRESH ; Get refresh toggle state and al, REFRESH_MASK ; Isolate refresh toggle cmp al, ah ; Refresh detected? je short waitFor ; Loop if refresh not detected mov ah, al ; Save current refresh toggle state @@: in al, dx test al, 01h ; Check for host busy loopnz waitFor ; Repeat until timer expires ; or until host NOT busy ; Either ; the maximum time expired (CX=0) ; and the host busy bit is still set (ZF=1) ; or ; the maximum time has not expired (CX!=0) ; and the host busy bit is clear (ZF=0) ; ; If the host busy is still set, the SMBUS transaction must ; be terminated via the KILL bit. jz @f ; Jump if host busy bit is clear ; The transaction has not completed in a ; timely fashion and must be killed mov dx, SMBUS_PORT + SMB_HST_CNT mov al, 02h out dx, al ; Force Host Control register's ; kill bit to be set @@: ; SMBUS host status must saved and ; cleared from host controller mov dx, SMBUS_PORT + SMB_HST_STS in al, dx and al, 1dh xchg ah, al or ah, ah ; Check for errors ; ZF=Success NZ=Error ret waitForHostNotBusy ENDP ; ; Procedure waitForHostBusy ; This procedure will wait for the host busy bit to be set ; to verify that the SMBUS transaction actually starts within ; a maximum time frame. ; ; Inputs: None ; ; Destroys: None ; ; Outputs: None ; ; Assumes: Stack is not available ; ; waitForHostBusy PROC NEAR mov cx, 500 MSEC ; Set maximum wait time mov dx, SMBUS_PORT + SMB_HST_STS jmp @f ; Start loop with no time delay waitForRefresh: in al, PORTB_REFRESH ; Get refresh toggle state and al, REFRESH_MASK ; Isolate refresh toggle cmp al, ah ; Refresh detected? je waitForRefresh ; Loop if refresh not detected mov ah, al ; Save current refresh toggle state @@: in al, dx test al, 01h ; Check for host busy loopz waitForRefresh ; Repeat until timer expires ; or until host busy ret waitForHostBusy ENDP