pcs/machtype.asm

76 lines
2.1 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

page 60,132
title MACHTYPE - MACHINE TYPE CHECKER
.286c ;; Utilize the expanded 80286 instruction set
;
; This routine determines the type of machine we are running on by using the
; System Services Bios call (INT 15h), Return System Configuration Parms
; function (AH = C0h). A return code which specifies the machine will be
; returned via the DOS Terminate function (INT 21h, Func 4ch) as follows:
;
; return type machine bios Date
; ----------- ------- ---------
;
; -1 Not a 286/386 machine ----
; 0 Unknown machine ----
; 1 IBM PC AT 1/10/84
; 2 IBM PC AT > 6/10/85
; 3 IBM PS2 ----
;
; The information is used to determine shutdown parameters when switching
; between protected and real mode by AI Architects OS286 operating environ-
; ment.
;
CODE segment byte public
assume CS:CODE
org 100h
begin:
jmp start
start:
push CS
pop DS ;; Set up data segment
mov DX,-1 ;; Default to error condition
;; See if this is a 286 machine
mov BX,SP ;; Set up BX with current stack pointer
pusha ;; 286 instruction, ignored on 808x
nop ;; Must be after pusha
cmp BX,SP ;; Were regs pushed?
je MEMRET ;; No...return with error
popa ;; Restore regs
;; Determine machine
mov dx,0 ;; Default to unknown
mov ah,0C0h ;; Return system config parameters
int 15h ;; System services call
jnc CHK286 ;; jump if carry not set
mov dx,1 ;; indicate older AT, bios dated 1/10/84
jmp MEMRET ;; return
CHK286:
cmp byte ptr ES:[BX+2],0FCh ;; AT or PS2 model 50 or 60?
jne CHK386 ;; no, jump
cmp byte ptr ES:[BX+3],04h ;; Regular AT or PC XT model 286?
jge GOTPS2 ;; no, see if PS2 Model 80
mov dx,2 ;; Indicate newer AT, bios dated > 6/10/85
jmp MEMRET ;; and return
GOTPS2: mov dx,3 ;; Indicate PS2 model 50 or 60
jmp MEMRET ;; and return
CHK386:
cmp byte ptr ES:[BX+2],0F8h ;; PS2 Model 80?
jne MEMRET ;; No, return
mov dx,3 ;; Indicate PS2 model 80
MEMRET:
mov AX,DX ;; Return return code
mov AH,4ch
int 21h
CODE ENDS
END begin