windows-nt/Source/XPSP1/NT/base/boot/startrom/i386/eisaa.asm
2020-09-26 16:20:57 +08:00

217 lines
4.6 KiB
NASM

title "EISA bus Support Assembley Code"
;++
;
; Copyright (c) 1989 Microsoft Corporation
;
; Module Name:
;
; eisaa.asm
;
; Abstract:
;
; This module implements the assembley code necessary to get configuration
; information on EISA machines.
;
; Author:
;
; Shie-Lin Tzong (shielint) 7-June-1991
;
; Environment:
;
; Real Mode 16-bit code.
;
; Revision History:
;
;
;--
.386p
.xlist
include eisa.inc
.list
_DATA SEGMENT PARA USE16 PUBLIC 'DATA'
public _FunctionInformation
_FunctionInformation db 0
db EISA_INFORMATION_BLOCK_LENGTH dup (0)
_DATA ends
_TEXT SEGMENT PARA USE16 PUBLIC 'CODE'
ASSUME CS: _TEXT
;++
;
; VOID
; BtGetEisaSlotInformation (
; PBTEISA_SLOT_INFORMATION SlotInformation,
; UCHAR Slot
; )
;
; Routine Description:
;
; This function retrieves the slot information for the specified slot.
;
; Arguments:
;
; SlotInformation - Supplies a pointer to the structure which will
; receive the slot information.
;
; Slot - Specifies the slot to retrieve the information.
;
; Return Value:
;
; None.
;
;--
BgesSlotInformation equ [bp + 4]
BgesSlot equ [bp + 6]
public _BtGetEisaSlotInformation
_BtGetEisaSlotInformation proc
push bp ; The following INT 15H destroies
mov bp, sp ; ALL the general registers.
push si
push di
push bx
mov cl, BgesSlot
mov ax, GET_EISA_SLOT_INFORMATION
int 15h
push bx ; Save revision level
mov bx, BgesSlotInformation
;
; fill values into eisa slot info structure.
;
mov [bx].SlotReturn, ah
mov [bx].SlotFlags, al
pop ax ; [ax] = revision level
mov [bx].SlotMajorRevision, ah
mov [bx].SlotMinorRevision, al
mov [bx].SlotChecksum, cx
mov [bx].SlotNumberFunctions, dh
mov [bx].SlotFunctionInformation, dl
mov word ptr [bx].SlotCompressedId, di
mov word ptr [bx+2].SlotCompressedId, si
pop bx
pop di
pop si
pop bp
ret
_BtGetEisaSlotInformation endp
;++
;
; UCHAR
; BtGetEisaFunctionInformation (
; PBTEISA_FUNCTION_INFORMATION FunctionInformation,
; UCHAR Slot,
; UCHAR Function
; )
;
; Routine Description:
;
; This function retrieves function information for the specified slot
; and function.
;
; Arguments:
;
; FunctionInformation - Supplies a pointer to the structure which will
; receive the slot information.
;
; Slot - Specifies the slot to retrieve the information.
;
; Function - Supplies the function number of the desired slot.
;
; Return Value:
;
; Return code of the EISA function call.
;
;--
BgefFunctionInformation equ [bp + 4]
BgefSlot equ [bp + 6]
BgefFunction equ [bp + 8]
public _BtGetEisaFunctionInformation
_BtGetEisaFunctionInformation proc
push bp
mov bp, sp
push si
mov ax, GET_EISA_FUNCTION_INFORMATION
mov cl, BgefSlot ; [cl] = slot, [ch]=function
mov ch, BgefFunction
mov si, BgefFunctionInformation
; (ds:si)->Function information
int 15h
mov al, ah ; move the return code to AL
pop si
pop bp
ret
_BtGetEisaFunctionInformation endp
;++
;
; BOOLEAN
; BtIsEisaSystem (
; VOID
; )
;
; Routine Description:
;
; This function determines if the target machines is EISA based machines.
;
; Arguments:
;
; None.
;
; Return Value:
;
; TRUE - if this is EISA machine. Otherwise, a value of FALSE is returned.
;--
public _BtIsEisaSystem
_BtIsEisaSystem proc
push es
push bx
;
; Check for an EISA system. If "EISA" is at F000:FFD9h then it
; is an EISA system.
;
mov ax,0f000h ; segment
mov es,ax
mov bx,0ffd9h ; offset in the ROM
mov eax, "ASIE"
cmp eax, es:[bx]
jne short bies00 ; if ne, Not EISA system, go bies00
mov ax, 1 ; set return value to TRUE
jmp short bies10
bies00:
mov ax, 0
bies10:
pop bx
pop es
ret
_BtIsEisaSystem endp
_TEXT ends
end