[Back to HARDWARE SWAG index] [Back to Main SWAG index] [Original]

    {
    >>> 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;
    }

[Back to HARDWARE SWAG index] [Back to Main SWAG index] [Original]