Supported Libraries¶
volamos reimplements library calls at the API boundary — it doesn't
run real .library files, it intercepts the jsr through a library
base and services the call with native Rust code. This page lists
what's implemented today. If a guest program calls something not
listed here, volamos fails loudly with a diagnostic naming the exact
library and function, rather than silently misbehaving — that's a real
gap, not a bug in your program, and worth filing an issue for.
dos.library¶
- File I/O:
Open/Read/Write/Seek/Close,Input/Output,IoErr/SetIoErr. - Locks and directory traversal:
Lock/UnLock/DupLock/Examine/ExNext/ExAll/ExAllEnd/CurrentDir/ParentDir/SameLock. - Pattern matching:
MatchFirst/MatchNext/MatchEnd/ParsePattern/MatchPattern(NoCase). - Argument parsing:
ReadArgs/FreeArgs(the standardReadArgstemplate syntax every realC:command uses). - Environment variables:
GetVar/SetVar/DeleteVar, backed by a real, directory-mappedENV:volume. - Date/time:
StrToDate/DateToStr/DateStamp. - Process/CLI:
Cli/GetProgramName/MaxCli/AllocDosObject/FreeDosObject(DOS_RDARGSandDOS_EXALLCONTROL). - The
DosList:LockDosList/UnLockDosList/FindDosEntry/Info. LoadSeg/UnLoadSeg(realBPTRseglists),RunCommand, andSystemTagList/System/Executefor tools that shell out to another guest program.CheckSignal.
exec.library¶
OpenLibrary/OldOpenLibrary/CloseLibrary— an unknown library on disk gets an auto-created fake base rather than failing outright (mirroringvamos); a handful of standard Workbench libraries (mathtrans,mathieee*,locale,intuition) are always present, matching real ROM-resident behavior.- Memory:
AllocMem/FreeMem/AllocVec/FreeVec/AvailMem, memory pools (CreatePool/DeletePool/AllocPooled/FreePooled), and the rawAllocate/Deallocateprimitive over a real, coalescingMemHeader/MemChunkfree list. - Lists and nodes:
AddHead/AddTail/Remove/RemHead/RemTail/Insert/Enqueue/FindName, plus minimal single-threaded message ports (CreateMsgPort/DeleteMsgPort/PutMsg/GetMsg/ReplyMsg/WaitPort). - Tasks and signals:
FindTask/SetSignal/SetExcept/Wait/Signal/AllocSignal/FreeSignal/Forbid/Permit, including hostSIGINT/SIGTERMdelivered to the guest asSIGBREAKF_CTRL_C. - The full
SignalSemaphoreAPI:InitSemaphore/ObtainSemaphore/ReleaseSemaphore/AttemptSemaphore/FindSemaphore/AddSemaphore/RemSemaphore/ObtainSemaphoreList/ReleaseSemaphoreList. - I/O requests:
OpenDevice/CloseDevice/DoIO/SendIO/WaitIO/CheckIO/AbortIO,CreateIORequest/DeleteIORequest. Alert,RawDoFmt.- CPU-detection plumbing:
AttnFlags(a real, guest-readableExecBasefield, not a call),CacheControl,Supervisor.
utility.library¶
- Tag-list handling:
FindTagItem/GetTagData/NextTagItem/AllocateTagItems/FreeTagItems. Stricmp/Strnicmp/ToUpper/ToLower.- 32-bit math helpers:
SMult32/UMult32/SDivMod32/UDivMod32. - Amiga date conversions:
Amiga2Date/Date2Amiga/CheckDate.
locale.library¶
Character classification (IsAlpha/IsDigit/IsAlNum/IsCntrl/
IsGraph/IsLower/IsPrint/IsPunct/IsSpace/IsUpper/
IsXDigit), case conversion (ConvToUpper/ConvToLower), a
locale-aware StrnCmp, and a minimal OpenLocale/CloseLocale. Every
function uses the classic built-in Amiga charset (Latin-1/ISO-8859-1)
regardless of what Locale* is passed in — this is not a real
multi-locale/catalog system (no LC:-directory scanning, no
translated catalogs), matching vamos's own scope for this library.
intuition.library¶
A thin stub — DisplayAlert, AutoRequest, EasyRequestArgs,
CurrentTime — just enough that a console tool's stray Intuition call
doesn't crash. No real windowing or GUI: AutoRequest/
EasyRequestArgs (which report which button a real user pressed)
return a fixed default rather than trying to guess, since there's no
display to show anything on in the first place.
Math libraries¶
mathffp, mathtrans, mathieeedoubbas, mathieeedoubtrans — real
FFP/IEEE-754 arithmetic, not fake traps. Includes a faithful
reproduction of a genuine historical AmigaOS quirk: mathffp.library's
SPSub/SPDiv compute their result with arguments effectively
reversed from what their names suggest (SPSub(left, right) actually
returns right - left) — this matches real mathffp.library, not a
bug in volamos.
timer.device¶
Real time-arithmetic (AddTime/SubTime/CmpTime/ReadEClock/
GetSysTime) via the documented io_Device-as-library-base idiom
real AmigaOS code uses to call these functions.
Deliberately out of scope¶
- Real windowing/GUI — no
Screen/Window/Gadgetmodel, no display at all. volamos targets command-line tools, not Workbench applications or games. - Custom-chip access (graphics, audio, disk hardware) — nothing to emulate here for a console tool.
- Cross-process IPC/message-port bridging — volamos runs one guest
process at a time (
System()/Execute()/RunCommandrun a nested program to completion synchronously, not concurrently). exec.library'sMakeLibrary/SetFunction— creating a new library at runtime, or patching an existing library's jump table to point at guest code, needs a real architectural extension (a jump-table slot that means "call back into guest code") volamos doesn't have today.