Example 111. initialization sequence for 80c187 m – Intel 80C188XL User Manual

Page 300

Advertising
background image

11-15

MATH COPROCESSING

Example 11-1. Initialization Sequence for 80C187 Math Coprocessor

$mod186
name

example_80C187_init

;
;FUNCTION:

This function initializes the 80C187 numerics coprocessor.

;
;SYNTAX:

extern unsigned char far 187_init(void);

;
;INPUTS:

None

;
;OUTPUTS:

unsigned char - 0000h -> False -> coprocessor not initialized

;

ffffh -> True -> coprocessor initialized

;
;NOTE:

Parameters are passed on the stack as required by

;

high-level languages.

;
lib_80186

segment public ’code’
assume cs:lib_80186

public _187_init

_187_initproc far

push

bp

;save caller’s bp

mov

bp, sp

;get current top of stack

cli

;disable maskable interrupts

fninit

;init 80C187 processor

fnstcw [bp-2]

;get current control word

sti

;enable interrupts

mov

ax, [bp-2]

and

ax, 0300h

;mask off unwanted control bits

cmp

ax, 0300h

;PC bits = 11

je

Ok

;yes: processor ok

xor

ax, ax

;return false (80C187 not ok)

pop

bp

;restore caller’s bp

ret

Ok:

and

[bp-2], 0fffeh

;unmask possible exceptions

fldcw

[bp-2]

mov

ax,0ffffh

;return true (80C187 ok)

pop

bp

;restore caller’s bp

ret

_187_initendp

lib_80186ends

end

Advertising
This manual is related to the following products: