GFA-Basic FAQ v1.31
by Lonny Pursell

This page will attempt to answer some of the most commonly asked questions about GFA-Basic.

What is the most current version of GFA-Basic?
Version 3.6 TT E was last one ever released. The 'E' simply meant 'English'. There is also a German version marked with a 'D'. The 'TT' means it supports the TT030 video hardware, but it will run fine on other Atari machines.

Platform Editor Compiler Linker Image
Atari 400/800 1.4 (Frost BASIC) - - [E]
Atari XL/XE 1.5 (TURBO-BASIC XL) 1.1 - [E][E][C][C][R]
Atari ST/TT 3.6 3.6 3.6 [E]
amiga 3.52 3.52 3.52 [E]
ms-dos 4.55 1.07 - [E][C]
windows16 4.38 1.07W - [E][C]
windows32 2.30 Build 1160 - Jul 25 2001 - - [E]
os/2 vaporware - - -
SCO Open Desktop (unix) vaporware (GFA-Basix) - - -

Note: The non-Atari ST versions are listed for informational purposes only. This site only supports the Atari ST version of GFA-Basic. For peecee support please visit Good luck! ;o)

Can I access the STiK/STinG socket layers?
Yes. Also works with GlueSTiK. Download my STiK source code. For a working example download my Doodle source code.

Can I access the MiNT-Net socket layer?
Yes and no. Technically it's possible, but since all the socket stuff is in gcc library format, you can't call it. Someone would have to port the MiNT socket library to a compatible library format. As of MiNT v1.16 the socket library has been incorporated into the MiNT kernel as standard GEMDOS() calls. The only limitation is the function gethostbyname() (the resolver) is still part of the MiNT-lib. Solution for now, use the resolver in GlueSTiK. Download my MiNT-Net source code. Also see my HighWire Devkit.

Can I access the PCI bus on my Atari clone?
Yes. Download my PCI source code.

Can I access Shared Libraries?
Yes. Download my SLB source code.

Can I create a Shared Library?
No. A shared library itself cannot be created since the GFA-Compiler is not flexible enough to build the binary as required.

Can I access an LDG libraries?
Yes. Download my LDG source code.

Can I create an LDG library?
No. An LDG library itself cannot be created since the GFA-Compiler is not flexible enough to build the binary as required.

Can I use the FPU chip in the computer?
Yes and No. Most people don't know it, but GFA-Basic can use the FPU in a limited fashion. It's related to the function TT?. By default GFA-Basic does not use the FPU at all. However, one call to TT? will activate the FPU support. Once activated, the following functions will be redirected to the FPU: SIN(), COS(), TAN(), EXP(), LOG(), and LOG10. Note however, that the function TT? uses self-modifying code. Please use an updated editor and/or library.

Why does the TEXT command limit me to 118 characters?
This limit comes from the fact that GFA-Basic's internal VDI INTIN() array is fixed at 128 elements. You can get around this problem with assembler or download my VDI fix source code. If you are using standard ST screen modes you may never notice this problem.

Is it possible to get the address of PROCEDUREs and FUNCTIONs?
Yes, but not easily. It requires some assembler tricks. Even if you have such addresses, you can't make external calls directly into a GFA-Basic application. This has something to do with the way parameters and LOCALs are internally handled. Attempting to do so anyway usually ends with a 'LOCAL error' (#90) message.

Can I load and/or call an overlay?
Yes. Download my PUG source code.

What library format does GFA-Basic use?
GFA-Basic uses the standard DRI format. The same as PureC for example. Devpac can also create DRI object files.

Can the GFA-Basic Linker link additional object files?
It sure can. The only limit is how many you can cram into a single command line. They must be standard DRI object files. Devpac and PureC can be used to create DRI object files. In fact you can have parallel code such that when compiled, the object file is used, but when interpreted it uses the code below the $X command. See option $X in the compiler manual for further information. Quick example:

FUNCTION add(a%,b%)
  $X AddLng !the name of the routine to be called from the object module (must be the 1st line of the function)
  ' when compiled the rest of this routine is replaced by the code in the object module
  ' however when interpreted the $X commmand is ignored, and code here is executed instead
  LOCAL r%
Note: There is a serious bug related to compiler option $X and the above example will only work properly with my revised compiler.

Can I write a desk accessory?

Can I write a CPX module?
No. CPX modules use callbacks which won't work in GFA-Basic. Also the binary must be constructed in a certain way and the GFA-Compiler is not flexible enough to build such binaries.

Can I write an auto folder program and/or a TSR?
Yes. However you are limited to what you can do from the auto folder.

Can I write TOS and TTP style applications?

Function wind_new() is not built in to the language, can I still call it?
Yes. GFA-Basic provides access to all the OS layers: BIOS(), XBIOS(), GEMDOS(), AES, and VDI. All that is required is the proper documentation in order to write a binding for any system call. You can also write a binding to replace a GFA command that ends up making a system call.

Should I use hardcoded lower case file names?
It depends. For starters that is the default for ext2fs which is available for MiNT. There is also minix which understands lower case file names. All versions of TOS can handle file names and paths in lower case. Never assume your application won't migrate to a machine running MiNT.

Can I code memory protection clean applications for MiNT?
Yes. It's simply a matter of following the recommended guidelines when allocating memory blocks. If you know for a fact that another application is going to access your memory block directly, then you need to make sure that memory block is allocated correctly. If you don't, then MiNT will terminate the offending application. The AV Protocol is a good example.

Can I create an XDD or XIF driver for MiNT?
No. The GFA-Basic Compiler is not flexible enough to build the required binary.

Can MiNT help me with advanced debugging?
Yes. If you happen to have a bug that you just cannot seem to find, there are advanced ways to track them down. Firstly MiNT tries to help by reporting what sort of crash occured and where. Also GFA-Basic has some options to aid in advanced debugging. See section Debugging with GFA-Basic and MiNT of my GFA-Basic Compendium HYPertext for an explaination of this debugging method.

Did Frank Ostrowski ever write any other Atari programs?
Yes. Before Frank Ostrowski wrote GFA-Basic he created Turbo-BASIC XL for the Atari 8-bit machines. It was published in Happy Computer Magazine and became quite popular. He also had a game called TwoMaze (Pacman clone) published in the same magazine.

Did Frank Ostrowski write any software after GFA-Basic for the Atari ST?
Yes. Frank ported GFA-Basic to the amiga. Frank is credited in the manual for the ms dos port of GFA-Basic. Frank is also credited in the manual for the windows 16-bit port of GFA-Basic. I am not sure at this time who created the windows 32-bit port. GFA-Basic for OS/2 and GFA-Basix for Unix were announced, but neither of these came to be.

How different are the various versions of GFA-Basic?
Atari XE: Based on Atari BASIC. Token compatible. This is where it all started.
Atari ST: Some of the commands are similar to those found in Turbo-BASIC XL.
amiga: A direct port of the Atari ST version, bugs and all, plus some new bugs. Recoded just enough of it to make it work, in fact the file formats are nearly identical.
dos: File format completely different.
windows 16-bit: More or less the same file format as the ms dos version with some extra sections added.
windows 32-bit: File format changed again, plain ASCII.

Did GFA-Basic have any competition?
Yes. See table below, it's a breakdown of all known BASICs for the Atari ST.

Commercial releases
Name Version Released Interpreted Compiled Developer
BBC Environment Emulator [8] 1.01AR 1985 Yes No Tris 'Mad' Mabbs, BTMsoft
Philon Fast/BASIC-M 1.35? 1986? Yes Yes Philon Inc.
Henry's Fundamental BASIC [2] ? 1986? Yes No Philon Inc.
SoftWorks BASIC ? 1986? No Yes [4] SoftWorks Limited
MemBASIC 2.06C 1986 Yes No MemSoft
Fast Basic [3] 1.05c 1986 Yes No Computer Concepts (Xara Group Ltd)
ST BASIC (aka Personal BASIC) 2nd 1987 Yes No Atari Corporation (Metacomco plc.)
DBASIC [6] 1st 1987 Yes No DTACK Grounded Inc.
True BASIC 2.0 1987 Yes Yes [4] True BASIC Inc.
LDW BASIC Compiler 2.01 1987 No Yes Logical Design Works, Inc.
Power BASIC Compiler [1] 1.21 1988 No Yes HiSoft
STOS - The Game Creator [5] 2.6 1988 Yes Yes Mandarin Software (Clickteam)
Real BASIC 1.3? 1988? Yes No Computer Crossware Labs, Inc. (On2)
FirST BASIC [1] 1.0? 1988? No Yes HiSoft
HiSoft BASIC [F] 2.10 1992 No Yes HiSoft
HiSoft BASIC Professional [F] ? 1989? No Yes HiSoft
GFA-Basic [F] 1.0 1986 Yes No GFA Software Technologies GmbH
GFA-Basic [F] 2.0, 2.01, 2.02 1986 Yes Yes GFA Software Technologies GmbH
GFA-Basic [F] 3.0, 3.02, 3.03, 3.04, 3.05, 3.07 ? Yes Yes GFA Software Technologies GmbH
GFA-Basic [F] 3.5, 3.51 ? Yes Yes GFA Software Technologies GmbH
GFA-Basic 3.6 1991 Yes Yes GFA Software Technologies GmbH
Omikron Basic [F] 3.0, 4.0, 5.20 1998 Yes Yes Berkhan-Software
Basic 1000d [5] 1.20 2000 Yes No Jean-Jacques Labarthe
Advan BASIC [7] ? ? No Yes Advan Language Designs

Non-commercial releases
Name Version Released Interpreted Compiled Link
Bywater BASIC [5] 2.25 1997 Yes No Download
CPX-BASIC [5] 1.11 ? Yes No Download
Tiny BASIC 2.0 ? Yes No Download
X11-Basic [5] 1.23 2014 Yes Yes Download

[1] Cut down version of HiSoft BASIC
[2] Cut down version of Fast/BASIC-M
[3] Also available on a ROM cartridge
[4] B/P-Code compiler
[5] Open source
[6] Booted into its own self-contained enviroment
[7] Never released and/or finished (port of the 8-bit version)
[8] Public Domain
[F] Not compatible with the Firebee Atari clone (issues with move.b (sp))

Note: The accuracy of this information is questionable (?) as it was obtained mostly from the web. If you see an error or wish to submit missing information, please contact me.

What's available for game coding?
1) Hand coded assembler is always an option.
2) SpriteWorks
3) M.A.G.E. (Majic Arcade Graphics Engine)
4) GFA Vector

Suggestions by the following also went into this FAQ:
Janez Valant
Peter Backes