modula-2 home

  Win32 API  


ADW Modula-2

ADW Modula-2, © ADW Software is the successor of Stony Brook Modula-2, and is released as freeware.

  • ADW Modula-2 is for Windows only
  • ADW Modula-2 allows development of both 32- and 64-bits programs on the Windows platform.
  • No support is given, neither by ADW Software, nor by
  • Use the feedback form for your comments.

To download the most recent version of the package, go to the download page.


January 2022

Compiler 1.6.879. Contains some error recovery. Also contains a new procedure ExStorage.EnableLFH. This procedure enables low fragment heap algorithms for the main process heap. What it is you may see in Microsoft docs.

The motivation of this change is the following. By unknown reason Microsoft some time ago changed default for user's heap allocation/deallocation algorithm from LFH to so-called standard, as it was before Windows Vista. For applications linked by Visual Studio as releases RTL library sets algorithm to LFH. Using standard allocation/deallocation algorithm leads to very slow operations, esepecially deallocation.

To use LFH it is sufficient to insert call of ExStorage.EnableLFH in the beginning of the application body. To enable LFH for other heaps it is necessary to insert call of WIN32.HeapSetInformation procedure with the appropriateparameters. If an ADW Modula-2 linked application is run under the debugger, then the standard allocation/deallocation algorithm will be used. But, when environment variable _NO_DEBUG_HEAP = 1, then LFH will be used under debugger too.

August 2019

Fixes the following problems:

  • Wrong swapping registers optimization.
  • Debugger does not show global variables of local modules.
  • Debugger shows wrong variable content when variables with the same name are present in different local modules.
  • Wrong usage of RAX across CASE statement
  • 64-bit compiler generates code that can be executed only in addresses not more than MAX(CARDINAL32).

June 2017

The following problems have been fixed:

  • Wrong optimization of code in certain situation with method calls
  • FORWARD in procedures
  • Paths to subprojects
  • Unqualified import in local module
  • Showing wrong location on warnings about unused imported modules.
  • In code for 64-bit compiler it is impossible to assign XMM register for a procedure parameter.
  • Import in local module
  • Compiler exception in 64-bit compiler when compiling a particular code.
  • 64-bit debugger does not show content of XMM registers.
  • 64-bit debugger steps statements with floating point calculations wrongly.
  • Wrong execution of MOVSD instruction in 64-bit debugger
  • ABSTRACT CLASS redefinition
  • Errors reported when pressing "Link all programs" menu item
  • Wrong optimization of subsequent SHL and SHR instructions
  • After installing a new version of the compiler, a 64-bit project can be rebuilt wrongly.

September 2016

The following problems have been fixed:

  • Wrong compilation of cdecl and msCdecl attribute for 64-bit code
  • Internal error when comparing real type function results for 64-bit code.
  • Some refined modules are compiled with error in 64-bit version.
  • Internal error when a built-in function is applied to a function with LONGREAL result for 64-bit code
  • 64-bit debugger wrongly shows MULSD instruction
  • Internal error when adding two expressions of LONGREAL type containing functions calls for 64-bit code.
  • Internal error reported by 64-bit compiler when too big sum of sets.
  • Compilation and showing in Debugger PUSH and POP instructions (64-bit compiler)
  • Wrong prolog/epilog code for embedded procedure with copied value parameter (64-bit compiler).
  • 32-bit compiler generates MOVZX EAX, DH instruction when real source is in low byte of SI register
  • Debugger does not show REP prefixes
  • Wrong managing hidden offset in 64-bit compiler
  • 64-bit compiler wrongly calculates offset to a local variable when both ASM and EXCEPT are present.
  • Exception processing is wrong in 64-bit applications
  • 64-bit debugger crashes if to open the call trace window before the task prolog has been passed.
  • Exception processing in wrong in 64-bit application when something is saved in the stack.
  • Overflow often is not noticed
  • Wrong check on real overflow in 64-bit compiler.
  • 32-bit compiler may do not notice real overflow
  • Generated 64-bit code does not clear exception signalling bits
  • Wrong compilation of ABS function into 64-bit code.
  • Wrong stepwise execution of SSE instructions in 64-bit debugger
  • Operations with sets are executed wrongly in 64-bit code.
  • Wrong stack alignment in 64-bit applications
  • Temporary saving registers to stack in 64-bit code is incorrect
  • Exceptions are processed wrongly in 64-bit code when message is empty.
  • 64-bit compiler generates wrong code concerning R11 usage.
  • Some predefined procedures use ASCII instead of Unicode.
  • Exception propagation does not work in 64-bit applications.
  • Wrong transfer of a short record value argument to a procedure in 64-bit code.
  • Incorrect execution of DIV and MOD when the first operand is of type INTEGER64 and second one a constant
  • 64-bit compiler generates wrong code concerning structured result of inline function
  • 64-bit constants are shown wrongly in the debugger
  • Exceptions raised in embedded subroutines are not caught in the embedding one in 64-bit code
  • In 64-bit compiler Pass directive with omitted arguments is ignored
  • Normal/exceptional execution state is implemented wrongly in 64-bit compiler.
  • 64-bit compiler generates wrong code in certian Modula-2 code sample
  • 64-bit compiler generates wrong code when index is of type INTEGER16
  • Wrong code optimization when compiler option "Make debuggable" is off.
  • Usage of a register whose value is undefined (64-bit compiler).
  • 64-bit compiler assigns RCX to a variable despite RCX is spoiled by COPYOPENPARAM call.
  • 64-bit debugger does not show the last column of the ASCII part of a memory window.
  • Wrong register assignment in 64-bit code.
  • Run button does not work in 64-bit projects

August 12, 2014

  • When you have previously used Stony Brook Modula-2 or ADW Modula-2, it is advised to install and try this new version in a test environment first.
  • Before you install this version on a production machine, it is advised to remove any older version first.
  • Because of copyright issues, the source code of the implementation modules (MOD files) of the runtime libraries (RTL) has been removed from the package. As a consequence, the RTL libraries also have been protected against modification.
  • Tip: if you have been working with modified RTL modules it is advised to save the modified modules.
  • The installer will install 2 versions of the compiler and RTL: a UNICODE and ASCII version. The UNICODE version treats CHAR as UCHAR as default for new projects, and all libraries haven been compiled with CHAR as Unicode character. Old projects may not work as expected when compiled with the UNICODE version; but the effort of reworking your projects for UNICODE is rewarding for your software users, especially in Asian countries.

August 2, 2013

  • Corrected ResEdit
  • Added Unicode support to library
  • Correction in debugger when using Generic modules
  • Correction of usage of arrays in Generic modules
  • WinShell.mod: multiple corrections
  • 64-bit code generation when using DIV and MOD on 8-bit values

April 15, 2013

  • WholeStr.IntToStr() corrected.
  • Corrected looping of compiler for non-existing imported projects
  • Corrected invalid module management and invalid processor type in output script
  • Corrected Unicode constants parsing. Changed SYM-files format.
  • Several changes/improvements in WinShell.mod related to making/using forms
  • Corrected bug (compiler hangs) when some error condition encountered during parsing of imports
  • Corrected error (compiler hangs) when Compile button was double-clicked accidentally
  • Increased maximum names limit from 64k to 128k names.

Important: SYM-files of existing projects should be deleted and DEF sources must be recompiled.

May 11, 2012

  • Bug fix for compiling and loading 64-bit DLL's.

Mar 13, 2012

  • Fixed a bug with some REAL functions on x64.

Jan 16, 2012

  • Processing of SetFocus/FillFocus was corrected for controls. Some icons corrected.
  • m2e, resedit corrected. m2e icons modified.
  • New visual styles. Toolbar icon processing corrected for 24-bit icons.

Dec 8, 2011

  • First public release