Short: AmigaBasic Compiler Enhanced (ACE) Author: Manfred Bergmann Uploader: manfred bergmann me com Type: dev/basic Version: 2.7.0 Replaces: ace-basic Requires: OS2.0+ Architecture: m68k-amigaos >= 2.0 Distribution: Aminet URL: https://github.com/mdbergmann/ACEBasic CHANGELOG ========= v2.7 (2026-02-01) ----------------- New Features: - Closures and Function Pointers (#14): Support for first-class function references. Use @ operator to get a SUB address (@SubName), BIND to create closures with pre-bound arguments (BIND(@SubName, arg1, ...)), and INVOKE to call through a function pointer or closure (INVOKE ptr&(args)). BIND behaves a little bit like the Curry pattern in functional programming. See docs/ref.guide for more details. - Callback SUB (#28): New CALLBACK modifier for SUBs that can be invoked via the AmigaOS CallHookPtr() function. Syntax: SUB name(ADDRESS, ADDRESS, ADDRESS) CALLBACK Use @ to get the address for a Hook's h_Entry field (@MyCallback). - MUI Submodule (#23): MUI (Magic User Interface) support via the MUI.b submodule. Provides high-level BASIC wrappers for creating modern Amiga GUIs with windows, buttons, lists, menus, tabs, and more. Documentation: docs/MUI-Submod.guide. Includes 7 example programs, including a FileViewer example that uses a custom class. Note: This is a beta release - usable but more features will come. Report bugs or feature requests on GitHub. - Filled Circle/Ellipse (#15): CIRCLE command now supports trailing F flag for drawing filled circles and ellipses. Syntax: CIRCLE [STEP] (x,y),radius[,color[,start,end[,aspect[,F]]]] Fill uses AreaEllipse() and respects active PATTERN. - GADGET SETATTR Expressions (#20): GADGET SETATTR now accepts variables and expressions for tag values, not just constants. Enables dynamic gadget updates based on runtime values. - Graphics Double Buffering: New include file and example for double-buffered graphics programming. See examples/gfx/dbuf_demo.b. Changes: - 68020 Code Generation Default (#24): The compiler now generates 68020 native instructions by default. Use OPTION 2- in source to disable 68020 code generation for 68000 compatibility. - Module Command Uses vasm: The module compilation command now uses vasm assembler instead of the legacy assembler. - Enhanced bas script. It now accepts a list of submods for linking. And is overall a bit smarter. Bug Fixes: - Fix Library Closing (#25): Fixed issue with LIBRARY CLOSE not properly closing opened Amiga shared libraries. - Fix EXTERNAL Module Bugs (#29): Fixed bugs with uninitialized A4 register when using EXTERNAL modules, which caused crashes and incorrect behavior with shared variables and arrays. - Fixed Typos (#18, #26): Corrected various typos in source and documentation. Testing: - New test categories: closures, callback - Added SUB tests with SHARED variable access ------------------------------------------------------------------------------ v2.6 (2026-01-26) ----------------- New Features: - GadTools Gadget Integration: Full support for GadTools-based gadgets with modern Amiga look and feel. New syntax: GADGET id, status, label$, (x1,y1)-(x2,y2), kind [, TAG=value ...] - Gadget Kinds: Support for BUTTON, CHECKBOX, INTEGER, STRING, LISTVIEW, MX (mutual exclude), CYCLE, PALETTE, SCROLLER, SLIDER, TEXT, and NUMBER gadgets. - GADGET FONT: New syntax to set font for GadTools gadgets: GADGET FONT name$, size - GADGET SETATTR/GETATTR: Runtime modification and querying of gadget attributes via tags. - ASSERT statement: Runtime assertion checking for defensive programming. Syntax: ASSERT expression [, "message"] Prints "ASSERT FAILED: " and exits on failure; passes through silently when the condition is true. Implemented as an assembly-level runtime library function (assert.s in db.lib). - 68020 native code generation: When compiling with the -2 flag or OPTION 2+ in source, the compiler emits native 68020 instructions (muls.l, divs.l, divsl.l) for long multiply, divide, and modulo instead of calling library routines (lmul, ace_ldiv, ace_lrem). Emits "machine 68020" assembler directive for vasm. Documentation: - txt2guide.rb: Ruby script to auto-generate AmigaGuide documentation from text sources (ref.txt, ace.txt). Testing: - GadTools test suite: New 'gtgadgets' test category for GadTools gadgets. - Legacy gadgets tests: Separate 'legacygadgets' category for original BOOPSI gadgets. - Assert test suite: New 'assert' test category with ok and fail cases. - 68020 arithmetic test: opt020 test case validating native 68020 code generation for multiply, divide, and modulo operations. ------------------------------------------------------------------------------ v2.5 (2026-01-22) ----------------- New Features: - AGA Screen Support (modes 7-12): Full support for AGA chipset screens with up to 256 colors (8-bit depth). Toolchain Changes: - vasm/vlink replaces legacy assembler/linker: Uses vasm and vlink as the standard toolchain instead of a68k/blink. Bug Fixes: - FFP/vbcc floating-point compatibility fix: Fixed FFP handling in runtime library (sleep_for_secs and float routines) for vbcc compatibility. Build System: - GNU Makefile build system: New Makefile-ace and Makefile-lib in src/make/ replacing legacy AmigaDOS build scripts. - Rebuilt runtime libraries: Fresh db.lib and startup.lib compiled with the new toolchain. Project Housekeeping: - Directory restructured: prgs/ renamed to examples/, build scripts moved to src/make/, test infrastructure organized under verify/. - Test suite added: 35 test cases covering syntax, arithmetic, floats, and control flow, run via ARexx runner on emulated Amiga. - Documentation consolidated: Single README.md, .doc files renamed to .txt.