217 lines
4.6 KiB
NASM
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
|