[comp.binaries.ibm.pc.d] Borland BGI question

dd26+@andrew.cmu.edu (Douglas F. DeJulio) (12/11/90)

I've gotten several programs that use BGI files and can choose between
different display types when they start up.  They're *supposed* to
auto-detect the correct display type and use it.  On my machine they
don't.  I've got an AT&T PC6300 which should use the ATT400 BGI
module.  Programs that autodetect invariably choose CGA.  Ugh.  I own
Turbo-C and I've checked the manuals, but I couldn't find a way to
force a particular display type at run time.  Can it be done with an
environment variable or something?  Any help would be appreciated.
-- 
Doug DeJulio
dd26@andrew.cmu.edu

dslg0849@uxa.cso.uiuc.edu (Daniel S. Lewart) (12/11/90)

dd26+@andrew.cmu.edu (Douglas F. DeJulio) writes:

> I've gotten several programs that use BGI files and can choose between
> different display types when they start up.  They're *supposed* to
> auto-detect the correct display type and use it.  On my machine they
> don't.  I've got an AT&T PC6300 which should use the ATT400 BGI
> module.  Programs that autodetect invariably choose CGA.  Ugh.  I own
> Turbo-C and I've checked the manuals, but I couldn't find a way to
> force a particular display type at run time.  Can it be done with an
> environment variable or something?  Any help would be appreciated.
> --
> Doug DeJulio
> dd26@andrew.cmu.edu

The following Turbo Pascal routine works for my AT&T PC6300.  It should be
trivial to translate it to Turbo C.
-------------------------------------------------------------------------------
Uses Graph;

procedure DetectGraph(var GraphDriver,GraphMode: Integer);
const
  ATTLogo = 'OLIVETTI';
  ATTLen  = Length(ATTLogo);
var
  RomId: array[1..ATTLen] of Char absolute $FC00:$0050;
begin
  if RomId <> ATTLogo then
    Graph.DetectGraph(GraphDriver,GraphMode)
  else
  begin
    GraphDriver := ATT400;
    GraphMode   := ATT400Hi;
  end;
end;
-------------------------------------------------------------------------------
Daniel Lewart
d-lewart@uiuc.edu

tcs@mailer.jhuapl.edu (12/11/90)

In article <cbMwB=C00VI8A0oYdi@andrew.cmu.edu>, dd26+@andrew.cmu.edu (Douglas F. DeJulio) says:
>
>I've gotten several programs that use BGI files and can choose between
>different display types when they start up.  They're *supposed* to
>auto-detect the correct display type and use it.  On my machine they
>don't.  I've got an AT&T PC6300 which should use the ATT400 BGI
>module.  Programs that autodetect invariably choose CGA.  Ugh.  I own
>Turbo-C and I've checked the manuals, but I couldn't find a way to
>force a particular display type at run time.  Can it be done with an
>environment variable or something?  Any help would be appreciated.
>-- 
>Doug DeJulio
>dd26@andrew.cmu.edu

If the programs are ones that you didn't write, then you probably can't
fix it. The programmer probably looked over the code and decided
that *he didn't want to try to implement the displaytype and if it is 
detected, default to CGA instead. In the programs that I write I try to 
default to a driver that I can write in. Of course, I always link in the
drivers and don't want to have an 80k program that prints

"Hello, world!"     :) :) :)

Carl Schelin
tcs@mailer.jhuapl.edu

dd26+@andrew.cmu.edu (Douglas F. DeJulio) (12/11/90)

dslg0849@uxa.cso.uiuc.edu (Daniel S. Lewart) writes:
> The following Turbo Pascal routine works for my AT&T PC6300.  It should be
> trivial to translate it to Turbo C.

Perhaps I was not clear in my original question.  My main problem is
with programs for which I do not have the source code.  Is there
anything to be done besides going in with a debugger, or
disassembling or the like?
-- 
Doug DeJulio
dd26@andrew.cmu.edu

mpledger@cti1.UUCP (Mark Pledger) (12/11/90)

A friend of mine who is a professional graphics programmer (and who owns
an AT&T 6300) explained the problem to me.  Apprently, AT&T does not use
the standard video mode registration with BIOS properly.  When someone 
uses the normal BIOS video calls, the AT&T returns an invalid video
configuration.  The only way out is to specifically check for AT&T type
machines when developing graphics programs for the PC.  In order to due
this you will have to contact AT&T's PC technical office (or something like
that) and find out the exact procedure for detecting the correct video
modes when using the AT&T 6300.

This is why there is an extra driver for Hecules-type video displays.  The
only difference is the fact that since Hercules is a "de facto" monochrome
standard, and its widely supported, all graphics programs automatically 
either check specifically for Hercules-type displays or include a special
Hercules graphics driver.



-- 
Sincerely,


Mark Pledger

--------------------------------------------------------------------------
CTI                              |              (703) 685-5434 [voice]
2121 Crystal Drive               |              (703) 685-7022 [fax]
Suite 103                        |              
Arlington, VA  22202             |              mpledger@cti.com
--------------------------------------------------------------------------

gwni@troi.cc.rochester.edu (G. Wayne Nichols) (12/12/90)

In <334@cti1.UUCP> mpledger@cti1.UUCP (Mark Pledger) writes:

>A friend of mine who is a professional graphics programmer (and who owns
>an AT&T 6300) explained the problem to me.  Apprently, AT&T does not use
>the standard video mode registration with BIOS properly.  When someone 
>uses the normal BIOS video calls, the AT&T returns an invalid video
>configuration.  The only way out is to specifically check for AT&T type
>machines when developing graphics programs for the PC.  In order to due
>this you will have to contact AT&T's PC technical office (or something like
>that) and find out the exact procedure for detecting the correct video
>modes when using the AT&T 6300.

If this is really the problem, shouldn't it be possible to write a TSR
to intercept the INT 10 BIOS calls and return the "right" data for the
6300's video configuration?  Maybe someone should take a shot at this ...

Perhaps even if the AT&T 6300 video controller were recognized, many
programs do not include support for 640x400 graphics?  If so, then you're
stuck, I'm afraid.  This is one advantage to using Windows ...