Contributor: JORT BLOEM
{
>>> Well, I have it now: the program was compiled in G+ mode (enable
>>> 286-instructions) and it therefore bombed on an 8088 or 8086
>>> machine. Too bad it didn't do so graciously with a proper error.
I've thrown together this little unit here - if your program or unit uses
$G+, just add this as the FIRST! unit in the USES clause. It is called
_286.PAS:
}
(*
  Programs compiled with {$G} compiler directive enabled do not
  check the processor at runtime to determine whether it is
  286-compatible. Trying to execute 80286 instructions on an 8086
  or an 8088 will lock up the computer. This program checks
  for the presence of a 286-compatible chip at runtime.
  Put this unit as the FIRST in the USES clause.
*)
Unit _286;
Interface
Implementation
function Is286Able : Boolean; assembler;
asm
  PUSHF
  POP     BX
  AND     BX,0FFFH
  PUSH    BX
  POPF
  PUSHF
  POP     BX
  AND     BX,0F000H
  CMP     BX,0F000H
  MOV     AX,0
  JZ      @@1
  MOV     AX,1
 @@1:
end;
begin
  if not Is286Able then
  begin
    Writeln('Need an 80286-compatible system to run this program');
    Halt(1);
   end;
end.
{--------------------- CUT HERE ------------------}
{
 This can be put in individual units, just make sure it is the FIRST
 unit in the USES clause, eg
  Uses
    _286,
    Crt,
    Dos,
    KeyTTT5;
}