Tagged as retrocomputing, amiga, gcc, linux
Written on 2026-07-20 by Daniel Kochmański
Table of Contents
- Prerequisites
- Toolchain
- Emulator
- Installation
- Running executables
- Remote debugging
- Summary
- Resources
純粹心血來潮,我決定建立一個 Amiga 開發環境。由於整理出可行的步驟並不容易,因此我寫下了在 Linux 上如何編譯第一個程式並在模擬器中執行的說明。希望對大家有幫助!
Prerequisites
在本文中,我假設讀者是一位熟練的 Linux 使用者,能夠從原始碼建置軟體並找出缺少的依賴套件。標準的建置工具應該就足以開始。同時也預期讀者具備基本的 shell 指令知識。更多關於如何建置 toolchain 的詳細說明請參閱:https://franke.ms/amiga/amiga-gcc.wiki。
另一個比較麻煩的需求是,要執行 AmigaOS,需要 ROM 映像檔(韌體)和 workbench 磁片(安裝媒體)。這些可以從合法來源購買,或是從自己擁有的硬體中 dump 出來。或者也可以使用模擬器內建的 AROS ROM,不過它與標準 Amiga 軟體的相容性較差。
Toolchain
要為 AmigaOS 建置程式,我們需要編譯器。一個常見的工具是 amiga-gcc。我一開始嘗試使用預設(最經典)的 GCC 分支,雖然產生的執行檔可以正常運作,但將二進位檔載入 m68k-amigaos-gdb 時卻發生 segmentation fault。經過多次嘗試後,我回報了 issue,toolchain 的維護者 Stefan 'bebbo' Franke 親切地解釋說,現在的 toolchain 會產生 DWARF2 除錯資訊,並且修正了在最終執行檔中嵌入除錯區段的 bug。我最後選擇了 GCC 的 amiga16.1 分支,以及 binutils 的 amiga-2.46 分支(包含上述修正)。
請注意,make update 可能會因連線錯誤而失敗。如果發生這種情況,請重複執行直到所有檔案都下載完成。make update 和 make all 都可能需要一些時間——在我的機器上,全部完成大約需要 1 小時。
export WORKSPACE=${HOME}/Workshop/AmigaOS
export TOOLCHAIN=${WORKSPACE}/amiga-gcc-toolchain
export PREFIX=${TOOLCHAIN}
mkdir -p ${WORKSPACE}
cd ${WORKSPACE}
git clone https://franke.ms/git/bebbo/amiga-gcc.git
pushd amiga-gcc
make branch branch=amiga16.1 mod=gcc
make branch branch=amiga-2.46 mod=binutils
make update
make all
# Check whether the compiler works. SDL1.2 build failed on my host, but it is
# not needed.
${TOOLCHAIN}/bin/m68k-amigaos-gcc -v
popd
現在我們已經擁有一個可運作的 AmigaOS toolchain。它支援幾種不同的 runtime/libc 版本。如果沒有特別指定,預設會使用 newlib。
export WORKSPACE=${HOME}/Workshop/AmigaOS
export TOOLCHAIN=${WORKSPACE}/amiga-gcc-toolchain
export PATH=${TOOLCHAIN}/bin:${PATH}
mkdir Shared
pushd Shared
cat > woosh.c <<EOF
#include <stdio.h>
void hi(void) {
printf("jd was here \\\o/\n");
}
int main() {
hi();
return 0;
}
EOF
m68k-amigaos-gcc -g woosh.c -o woosh.out
file woosh.out
# woosh.out: AmigaOS loadseg()ble executable/binary
popd
恭喜!我們剛剛建置了第一個 AmigaOS 程式。看起來 file 在解析 AmigaOS 執行檔時有點小問題,但這個二進位檔確實可以正常運作。
Emulator
現在要如何執行這個檔案呢?我們需要兩樣東西:
- 模擬器
- AmigaOS ROM
取得模擬器相當簡單。我選擇了 Amiberry,因為它提供了良好的開發者體驗——內建 bsdsocket.library、虛擬硬碟和共享目錄,而且在 Linux 上運作良好。另一個不錯的選擇是 FS-UAE。兩者都應該可以正常運作。它們都有二進位版本,或者我們也可以從原始碼建置。我們將從 Flathub 安裝 Amiberry:
flatpak install flathub com.blitterstudio.amiberry
取得 ROM 比較困難。如果你擁有原始硬體,可能已經有合法的 dump。否則你可以從 https://www.amigaforever.com/ 或 https://www.hyperion-entertainment.com/ 購買。假設你已經擁有 ROM,我們就可以啟動模擬器並設定目標系統。
我們需要以下檔案:
- ROM 檔案: kick.a1200.46.143
- 軟碟: Install314.adf、Workbench314.adf 等
mkdir -p Amiberry/{ROMs,Floppies}
# Amiberry expects .a1200 file extension (it doesn't recognize .46.143)
cp Nero/ROMs/kick.a1200.46.143 Amiberry/ROMs/kick.a1200
cp Nero/Floppies/*.adf Amiberry/Floppies
flatpak run com.blitterstudio.amiberry
現在請前往「Paths」分頁,將路徑設定為我們剛剛建立的「Amiberry」目錄。系統提示建立子目錄時請確認。接著點擊「Rescan Paths」按鈕,然後回到「Quickstart」分頁。

Amiga 硬體有幾種不同的版本,具有不同的硬體設定和 M68K CPU 變化。RAM 分為「chip memory」(可直接由自訂晶片存取的記憶體,用於圖形、音訊和 DMA)和「fast memory」(一般用途的 RAM)。前者通常為 1-2 MB,而後者通常可擴充到約 4 MB 的 Fast RAM。這已經足夠了!我們將選擇 Amiga 1200,因為它配備 AGA(Amiga Advanced Graphics Architecture)晶片組和 4 MB Fast RAM 擴充設定。
- 機型: Amiga 1200
- 設定: 4 MB Fast RAM 擴充設定
- 模擬磁碟機 (DF0): Install314.adf
安裝時,安裝程式可能會要求更換軟碟。DF0 代表軟碟機。若要在虛擬機執行期間返回設定選單,請按 F12。

接著前往「ROM」分頁,選擇 kick.a1200 ROM 作為「Main ROM File」。然後前往「Expansions」分頁,啟用 bsdsocket.library。稍後執行 bgdbserver 時會需要 TCP/IP 連線。
最後加入虛擬硬碟和共享目錄:
- 前往「Hard drives/CD」分頁
- 選擇「Create Hardfile」:: 1024MB,啟用 RDB Mode
- 選擇「Add Hardfile」並選取剛剛建立的檔案
- 選擇「Add Directory」
這些磁碟在 Amiga 中會顯示為 DH0 和 DH1。RDB 是 Amiga 原生的分割表格式(類似 PC 上的 MBR,但功能更豐富)。必須設定此模式,Amiga 才能辨識磁碟。

建議儲存設定。前往「Configurations」分頁並儲存檔案。之後即可用以下方式啟動 AmigaOS:
flatpak run com.blitterstudio.amiberry -f amigaos.uae
Installation
我在格式化硬碟時遇到一些問題。一般來說,當安裝程式開啟時,新磁碟應該會出現在初始目錄中,顯示為「DH0: …」。用左鍵點擊圖示,然後按住右鍵以顯示上方選單列。導覽至「Icons > FormatDisk」並格式化磁碟。

現在請按照安裝程式的步驟進行。有時我們需要「插入新的軟碟」。若要返回 Amiberry 選單,請按 F12,並將 DF0 中的軟碟映像檔替換為安裝程式建議的檔案。然後點擊「Resume」繼續。

做得好!我們已成功安裝 AmigaOS!現在可以移除軟碟並開機進入已安裝的系統。
Running executables
系統重新開機後,請前往安裝系統的磁碟機,選擇「System」和「Shell」。woosh.out 已經位於共享目錄中,該目錄會以「DH1」顯示,因為我們已將它作為第二個磁碟機加入(在「Hardfile」之後)。
3.Main:> dh1:
3.DH1:> dir
woosh.out
3.DH1:> woosh.out
jd was here \o/
3.DH1:>
太棒了!我們交叉編譯的二進位檔運作得非常順利!

Remote debugging
但故事還沒結束。軟體會出錯,而當軟體出錯時,我們需要除錯器。我們已經用 m68k-amigaos-gdb 建置了一個,但系統上沒有 GDB server。Stefan Franke(m68k-amigaos toolchain 的維護者)也維護了 bgdbserver,這是一個專為 Amiga 設計的移植版本。
在使用之前,我們需要安裝一個工具來解壓 lha 檔案。它可以從這裡取得:https://aminet.net/package/util/arc/lha。下載並將 lha.run 複製到 Shared/ 目錄,然後在 Amiga 中執行。lha.run 是一個自我解壓縮的檔案,會建立幾個檔案。我們需要的是 lha_68020。將它複製到 c:lha。請注意,c: 不是「Drive C」,而是「Commands directory」。
3.DH1:> lha.run
...
3.DH1:> copy lha_68020 c:lha

現在可以刪除解壓縮出來的檔案,並從 https://aminet.net/dev/debug/bgdbserver.lha 下載 bgdbserver.lha。將壓縮檔放入 Shared/ 目錄並解壓縮。
3.DH1:> lha x bgdbserver.lha
3.DH1:> copy bgdbserver/bgdbserver c:
現在,我們終於可以以除錯模式啟動應用程式:
3.DH1:> bgdbserver :4444 woosh.out

太好了!現在我們可以對我們雄心勃勃的程式進行除錯。在 Linux 主機上,使用相同的二進位檔執行 GDB:
export WORKSPACE=${HOME}/Workshop/AmigaOS
export TOOLCHAIN=${WORKSPACE}/amiga-gcc-toolchain
export PATH=${TOOLCHAIN}/bin:${PATH}
m68k-amigaos-gdb
(gdb) file woosh.out
(gdb) target remote localhost:4444
(gdb) continue
如果遇到「Connection refused」錯誤,請確認 Amiberry 設定中已啟用 bsdsocket.library(如前所述)。

下一個合理的步驟是讓 AmigaOS 看起來更漂亮,但這超出了本教學的範圍。我參考了這份指南,它詳細說明了這個主題: https://lyonsden.net/installing-amiga-os-3-1-4-part-5-finishing-touches/

Summary
我們已成功建置並安裝 AmigaOS 的開發環境。我很想知道一位有動機的 Lisp 駭客可以用它做些什麼?
Resources
在設定這個環境時,我主要參考了以下資源:
- https://franke.ms/amiga/amiga-gcc.wiki: toolchain 首頁
- https://github.com/BlitterStudio/amiberry/wiki: 模擬器 wiki
- https://guide.abime.net/wb3.1/chap2.htm: 分割指南
- https://guide.abime.net/wb3.1/chap4.htm: 安裝 lha.run
- https://aminet.net/: 套件儲存庫
- https://lyonsden.net/installing-amiga-os-3-1-4-part-5-finishing-touches/: 詳細說明如何讓 AmigaOS 看起來更漂亮的指南
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.