blog:pcdevtools

This is an old revision of the document!


DOS - Modern Development Tools

  • Homepage
  • Documentation
  • Sample makefiles
    • 286 / Real mode target
    • 386 / Protected mode target

OpenWatcom

  • Homepage
  • Downloads
  • Sample makefile

DJGPP / GCC

Allegro 4

How to build on modern compilers? Well, first of all don't use Open Watcom; I started off via this route and everything appears to work just fine, but later on I got to the point of needing to set up the Allegro timer/interrupt functions and I started getting unexplained program termination at the point (or just after) the Allegro timers were initialised. I eventually relented and rebuilt Allegro using djgpp and switch to that, with the exact same lines of code the application stopped exiting at the point the Allegro timer was initialised.

I can only guess that Watcom/Open Watcom was not fully tested at the point the last release of Allegro for DOS was released in 2009. My experience tells me that it is not a fully working combination. Stick with DJGPP.

The outline process is simple:

  1. Download 4.2.3.1 source
  2. Unpack
  3. Configure for DJGPP cross-compilation (run 'fix.sh djgpp')

But as always, the devil is in the details. If you want to use a modern version of GCC/DJGPP (and you *really* do), you have to make a few changes. First you have to edit xmake.sh to pick up your DJGPP install. In my case it was setting the two variables XC_PATH and XPREFIX to the following:

xmake.sh

XC_PATH=/opt/toolchains/x86/djgpp/bin
XPREFIX=i586-pc-msdosdjgpp-

Next edit makefile.dj to set a compatibility option for the modern GCC compiler (the '-fgnu89-inline' directive). If you don't, things look like they work until you try to link against Allegro and your code will fail to compile due to duplicate symbol errors (there are a lot of inline defines in the Allegro headers, which are deprecated on C99 syntax):

makefile.dj

TARGET_OPTS = -fgnu89-inline -O2 -funroll-loops -ffast-math

Finally, there is a bug in one of the graphics drivers that comes with the 4.2.3.1 release, and it results in two missing symbols when compiled with GCC. You need to edit src/misc/vbeaf.c and add them. Just before the following lines:

src/misc/vbeaf.c

* the video driver structure */
GFX_DRIVER gfx_vbeaf =
{

Change it to show the following:

src/misc/vbeaf.c

int int_ds;
int saved_ds;

/* the video driver structure */
GFX_DRIVER gfx_vbeaf =
{

Now you are ready to compile Allegro from source:

./xmake.sh lib
cp -a include /to/where/you/want/the/allegro/headers
cp lib/djgpp/lib*.a /to/where/you/want/the/allegro/libs

You can optionally build the demo application as well:

./xmake.sh demo

However, the examples don't get built via the cross compile process, so they need to be built manually:

cd allegro-4.2.3.1
cd examples
for src in *.c; do
  i586-pc-msdosdjgpp-gcc -I/to/where/you/want/the/allegro/headers -g -O2 -o ${src%.c} $src /to/where/you/want/the/allegro/libs/liballeg.a -lm
done

There are some more hoops to jump through in order to build documentation, but if you want to skip all of this and just use a pre-compiled library, with the headers, examples, demo and documentation all built and configured, just grab the archive I uploaded, above: allegro-4.2.3.1.djgpp.bin.tar.bz2

Judas Sound Library

  • Homepage
  • Documentation
  • Downloads
    • OpenWatcom
    • GCC

Short description.

  • blog/pcdevtools.1671814728.txt.gz
  • Last modified: 2022/12/23 16:58
  • by john