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!