AROS ​​Vision

Modern and free Amiga-Compatible Experience on Amiga and PC

Article 16: The Amiga Filesystem, Volumes, Assigns and Handlers 

How AmigaOS Organizes Files and Storage In the previous article, we explored AmigaDOS and the Shell. 

We saw familiar names such as:
DH0:
DF0:
Work:
C:
S:
LIBS:
RAM:
NIL: 

At first glance, all of these names look similar because they end with a colon. But internally they can represent very different things. Some identify physical or logical devices. Some identify mounted volumes. Some are assignments pointing to directories. Others represent special services implemented by handlers. Understanding these differences is essential if we want to understand how the Amiga filesystem really works. 

1. The AmigaDOS Namespace 

One of the most elegant features of AmigaDOS is its flexible namespace. Consider:
DF0:
DH0:
Workbench:
Games:
C:
LIBS:
RAM:
CON:
NIL: 

From the user's point of view, all of them can appear as destinations in a path. 

For example:
DF0:Startup-Sequence or:
Work:Documents/Letter or:
C:Dir 

But these names do not necessarily refer to the same type of object. 

We can roughly divide them into:
DOS names
   |
   +-- Devices
   |
   +-- Volumes
   |
   +-- Assigns
   |
   +-- Special handlers/services 

AmigaDOS provides a unified way to access them. 

2. Device Names 

Let's begin with something familiar:
DF0:

 This traditionally represents the first floppy disk drive. 

Additional drives might appear as:
DF1:
DF2:
DF3: A hard-disk partition might appear as:
DH0:
DH1: 

These are DOS device names. They provide logical access to storage through the DOS environment. But there is an important distinction. 

A name such as:
DF0: 

does not mean that applications manipulate the floppy hardware directly. Several layers may exist underneath. 

3. Device Names Versus Exec Devices 

This can be confusing because AmigaOS also has Exec devices. 

For example:
DF0: is a DOS-level device name. 

But:
trackdisk.device
is an Exec device driver. 

They are not the same thing. 

A simplified relationship is:
DF0:
 |
 v
Filesystem / DOS Handler
 |
 v
trackdisk.device
 |
 v
Floppy hardware 

The filesystem interprets files and directories. trackdisk.device handles lower-level disk operations. The floppy controller hardware ultimately accesses the physical disk. 

4. Why These Layers Matter 

Imagine an application reading:
DF0:Documents/Letter 

The application wants a file. It does not want to think about:
tracks
sectors
disk rotation
DMA
floppy controller registers
directory block structures
Instead it asks AmigaDOS to open a file. 

Conceptually:
Application
     |
     v
dos.library
     |
     v
Filesystem
     |
     v
Device driver
     |
     v
Hardware 

Each layer hides complexity from the one above it. 

5. What Is a Filesystem? 

A disk by itself contains blocks of data. The filesystem gives these blocks structure and meaning. 

It introduces concepts such as: 
files
directories
filenames
file sizes
dates
protection flags
free space
allocated blocks

Conceptually:
Raw disk blocks
       |
       v
    Filesystem
       |
       +-- Directory
       |      |
       |      +-- File A
       |      +-- File B
       |
       +-- Directory
              |
              +-- File C 

Without a filesystem, the operating system would only see storage blocks rather than the familiar files and directories presented to applications. 

6. The Original Amiga Filesystem 

Classic Amiga systems are strongly associated with the Amiga Fast File System, commonly called:
FFS 

Earlier systems also used the Original File System:
OFS 

FFS improved storage efficiency and performance compared with the original filesystem. Over the lifetime of the Amiga, additional filesystem implementations appeared, but the important architectural idea is more general: The filesystem is a software layer between AmigaDOS file operations and the underlying storage device. This separation allows AmigaDOS to support different filesystem implementations. 

7. The Role of a Filesystem Handler 

AmigaDOS commonly uses handlers to implement filesystem functionality. 

A simplified view is:
Application
     |
     v
dos.library
     |
     v
DOS
     |
  messages
     |
     v
Filesystem Handler
     |
     v
Storage Device 

The handler receives requests representing operations such as:
Open a file
Read data
Write data
Create directory
Delete file
Rename file 

It then translates those operations into actions appropriate for its filesystem. 

8. DOS Packets 

Communication with handlers traditionally uses a message-oriented mechanism involving DOS packets. This fits perfectly into the wider AmigaOS architecture. 

Remember what we encountered earlier:
Exec
 |
 +-- Tasks
 +-- Signals
 +-- Messages
 +-- Message Ports

AmigaDOS builds more complex services using these fundamental mechanisms. 

Conceptually:
DOS Process
     |
     | request
     v
DOS Packet
     |
     v
Message Port
     |
     v
Handler Process 

The handler performs the requested operation and returns the result. 

9. Why This Design Is Powerful 

Suppose a program opens:
Work:Image 

From the application's perspective, the important operation is:
Open file 

It does not necessarily need to know which filesystem is involved. The application communicates with AmigaDOS. AmigaDOS communicates with the appropriate handler. This means the application can remain largely independent of the physical storage implementation. 

10. Volumes 

Now we need to distinguish devices from volumes. Imagine inserting a floppy disk labelled:
Games into:
DF0: 

There are now two names involved:
DF0: and:
Games: 

They are not equivalent concepts. DF0: identifies the logical drive. Games: identifies the volume. 

Conceptually:
Drive                  Volume

DF0:  ------------->  Games: Remove the disk and insert another named:
Utilities: and the relationship changes:
DF0:  ------------->  Utilities: The device remained the same. The volume changed. 

11. Why Volume Names Are Useful 

Suppose an application needs data from:
Games: It does not necessarily have to care which physical drive contains the disk. 

Conceptually:
Program needs
Games:
   |
   v
AmigaDOS finds volume
   |
   v
Volume currently in DF1: 

This abstraction was particularly useful in the floppy-based world of the original Amiga. The user could manage disks by meaningful names rather than only by physical drive numbers. 

12. Volume Not Present 

This also explains a familiar Amiga experience. A program may request a volume that is currently unavailable. 

For example:
Please insert volume
Games
in any drive 

The operating system knows the required volume name, but that volume is not currently mounted. The solution is not necessarily: Insert a disk into DF0. Instead it is: Make the requested volume available. This distinction is subtle but important. 

13. Hard-Disk Partitions 

The same concepts apply to hard disks. A partition may have a DOS device name such as:
DH0:
but its volume could be called:
Workbench: 

Therefore:
DH0: and:
Workbench: 

may currently lead to the same filesystem. But they describe it from different perspectives.
DH0:          logical DOS device
Workbench:    mounted volume If the volume is renamed, the device name does not necessarily change. 

14. Assigns 

Now we come to one of the most distinctive features of AmigaDOS:
Assigns An assign creates a logical name that points somewhere else. 

For example:
C: might point to:
Workbench:C while:
LIBS: might point to:
Workbench:Libs 

Conceptually:
C:
 |
 v
Workbench:C 

The application does not have to know the physical location. 

15. Why Assigns Are So Useful 

Suppose a program expects its data at:
MyGame: 

You could create:
Assign MyGame: Work:Games/MyGame 

Now when the program accesses:
MyGame:Graphics AmigaDOS redirects that to something like:
Work:Games/MyGame/Graphics 

The software can therefore use a stable logical name even if its files are moved elsewhere. This is remarkably flexible. 

16. System Assigns 

AmigaOS makes extensive use of standard assigns. 

Typical examples include:
C:
S:
L:
LIBS:
DEVS:
FONTS:
T:
ENV: 

Conceptually, a Workbench installation might look like:
Workbench:
 |
 +-- C
 +-- S
 +-- L
 +-- Libs
 +-- Devs
 +-- Fonts AmigaDOS then creates convenient logical names:
C:      -> Workbench:C
S:      -> Workbench:S
L:      -> Workbench:L
LIBS:   -> Workbench:Libs
DEVS:   -> Workbench:Devs
FONTS:  -> Workbench:Fonts 

This separates the logical system structure from the physical disk layout. 

17. Why This Helps Applications 

Imagine an application needs a library. It can refer to:
LIBS: 

rather than assuming:
DH0:Libs 

That matters because another user's system might be installed on:
DH1: or on a volume named:
System: The logical name remains:
LIBS: 

Therefore software becomes less dependent on a particular disk configuration. 

18. Multiple Assign Locations 

AmigaDOS can go even further. Certain assign configurations can encompass more than one location. 

Conceptually:
LIBS:
 |
 +--> System:Libs
 |
 +--> Work:ExtraLibs 

This allows AmigaDOS to search multiple locations through a common logical name. It is a powerful mechanism for extending the operating environment without forcing everything into one physical directory. 

19. Deferred Assigns 

AmigaDOS also supports sophisticated assignment behaviour where the target does not always have to be immediately available. This was useful in systems involving removable media. Again the fundamental idea is: A logical name does not have to be tightly coupled to one permanent physical location. This philosophy appears repeatedly throughout AmigaOS. 

20. RAM: 

One of the most interesting filesystem-like entities is:
RAM: 

RAM: represents the RAM disk. Files copied there reside in memory. 

For example:
COPY Work:TestFile RAM:

 Conceptually:
Disk
 |
 | COPY
 v
RAM:
 |
 v
System memory 

Because access does not require mechanical disk activity, the RAM disk can be extremely fast. 

21. RAM: Consumes System Memory 

However, RAM storage is not free. If you copy a 500 KB file into the RAM disk, approximately that amount of system memory must ultimately be used to hold the data and filesystem structures. 

On an early Amiga with:
512 KB or:
1 MB of RAM, this mattered enormously. 

The RAM disk therefore exchanges memory capacity for storage speed. And naturally, its normal contents are lost when the machine is switched off. 

22. RAD: 

Classic Amiga users may also encounter:
RAD: 

This represents a different RAM-based storage concept. Unlike the ordinary RAM: disk, a recoverable RAM disk can be configured so that its data may survive a warm reboot as long as memory contents remain intact. This was particularly useful for experimentation and certain boot configurations. Again, AmigaDOS makes this special storage system appear through a familiar DOS name. 

23. NIL: 

Not every DOS name represents storage. Consider:
NIL: Writing data to NIL: simply discards it.

Program
   |
   | output
   v
 NIL:
   |
   X 

There is no disk involved. Yet programs can access it through the DOS namespace. This demonstrates that the namespace represents more than filesystems alone. 

24. CON: 

Similarly:
CON: is associated with console functionality. 

A program may use a console specification such as:
CON:x/y/width/height/title to work with console windows. 

Again:
CON: is not a disk. 

It is a service made accessible through the AmigaDOS environment. 

25. The Namespace as an Abstraction 

This makes the AmigaDOS environment both simple for the user and extremely flexible internally. 

26. Locks 

Instead of Only Path Strings Internally, AmigaDOS frequently uses an important concept known as a:
Lock 

A lock represents an association with a file or directory within the DOS filesystem environment. A program can obtain a lock on a directory and then perform operations relative to it. This is important because programs do not always need to manipulate complete textual pathnames for every operation. 

Conceptually:
Path
 |
 v
DOS
 |
 v
Lock
 |
 v
Filesystem object 

Locks play an important role in AmigaDOS filesystem programming. 

27. The Current Directory and Locks 

When a Shell has a current directory such as:
Work:Documents 

AmigaDOS can maintain the appropriate context internally. 

Then:
TYPE Letter can refer to:
Work:Documents/Letter without requiring the complete path every time. The idea of directory locks helps make this possible. This is another example of AmigaDOS maintaining state for each process. 

28. File Handles 

When an application opens a file, it obtains a file handle. 

Conceptually:
Open()
 |
 v
FileHandle
 |
 +--> Read()
 |
 +--> Write()
 |
 +--> Seek()
 |
 +--> Close() 

The handle represents the open stream. The application does not need to manipulate filesystem blocks directly. It works through the DOS API. 

29. Example: Opening a File 

Suppose an application performs something conceptually similar to:
Open("Work:Documents/Test", MODE_OLDFILE); Underneath, the path needs to be resolved. 

A highly simplified sequence might be:
Application
     |
     v
dos.library
     |
Resolve "Work:"
     |
     v
Find filesystem/handler
     |
     v
Locate Documents/Test
     |
     v
Return file handle 

The application can then use that handle for reading. 

30. File Protection 

Bits Amiga files also have protection attributes. Users may encounter flags representing concepts such as:
R   Read
W   Write
E   Execute
D   Delete 

There are also additional protection flags associated with concepts such as:
Script
Pure
Archive
Hold 

These attributes provide information controlling or describing how files should be handled. For example, the script bit can identify a file intended to be executed as a command script. 

31. Files Do Not Need Extensions 

Another important characteristic of classic AmigaOS is that filenames do not fundamentally depend on extensions in the way users of some other systems might expect. 

A command might simply be called:
Dir rather than:
Dir.exe A script might be:
Startup-Sequence rather than:
Startup-Sequence.bat A datatype or application may identify data through other mechanisms rather than relying exclusively on a filename suffix. Extensions certainly can be used, but they are not fundamental to AmigaDOS file execution. 

32. Why This Matters for Amiga Software Installation 

Many classic Amiga programs were installed simply by copying files into several system directories. 

For example:
program       -> Work:Tools/
library       -> LIBS:
device        -> DEVS:
handler       -> L:
configuration -> DEVS: or program directory 

This arrangement makes much more sense once we understand assignments. Software is not necessarily saying: Copy this file to one specific hard-disk partition. Instead it says: Place this library in the system's logical library location. 

That is:
LIBS: 

33. Why Missing Assigns Cause Problems 

Suppose a program expects:
MyProgram: but the assign does not exist. The program may fail to find:
MyProgram:Data even if the data physically exists somewhere on the hard disk. This explains why many classic Amiga programs supplied startup scripts containing commands such as:
Assign MyProgram: Work:Programs/MyProgram Once the assignment exists, the program finds its resources through the expected logical name. 

34. Games and Assigns 

This technique became especially familiar with games. A game originally designed for floppy disks might expect a particular volume or logical name. When installed on a hard disk, an assignment can help reproduce the expected environment. Conceptually:
Game expects:

GameDisk:

But files are actually:

DH1:Games/MyGame/

Assign:

GameDisk: -> DH1:Games/MyGame/ The application can continue using familiar paths without being rewritten for the new storage location. This demonstrates the flexibility of AmigaDOS extremely well. 

35. Booting and the Filesystem 

The filesystem infrastructure also plays an important role during boot. 

Recall the general sequence from our earlier boot article:
Power on
 |
 v
Kickstart
 |
 v
Hardware initialization
 |
 v
Boot device
 |
 v
DOS environment
 |
 v
S:Startup-Sequence
 |
 v
Workbench 

For this to work, the operating system needs to locate the boot medium, access its filesystem and execute the appropriate startup commands. The DOS environment therefore becomes an essential bridge between the low-level boot process and the higher-level Workbench system. 

36. Hard-Disk Filesystems Can Be Modular 

One particularly interesting aspect of Amiga storage architecture is that filesystem code can be treated as a separate system component. Therefore the overall relationship can be:
Disk partition
      |
      v
Filesystem
      |
      v
DOS Handler
      |
      v
AmigaDOS
      |
      v
Applications 

This helped make the Amiga storage architecture extensible. Different filesystem implementations could be introduced without redesigning all applications that use AmigaDOS file operations. 

37. From an Application to the Hardware Let us put the layers together. Imagine an application reading:
Work:Pictures/Amiga.iff 

A simplified path might look like this:
Application
     |
     v
dos.library
     |
     v
Resolve Work:
     |
     v
Filesystem Handler
     |
     v
Filesystem structures
     |
     v
Device driver
     |
     v
Storage controller
     |
     v
Physical storage 

The application only needs to understand:
Open
Read
Close 

The operating system handles the rest. 

38. Why the AmigaDOS Design Is Elegant 

The Amiga storage architecture combines several abstraction mechanisms:
Devices
Volumes
Assigns
Handlers
Filesystems
Locks
File handles 

Each solves a different problem. Devices Identify logical devices. Volumes Identify mounted media or filesystems by name. Assigns Provide location-independent logical paths. Handlers Implement DOS-visible services. Filesystems Organize raw storage into files and directories. Locks Represent filesystem objects and directory contexts. File handles Represent open data streams. Together they form a flexible storage environment. 

39. The Complete Picture 

We can now construct a broader model:
                    Application
                         |
                         v
                     AmigaDOS
                         |
              +----------+----------+
              |          |          |
           Assigns     Volumes    Devices
              |          |          |
              +----------+----------+
                         |
                    DOS Handler
                         |
                     Filesystem
                         |
                    Exec Device
                         |
                      Hardware Special services such as:
RAM:
NIL:
CON: can also participate in the AmigaDOS namespace without representing conventional physical disks. That is what makes the system so flexible. 

40. Why This Still Matters 

Today Understanding this architecture is useful even if your main interest is simply using a classic Amiga. Suddenly many familiar Amiga concepts become logical: Why is a program asking for LIBS:? Why does a game request a disk by volume name? Why can C: point somewhere else? Why does an installation script create assigns? Why is RAM: accessed as though it were a disk? Why are filesystem handlers found in L:? Why are device drivers found in DEVS:? These are all consequences of the same modular design. Conclusion The Amiga filesystem is not simply a collection of disks and directories. AmigaDOS creates a flexible layer of abstraction between applications and storage. 

A name ending with a colon might represent:
a device
a volume
an assign
a filesystem
or a special DOS service Assignments such as:
C:
S:
LIBS:
DEVS: 

allow software to use logical locations instead of hard-coded physical paths. Volumes allow media to be identified independently of the drives containing them. Handlers translate DOS requests into specific services. Filesystems organize raw storage into files and directories. And underneath them, device drivers communicate with the actual hardware. 

A simplified chain looks like:
Application
     |
     v
AmigaDOS
     |
     v
Handler / Filesystem
     |
     v
Device Driver
     |
     v
Hardware 

This architecture demonstrates once again one of the central ideas behind AmigaOS: Separate what the application wants to do from the physical details of how the machine performs it. A program wants to open a file. AmigaDOS determines where that file lives. The filesystem determines where its data is stored. The device driver communicates with the hardware. And the application does not need to know the details. In the next article, Article 17, we can move another level closer to the hardware and explore Interrupts, DMA and Hardware Communication, bringing together the CPU, Exec, Agnus, Paula, Blitter, Copper and the Amiga's bus architecture.