Download HLA! WEBster
Home Page
The following table provides downloadable versions of all the most recent versions of HLA. In general, you should always download the latest version unless you have a compatibility problem requiring an older version of the system.

Note: Click on the version number (or related component under the version number) to download a particular version. All downloads are in zip format.

Starting with HLA v1.32, HLA supports Windows and Linux. Windows downloads are in ZIP format (winzip) whereas Linux downloads are in tar/gzip (.tar.gz) format.

Many thanks to Shawn Bullock for providing the HLA Installer. This is a complete package (all-in-one download) that contains everything you need to install and run HLA. Though a big download (>15 MB), beginners will appreciate Shawn's installer that automatically puts everything in the right spot and sets up important environment variables. Thanks again, Shawn! (Sorry, Windows only; any volunteers to create a Linux installation package?) Starting with HLA v1.35 there are two versions, one with extra documentation(including AoA/16-bits) and one that provides just the documentation necessary for that particular version of HLA (e.g., no AoA/16-bit documentation, PDF only, etc.).

NEW!

HLA Installation Documentation

If you're a first-time HLA user, you need to read the following documentation while installing HLA. It provides a complete step-by-step process for manually installing HLA and it covers all the common pitfalls that trouble beginning HLA programmers. Please read this as it will cover 95% of the problems you're going to have with respect to getting HLA up and running.

Read the PDF version of the Installation Guide (best for printing)

Read the HTML version of the Installation Guide (best for on-line viewing)

Version Date Description
Notice: HLA v1.x is rapidly approaching a feature freeze so that work on HLA v2.0 may proceed. Requests for new features should be sent to rhyde@cs.ucr.edu prior to version 1.40.
Version 1.41

Windows Files:

Executables

Library Source

Compiler Source

Example Code

AoA Examples

Documentation (PDF)

Documentation (html)

Download MASM32

Linux Files:

Executables

Library Source

Compiler Source

AoA Examples

Documentation (PDF)

Documentation (html)

12/8/2002 HLA v1.41 was a quick maintenance release to correct some severe defects in HLA v1.40. Problems corrected include fixing problems with offsets in anonymous records and unions, modifying the HLA standard library so that it no longer uses the "@use EAX;" option (which creates problems if you pass a parameter to such a routine in the EAX register). and corrected the _uns64Size routine that did not work properly for 19-digit numbers.
Version 1.40

Windows Files:

Executables

Library Source

Compiler Source

Example Code

AoA Examples

Documentation (PDF)

Documentation (html)

Download MASM32

Linux Files:

Executables

Library Source

Compiler Source

AoA Examples

Documentation (PDF)

Documentation (html)

11/28/2002 HLA v1.40 is another maintenance release with most of the changes being internal rather than affecting the language. Probably the biggest improvement is the use of a hash table lookup function when searching through namespaces rather than a linear search. This nearly doubles the speed of the compiler when processing large HHF files (e.g., the full Windows API header files). This process was continued from HLA v1.39. Here are some other enhancements and corrections in this version:

* Corrected a problem with the WHILE statement when using the hybrid syntax (was generating bad code).

* Added the ability to use the '&' operator on class procedures, methods, and iterators.

* Corrected yet another problem with bad code generation in parameter lists when using CDECL or STDCALL parameter passing mechanisms.

* Fixed the str.eq and str.ne functions in the standard library.

* Improved support for UNICODE.

* Added "WELSE" section to HLA's WHILE loop.

* Corrected some problems with file handling in the Linux version of the HLA standard library.

Version 1.39

Windows Files:

Executables

Library Source

Compiler Source

Example Code

AoA Examples

Documentation (PDF)

Documentation (html)

Download MASM32

Linux Files:

Executables

Library Source

Compiler Source

AoA Examples

Documentation (PDF)

Documentation (html)

The changes in HLA v1.39 are mostly clean-up and bug fixes. HLA v1.39 does have a few new features including better support for Unicode and the addition of the VAL operator to pass the value of a pointer as a reference parameter. The HLA Standard Library has been extended to include limited support for zero-terminated strings (useful when making OS API calls).

The symbol table routines in the HLA compiler have been re-written to improve performance. HLA now uses a hash function when looking up symbols in a namespace. This dramatically speeds up compilation when processing large namespaces (e.g., Linux and Windows API declarations). Many of the symbol table routines (e.g., string comparison) have been rewritten in assembly language to improve performance even when not searching through large namespaces; however, since symbol tables tend to be small (outside of namespaces), you'll probably not notice those improvements.

Unicode support still isn't complete. But you can declare Unicode string and character constants and use them in simple constant expressions. Note, however, that the compile-time string functions do not yet support Unicode, nor is there much in the way of Unicode support in the HLA Standard Library. Additional Unicode support will appear in HLA v1.40.

The HLA examples module contains a few additional programs that demonstrate bit counting and numeric->string conversion.

Note that the compiler source code uses HLA v1.35 to compile the assembly code present in the HLA compiler. There have been some trivial changes to the AoA examples code (to handle some syntax changes), but the code is mostly unchanged.

The library sources have undergone radical changes. Previously, there were two sets of library routines: one for Linux and one for Windows. In HLA v1.39 the two sets of routines were merged into a single source tree to facilitate maintenance of the library code. Also, many of the include files were modified to take advantage of the HLA @uses procedure option in order to generate better code when calling library and OS API routines.

Version 1.38

Shawn Bullock's HLA Installer:

Lite Version

Extended Version

Windows Files:

Executables

Library Source

Compiler Source

Example Code

AoA Examples

Documentation (PDF)

Documentation (html)

Download MASM32

Linux Files:

Executables

Library Source

Compiler Source

AoA Examples

Documentation (PDF)

Documentation (html)

HLA v1.38 incorporates several new features that have been planned for a while, but were never completed. This release also corrects many of the defects that found their way into HLA v1.37 as a result of adding 64 and 128-bit support.

Changes in v1.38:

Eliminated the copyright message printed by the HLA.EXE program (HLA is public domain). Under Windows, merged the READONLY and CONST sections with the .text section to reduce EXE file size (this was already true for Linux). Corrected a defect dealing with passing large parameters by value (incorrect parameter size computation). Corrected lots of problems dealing with declaring labels in the label section. Also implemented external labels properly. Corrected a problem with inherited fields in a record. A few instructions with memory/const operands weren't checking the size properly. Corrected this. Added the @basereg pseudo-variable to let the user choose the base register to use for local variables (EBP or ESP). Corrected a minor defect in the "var:=expr;" statement. Fixed a minor problem with record alignment value (record[max:min] wasn't swapping min and max if max<min). In VAR section, a declaration of the form "p:pointer to procedure abc;" was not properly calculating p's offset. Completely reworked the variable alignment options in the VAR section. Corrected a defect in 64 & 128 bit constant division. Corrected a defect when dealing with constant arrays that overwrote certain memory locations. Put in checks for overflow when processing decimal, hexadecimal, and binary literal constants. Corrected a defect that caused HLA to use the wrong size when pushing certain dword parameters. HLA was computing the size of certain array elements incorrectly, corrected this. HLA was not properly maintaining line number information during the processing of a #while loop, corrected this. Revamped the way #while loops operate. Modified HLA to allow the use of any QWord or LWord value where a 64-bit or 128-bit value is expected. Corrected a defect in code emission for LWord (128-bit) objects. Relaxed type checking on reference parameters to allow a hexadecimal (byte, word, dword, qword, lword) parameter to be passed where the formal type is the same size. Corrected a defect where HLA was using the wrong size information to pass a four-byte object as a reference parameter. Corrected a problem with type checking int64 and uns64 values. Added the #for..#endfor loop to the compile-time language (three forms!). Implemented union constants.

Version 1.37

Shawn Bullock's HLA Installer:

Windows Files:

Executables

Library Source

Compiler Source

Example Code

AoA Examples

Documentation (PDF)

Documentation (html)

Download MASM32

Linux Files:

Executables

Library Source

Compiler Source

AoA Examples

Documentation (PDF)

Documentation (html)

This version represents a massive change to the internal structure of the HLA compiler. The amount of changes between v1.35 and v1.37 is probably greater than the changes that took place at v1.25 and v1.32. Therefore, the casual HLA user is warned that this version may not be quite a stable as previous versions. Those who are wary of software that has undergone major change may want to stick with HLA v1.35 (Linux) or HLA v1.36 (Windows).

Despite the fact that there are probably between 20,000 and 30,000 lines of code that changed between HLA v1.35 and HLA v1.37, this version also has one of the lowest numbers of user-visible changes between versions. This is because most of the changes to the compiler were due to the inclusion of a single feature -- the introduction of 128-bit arithmetic support in HLA constant expressions. Prior to this release, HLA limited all compile-time arithmetic expressions to 32 bits. This restriction was extended to 128 bits as of HLA v1.37; since Flex/Bison/C (HLA implementation languages) do not support 128 bit arithmetic, a fair amount of the HLA expression evaluator had to be rewritten in assembly language (HLA). This, in turn, uncovered some defects in the HLA floating point support, so an interim version (HLA v1.36) was created to allow work to continue on the HLA compile; this is why HLA v1.36 and HLA v1.37 appeared here at the same time (HLA v1.36 is offered for those who find defects in HLA v1.37 and need to fall back to a version that supports floating point expressions properly).

In addition to internal 128-bit arithmetic, HLA v1.37 offers several new data types including uns64, uns128, int64, int128, and lword. HLA v1.37 has extended the qword data type -- HLA now allows constant expressions involving qword values. Note that HLA still provides a variable declaration for tbyte, but does not support tbyte arithmetic expressions. If you need 80-bit integer arithmetic, use lword values (128 bits).

Added the type transfer functions @byte, @word, @dword, @lword, @qword, @uns8, @uns16, @uns32, @uns64, @uns128, @int8, @int16, @int32, @int64, @int128, @real32, @real64, @real80, @char, and @string.

Added wchar and wstring data types, although HLA's constant expressions and run-time libraries don't yet support these types (still, you may declare UNICODE variables with these types).

Fixed a problem with floating point code instructions (HLA was not emitting the proper code for certain zero-operand floating point instructions).

Corrected a problem with the CMOVcc instruction (it didn't allow four-byte memory operands).

Corrected a problem with the offsets of parameters in procedures declared with the @cdecl procedure option (offsets were computed incorrectly if a parameter was not an even multiple of four bytes long).

Modified the str.trim, str.a_trim, str.delspace, and str.a_delspace library routines to trim tabs as well as spaces from a string.

Eliminated a defect in the Linux library code that caused HLA to (errantly) link in 16KBytes of zeros with each program.

HLA Version Archive A table containing descriptions of changes made to older HLA versions. (note that the code for the archives is no longer available on-line).

Number of Web Site Hits since Jan 1, 2000: