17.05.2015 Views

TI486 Microprocessor - Al Kossow's Bitsavers

TI486 Microprocessor - Al Kossow's Bitsavers

TI486 Microprocessor - Al Kossow's Bitsavers

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Detection of SMM Capable Version<br />

A.10 Detection of SMM Capable Version<br />

At powerup/reset the EDX register will contain part type and stepping<br />

information.<br />

EDX Stepping SMM Available<br />

0410h A No<br />

0411h B Yes<br />

The following technique can be used to identify the stepping of a <strong>TI486</strong> CPU<br />

after the reset information in EDX is lost. The method uses two functions: the<br />

mixed C and assembler function isb() and assembly language illegal opcode<br />

handler interrupt handler ilLop. The function isb() will return a 1 to indicate<br />

when a B step part is present, 0 otherwise. The function isbO installs an illegal<br />

opcode handler, ilLop. Then isbO sets up conditions to execute an SMM<br />

segment save instruction, SVDC. If an A step part is present the illegal opcode<br />

handler will be invoked. The ilLop process will then modify the return address<br />

on the stack to return to the instruction after the SVDC instruction. The storage<br />

location used by the SVDC instruction is then checked to see if it changed. If<br />

it has changed the part being tested is a B step part. This detection technique<br />

must be run at protection ring O.<br />

1/***************************************************************************<br />

1/********************************* isb.c ***********************************<br />

1/***************************************************************************<br />

#define TRUE 1<br />

#defube FALSE 0<br />

int old_offi<br />

int old_segi<br />

extern ill_op()i<br />

1/***************************************************************************<br />

1/<br />

Function: isb ()<br />

1/<br />

Returns: 1 if <strong>TI486</strong> B step<br />

1/<br />

o if <strong>TI486</strong> A step<br />

1/***************************************************************************<br />

isb ()<br />

{<br />

int if b_stepi<br />

char mem [ 10] i<br />

for (i=Oi i

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!