Contributor: GREG ESTABROOKS 
{
SE>I have Borland Pascal 7.0 and I ran acrost the idea of 286 and 8088 code
SE>specs in a program. How can you detect for a 286 CPU and if present,
SE>switch $G to $G+ ?
 There should be a program somewhere in your TP disks that has a routine
 that detects whether or not a 286+ CPU is pressent. Unfortunately you
 can't have it change the status of $G. It's either on or off. You can
 either leave it on , detect CPU type, if its the wrong type leave a
 mesage and abort the program or not use the $G directive at all.
 Here is a simple CPU detection routine in case you can't find the one I
 mentioned:
}
CONST
 CPU :ARRAY[0..3] Of STRING[13] =('8088/V20','80286',
 '80386/80486','80486');
FUNCTION CpuType :WORD; ASSEMBLER;
 { Returns a value depending on the type of CPU }
 { 0 = 8088/V20 or compatible }
 { 1 = 80286 2 = 80386/80486+ }
ASM
 Xor DX,DX { Clear DX }
 Push DX
 PopF { Clear Flags }
 PushF
 Pop AX { Load Cleared Flags }
 And AX,0ドルF000 { Check hi bits for F0h }
 Cmp AX,0ドルF000
 Je @Quit { Quit if 8088 }
 Inc DX
 Mov AX,0ドルF000 { Now Check For 80286 }
 Push AX
 PopF
 PushF
 Pop AX
 And AX,0ドルF000 { If The top 4 bits aren't set }
 Jz @Quit { Its a 80286+ }
 Inc DX { Else its a 80386 or better }
@Quit:
 Mov AX,DX { Return Result in AX }
END;{CpuType}
BEGIN
 Writeln('Your CPU is a ',CPU[CpuType]);
END.
 

AltStyle によって変換されたページ (->オリジナル) /