AmigaOS 3.2 — What Changed for Developers (V40 → V47)¶
This article captures the developer-facing delta from AmigaOS 3.1 / NDK 3.1 (V39/V40) — the baseline the rest of this wiki documents — to AmigaOS 3.2 (NDK 3.2 Release 1, V47, 2021). AmigaOS 3.2 is the Hyperion Entertainment continuation of the OS. The lineage is: the 3.1.4 project (V45, 2016-2018) → the 3.2 project (V46/V47, 2019-2021).
The NDK 3.2 ReadMe-NDK.txt notes: "more than seventeen years after the last AmigaOS 68k NDK," and "tools, examples, and other components from previous NDKs are not needlessly duplicated here" — so the 3.1 NDK and the 3.2 NDK are complementary, not a superset/replace relationship. This article covers what materially changed for someone writing or porting Amiga software.
Version numbers at a glance¶
| Version | Meaning |
|---|---|
| V33-V36 | Kickstart 1.2-2.0 |
| V37 | AmigaOS 2.0 (this wiki's getting-started baseline) |
| V39 | AmigaOS 3.0 ("AA", Advanced Amiga) |
| V40 | AmigaOS 3.1 (NDK 3.1 — the original wiki baseline) |
| V45 | AmigaOS 3.1.4 project (2016-2018) |
| V46/V47 | AmigaOS 3.2 project (2019-2021); V47.1 ships on the CD ($VER: AmigaOS 3.2 CD-ROM Release 47.1) |
| V50 | Reserved API slots; some functions implemented early in V47 |
If your code does runtime version checks, the relevant thresholds are V45 (3.1.4 behavior changes) and V47 (3.2). Always check Library->lib_Version, and note that V50 functions exist in the V47 jump table as reserved slots — test for their presence, do not assume.
exec.library — features removed, pools fixed¶
The biggest exec changes are removals, not additions. Code that touched these private/unfinished APIs will hit a recoverable alert under 3.2:
- Task trees removed. "These functions were never fully functional and were incomplete." Any use ends in a recoverable alert and returns zero.
- AVL trees removed. ROM space is precious; high-level data structures belong in a separate library. Any use ends in a recoverable alert and returns zero.
- Memory pools reverted to the V40 puddle-based scheme (
Allocate()on puddles) — "just without the V40 bugs." Released puddles bubble to the top immediately.
Other exec notes: coldstart now detects a 68060 FPU and suppresses the bogus FPU-present report (the 68060.library owns that role). ROMWack is back in place of the SAD debug kernel. On 68040+, ExitIntr does an extra custom-register access to suppress spurious interrupts.
See exec.library Reference for the V40 baseline; the SAD section there is superseded — Status: Outdated — ROMWack replaced SAD in V46.37.
dos.library — finally-correct features and V50 additions¶
Several V40 promises are fulfilled in 3.2, plus genuinely new functions:
NP_Error/NP_CloseErrorfinally work, "unlike V40, which claimed to support it, but in fact did not." For V40 compatibility,NP_Errordefaults to NULL (notOpen("NIL:",...)) andNP_CloseErrorto FALSE (not TRUE).- New V50 functions:
PutErrStr(),GetCurrentDir()/GetCurrentDirName(),ErrorOutput(),SelectErrorOutput(),VolumeRequestHook(),DoShellMethodTagList(). Multiple other V50 slots are reserved. System()gainsSYS_CmdStream(command input as a stream),SYS_Async(now works with NULL command — a replacement for NewCLI), andSYS_InName/SYS_CmdName/SYS_OutName(open streams in the shell's context).NP_Nameis now honored (V40 ignored it, always naming the process "Background CLI").CliInitNewCli()andCliInit()are obsolete — both now dead-end alert. Shell startup usesCliInitRun()exclusively.- The
*Printffamily is buffered (permanently enabled in V47.23). On an A3000 030@25MHz, throughput for medium strings improved by up to ~3.9x over the byte-at-a-time BCPL implementation. - Default stack sizes raised for
CON:,RAW:,PRT:,SER:,PAR:,RAM:and the FFS.
intuition.library — iconify, scrollwheel, hotkeys, richer DrawInfo¶
3.2 substantially modernizes the GUI without breaking the classic event loop:
- Iconify gadget is first-class. Request
WA_IconifyGadget,TRUE(WA_Dummy + 0x60). Pressing it deliversIDCMP_WindowClosewithmsg->Code = 1(hide only) rather than0(close). MultiView implements this protocol.ShowWindow()/HideWindow()are reimplemented (V50-derived) and run through the input event handler to avoid races;ShowWindow()takes a second arg — the window to show in front of. - Native scrollwheel support at the OS level (V47.26). Shift-click the zoom gadget = maximize. Ctrl+left/right in string gadgets jumps to line ends.
GA_Underscore/GA_ActivateKey(backported from OS4) give gadgets andEasyRequestbuttons keyboard hotkeys.MIF_SHIFTCOMMSEQ(0x0800) enables Shift+Amiga-key menu shortcuts.SA_OpenBorderlets windows drag partly off-screen (requires layers V45; ON for Workbench, OFF elsewhere).- DrawInfo is now version 3.
DRI_VERSIONis3(was 2 for V39). One new pen,BARCONTOURPEN(0x000C), bringsNUMDRIPENSto13(0x000D), and a newdri_Screenbackpointer appears.BARCONTOURPENcolors the left/top edges of the screen bar and menus. Code that hard-codesNUMDRIPENSmust be updated. - New
OSERR_NORTGBITMAP(10) fromOpenScreenwhen a tagged RTG bitmap allocation fails. New sysiclass images:MENUSUB(the proper submenu arrow, replacing the ASCII 187 "»" GadTools used), plusFRAME_PROPBORDER,FRAME_PROPKNOB,FRAME_DISPLAY. NewFRAMEF_MINIMALflag forIM_FRAMEBOX. - Mutually-exclusive menu items render as radio buttons, not checkmarks. Configurable sizing-gadget aspect (18×14 / 18×16 / 18×18 / 18×20) for square-pixel high-res screens.
IntuitionControlA()is a new multi-purpose entry point; jump-table slots were reserved to match the OS 4.x intuition.library layout.- Screen bitmaps now allocate via the tagged
AllocBitMap()(V39AllocBitMap+ tags), with the ModeID placed on the tag list, falling back to the legacy allocator on failure.
graphics.library, layers.library, gadtools.library¶
- graphics:
GetDisplayInfo()/SetDisplayInfo()now reach private/extended display-info elements. ABestModeID()cast bug (lower 16 bits of a tag address used — false negatives at 64K boundaries) is fixed.ClearRectRegion()no longer mangles regions with >1RegionRectangle. - layers (V50 functions present in V47):
LayerOccluded(),HideLayer(),ShowLayer(),SetLayerInfoBounds(). Superbitmap code simplified;newlayer()pre-allocates cliprects to avoid races. - gadtools: new
NG_GRIDLAYOUTflag; newGTVI_MinFontWidth/GTVI_MinFontHeight; read-onlyGTLV_Total/GTLV_Visible;GTMX_ScaledSpacing;GTSC_Arrowsaccepts-1("square"). Submenus use the IntuitionMENUSUBimage (requires intuition ≥47.8) instead of the ASCII 187 glyph. FrameIClass gainsFRAME_CONTEXTfor bevel boxes.
utility.library — 64-bit math done right, length-limited strings¶
- The 64-bit math routines return in proper register order (low 32 bits in
d0, high 32 bits ind1). AddedSDiv64/UDiv64. 68020 and 68060 specialized versions exist; the 68060 versions are not auto-enabled because exec does not identify the 68060 (the68060.librarydoes). The 68020-only build of utility is retired. - New V47 functions:
VSNPrintf()(length-limited formatting),Strncpy(),Strncat().VSNPrintf()was realigned to the OS 4.x LVO/register order — recompile code using it; the original V47 LVO survives as a wrapper for now.
locale.library — much faster, much stricter¶
FormatString()rewritten (permanently enabled V47.21). Because locale patchesexec/RawDoFmt, this speeds up all formatted output; on an A3000 030@25MHz short-stringRawDoFmt()is up to 5.06x faster. The number-conversion buffer shrank to 100 chars (from 200);%sis no longer capped at 65535 chars.GetCatalogStr()uses a sorted lookup table + binary search for catalogs with ≥128 entries (a non-recursiveqsort()avoids pulling in the SAS/C runtime).- Catalog loading is hardened: it validates the STRS, language, and version chunks and string bounds, and rejects malformed catalogs.
FormatString()positional args (%5$s) are limited to 128. GetCatalogStr()deliberately preserves the V38-V40D1/A0/A1register configuration because software (e.g. TurboCalc 3.5) depends on it.
Devices¶
- timer.device / trackdisk.device add
NSCMD_QUERY. trackdisk makesTD_ADDCHANGEINT/TD_REMCHANGEINTsafe and adds a CPU-based MFM encoder plusTDInitBuffer()/TDU_*tags for 32-bit chip memory.
NDK 3.2 later releases (R2, R3, R4)¶
The tree above documents the R1 baseline (13.04.2021). Hyperion shipped three updates — R2 (31.05.2021), R3 (22.06.2021) and R4 (06.02.2022). R4 is the significant one for developers: its autodocs "for the first time in 35 years contain documentation on bugs and features never covered in detail before in the RKM text or in the AutoDocs" (8 libraries: amiga_lib, audio, commodities, dos, exec, graphics, locale, wb). R4 also adds two developer-doc articles, full trackfile.device/DAControl source, vbcc inline-header support, and Include_I/lvo/. See NDK 3.2 R2/R3/R4 Release Notes.
New R4 developer knowledge documented separately:
- Interface Header Files — how clib/proto/pragmas/pragma/inline and amiga.lib stub code bridge C to register-based OS calls.
- exec Memory Pools — the puddle/threshold scheme, sizing, and the
show_memory_pool_insights()diagnostic. - trackfile.device — the ADF-backed virtual-floppy driver (full source in R4).
Third-party GUI: MUI¶
The 3.2 era also brought the third major GUI toolkit into scope. MUI — Magic User Interface (Stefan Stuntz, 1992-97, v3.8 dev archive) is the dominant third-party BOOPSI GUI system, distinct from both GadTools and ReAction: it provides a fully automatic layout engine and a declarative notification mechanism where the main loop is just a Wait().
New subsystems in NDK 3.2 (separate articles)¶
These did not exist in NDK 3.1 and have their own articles:
- ReAction GUI Toolkit — BOOPSI-based gadget classes opened as libraries; the Examples/ tree ships ~40 demos.
- mmu.library — Thomas Richter's hardware-independent MMU API (basis for MuForce and the virtual-memory
memory.library). - Roadshow bsdsocket TCP/IP — Olaf Barthel's TCP/IP stack; SANA-II evolved to R4/R5.
See Also¶
- NDK 3.2 R2/R3/R4 Release Notes
- Interface Header Files
- exec Memory Pools
- trackfile.device
- MUI — Magic User Interface
- AmigaOS Version History
- exec.library Reference
- dos.library Reference
- Intuition Library Reference
- Graphics and Layers Library Reference
Sources: Hyperion Entertainment / AmigaOS Team, NDK 3.2 ReleaseNotes (exec, dos, intuition, graphics, layers, gadtools, utility, locale, trackdisk, timer), 2016-2021; NDK 3.2 ReadMe-NDK.txt.
Raw: raw/architecture/os-3.2-release-notes.md
Updated: 2026-08-04