summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halws3/i386/w3detect.asm
diff options
context:
space:
mode:
Diffstat (limited to 'private/ntos/nthals/halws3/i386/w3detect.asm')
-rw-r--r--private/ntos/nthals/halws3/i386/w3detect.asm106
1 files changed, 106 insertions, 0 deletions
diff --git a/private/ntos/nthals/halws3/i386/w3detect.asm b/private/ntos/nthals/halws3/i386/w3detect.asm
new file mode 100644
index 000000000..0a77c4b3b
--- /dev/null
+++ b/private/ntos/nthals/halws3/i386/w3detect.asm
@@ -0,0 +1,106 @@
+;++
+;
+; Copyright (c) 1991 Microsoft Corporation
+; Copyright (c) 1993,1994 Sequent Computer Systems, Inc.
+;
+; Module Name:
+;
+; w3detect.asm
+;
+; Abstract:
+;
+; This module detects a Sequent WinServer 3000. It is included
+; by w3ipi.asm and the setup program. It must assemble more or less
+; standalone and run in protected mode.
+;
+; Author:
+;
+; Phil Hochstetler (phil@sequent.com) 3-30-93
+;
+; Revision History:
+;
+;--
+
+include callconv.inc
+
+_DATA SEGMENT DWORD PUBLIC 'DATA'
+
+; W3SystemType: SystemType is read from 0c80-0c83.
+;
+; 0c80-0c81: Compressed "TRI" (5 bit encoding).
+; 0c82: System Board Type.
+; 0c83: System Board Revision Level.
+
+
+W3SystemTypeTable db 052h, 049h, 08h, 00h
+W3SystemType db 5 dup(0)
+
+_DATA ends
+
+ page ,132
+_TEXT SEGMENT DWORD PUBLIC 'CODE'
+ ASSUME DS:FLAT, ES:FLAT, SS:NOTHING, FS:NOTHING, GS:NOTHING
+
+;++
+; ULONG
+; DetectWS3000(
+; OUT PBOOLEAN IsConfiguredMp
+; );
+;
+; Routine Description:
+; Determines the type of system (specifically for eisa machine), by reading
+; the system board system ID. It compares the 4 bytes of the ID, to
+; a predefined table <W3SystemTypeTable> and returns the index to the
+; found entry.
+;
+; Arguments:
+; IsConfiguredMp - If detected, then this value is
+; set to TRUE if it's an MP system, else FALSE.
+;
+; Return Value:
+;
+; A value of 1 is returned if a WS3000 machine is detected.
+; Otherwise a value of 0 is returned.
+;--
+cPublicProc _DetectWS3000 ,1
+cPublicFpo 1, 3
+
+ push edi
+ push esi
+ push ebx ; Save C Runtime
+
+ ; A 4 byte value is read from 0c80-0c83, and saved in <W3SystemType>.
+ ; This value is compared to the first 3 bytes of the value in
+ ; <W3SystemTypeTable>.
+
+ cld ; set direction to forward
+ lea edi, W3SystemType
+ mov edx, 0c80h
+ insb ; 52h
+ inc edx
+ insb ; 49h
+ inc edx
+ insb ; 08h - System Board Type
+ inc edx
+ insb ; 00h - Revision Level
+
+ xor eax, eax ; default to return failure
+ lea edi, W3SystemTypeTable ; Type Table
+ mov ecx, 3 ; bytes to compare against
+ lea esi, W3SystemType ; match string against table entry
+ repe cmpsb ; if (ecx == 0 and ZF set)
+ jnz @f ; we have a winner
+ inc al
+ mov ebx, dword ptr [esp+16]
+ mov byte ptr [ebx], 1 ; *IsConfiguredMp = TRUE
+
+@@:
+ pop ebx
+ pop esi
+ pop edi ; Restore C Runtime
+
+ stdRET _DetectWS3000
+
+stdENDP _DetectWS3000
+
+_TEXT ENDS