Muller's World

Mike Muller's Homepage

2026-08-24 Installing Amiberry on Linux with Amiga Forever ROMs

I've wanted to play around with the Commodore Amiga ever since I learned about it (I think in 1990). Of course, you can now emulate the Amiga (and pretty much any other machine from that era) on a modern PC. This past weekend I set out to do so using Amiberry, a sweet little emulator that targets the Raspberry Pi, but also runs just fine on Intel/AMD systems.

As others have noted, installation was a little tricky. While the documentation suggests doing the right thing and buying the Amiga ROMs from Amiga Forever, there's a bit of a gap in terms of what you need to install them in an amiberry installation. So in the interest of posterity, here's what worked for me.

)

I installed Amiberry as documented on their site and purchased the Amiga Forever "Value" package. Amiga Forever gave me a download link to a MSI ("Windows Installer") file, so my first step was installing Wine. I was able to run this with wine amiga-forever-11-value-setup.msi, though it seemed to hang after doing file installations (I was running the installer in a hidden window, and have little experience with Wine, so I'm not sure how normal this is). I restarted it and chose the "Repair" option which finished successfully.

At this point, I was able to run the Amiga Forever emulator using wine ~"/.wine/drive_c/Program Files/Cloanto/Amiga Forever/AmigaForever.exe" and if you're content to run an Amiga emulator from within a Windows emulator, I suppose you can stop here. However, it might be necessary to run this emulator under Windows once anyway, as I'm not sure the installer itself produces the necessary ROM files.

There are a set of ROM files installed in three different locations in the Wine C drive tree. Two of them are duplicates and won't work (encrypted versions?). You want to use the ones in users/Public/Documents/Amiga Files/Shared/rom. The checksums of these mostly match those identified in the Amiberry Kickstart ROM Guide.

Copy them to ~/Amiberry/ROMs (if this directory doesn't exist, try running amiberry once and quitting). You'll also want the Amiga Workbench floppy disk images, these are in users/Public/Documents/Amiga Files/Shared/adf. Copy them to ~/Amiberry/Floppies.

Finally, you might want to copy the Local and System directories from users/Public/Documents/Amiga Files/Shared/dir to ~/Aimberry/HardDrives. I'm not sure this is strictly necessary, but it's useful to have emulated hard drives if you want to share any files between your host and an emulated system.

The complete, pastable installation sequence is as follows:

cp ~'/.wine/drive_c/Program Files/Cloanto/Amiga Forever/Shared/rom'/* \
    ~/Amiberry/ROMs
cp ~'/.wine/drive_c/users/Public/Documents/Amiga Files/Shared/adf'/* \
    ~/Amiberry/Floppies
cp -r ~'/.wine/drive_c/users/Public/Documents/Amiga Files/Shared/dir/Local/' \
    ~/Amiberry/HardDrives
cp -r ~'/.wine/drive_c/users/Public/Documents/Amiga Files/Shared/dir/System/' \
    ~/Amiberry/HardDrives

Now run amiberry.

  • From the "Quickstart" page on the sidebar, select amiga-os-134-workbench.adf under "Emulated Drives" "DF0" (which should be enabled).

  • From the "Paths" page on the sidebar, click the "Rescan Paths" button near the bottom.

  • From the "ROM" page on the sidebar, you should now have a complete set of roms available under "Main ROM File" (if you just have the "AROS KS ROM", you probably haven't copied the right .rom file to the right location). Select "KS ROM v1.3".

You should now be able to click "start" and boot into the Amiga workbench. You can pause the emulator and return to the configuration screen with the F12 key.

Running Included Software

The Amiga Forever value package comes with a nice selection of demos, games, videos and other software. These are available as RP9 files, which are essentially floppy disk archives.

To use them, copy them from subdirectories under users/Public/Documents/Amiga Files/Titles to ~/Amiberry/RP9. Then, from the "Quickstart" page on the sidebar, select an RP9 package. The floppy drive sections should get prefilled with one or more floppies from the RP9 set and you should be able to boot into them.

It's worth noting that this doesn't seem to work for the files under "Videos". I'm not clear on how to use these at this point.

Writing Assembly Language

If you're like me, your primary interest in the Amiga is in programming it, particularly that nice, juicy Motorolla 68K microprocessor, and particularly using your familiar Linux command-line workflow. If this is your goal, there's a cross-assembler available called "vasm" that works for m68k and other CPUs. You can download it here. To build it on Linux:

    $ make -j5 CPU=m68k SYNTAX=mot

This should produce the vasmm68k_mot binary, which serves as an assembler and linker for m68k assembly code.

To compile a single assembly source file into an Amiga executable:

    $ vasmm68k_mot -Fhunkexe -quiet -nosym -o target sourcefile.asm

This will generate the binary file target, which can be copied directly into one of your virtual hard drives in ~/Amiberry/HardDrives and executed from the Workbench command line.

Here's an example "Hello World" program (generated for me by Google's AI):

; =============================================================================
; Amiga 68000 "Hello World" OS-Compliant Example
; Target: AmigaOS / Workbench 1.3+
; Assembler: vasm (Motorola syntax)
; =============================================================================

            SECTION Code,CODE

; --- Exec Library Offsets & Constants ---
_LVOOpenLibrary     EQU -408
_LVOCloseLibrary    EQU -414
_LVOOutput          EQU -60
_LVOWrite           EQU -48

; --- Entry Point ---
Start:
            ; 1. Open DOS Library
            move.l  $4.w,a6                 ; Get ExecBase pointer from memory address $4
            lea     DosName,a1          ; Pointer to library name string
            moveq   #33,d0                  ; Minimum version required (Workbench 1.2/1.3+)
            jsr     _LVOOpenLibrary(a6)     ; Call Exec OpenLibrary
            move.l  d0,DosBase              ; Save returned library pointer
            beq.s   .error_no_dos           ; If 0, opening failed, exit safely

            ; 2. Get the Standard Output Handle (CLI window)
            move.l  DosBase,a6              ; Set a6 to DosBase for DOS calls
            jsr     _LVOOutput(a6)          ; Call DOS Output
            move.l  d0,StdOut               ; Save output file handle
            beq.s   .error_close_dos        ; If 0, no stdout handle available

            ; 3. Print the Message
            move.l  StdOut,d1               ; Argument 1: File handle
            lea     HelloStr,a1
            move.l  a1,d2
            moveq   #HelloLen,d3            ; Argument 3: Length of the string
            jsr     _LVOWrite(a6)           ; Call DOS Write

.error_close_dos:
            ; 4. Close DOS Library
            move.l  $4.w,a6                 ; Back to ExecBase
            move.l  DosBase,a1              ; Library to close
            jsr     _LVOCloseLibrary(a6)    ; Call Exec CloseLibrary

.error_no_dos:
            ; 5. Exit Cleanly back to CLI
            moveq   #0,d0                   ; Return code 0 (Success)
            rts

; =============================================================================
; Data Section
; =============================================================================
            SECTION Data,DATA

DosName:    dc.b    "dos.library",0
            EVEN                            ; Ensure next data structure aligns on a word boundary

HelloStr:   dc.b    "Hello, Amiga World!",10 ; 10 is the ASCII Line Feed character (\n)
HelloLen    EQU     *-HelloStr              ; Automatically calculate string length
            EVEN

; =============================================================================
; BSS Section (Uninitialized Variables)
; =============================================================================
            SECTION BSS,BSS

DosBase:    ds.l    1                       ; Storage for DOS library pointer
StdOut:     ds.l    1                       ; Storage for stdout handle

            END

If you build it as indicated above, and drop the resulting binary into one of your drive directories, you should be able to run it and see "Hello, Amiga World!" printed out to the console before returning to the Workbench shell.

Conclusion

This is as far as I've gotten in my exploration of the Amiga and Amiberry emulator. I can't say this information will remain accurate going forwards or even that it's entirely accurate now -- it's a "best effort" on my part.

If you try this and run into any problems or have any corrections or other interesting information, I'd love to hear from you!