OpenEmu 是 macOS 上的模擬器,支援的遊戲平台不少,使用簡單,Rom 和存檔的管理功能極佳,容易上手,堪稱是 macOS 上最強的模擬器,可在 OpenEmu 官網下載安裝。然而這款模擬器預設不能玩 Sega DreamCast(以下稱 DC) 的遊戲,不過 OpenEmu 在 Github 上的專案原始碼中,卻有 Reicast 的 Core ,這意味 OpenEmu 應該是可以使用 Reicast Core 運行 Sega DC 的遊戲才對。
研究了一下,OpenEmu 是開放框架,要讓 OpenEmu 能玩上某一款主機遊戲,只要加掛兩個支援 OpenEmu 的元件檔案:插件(PlugIn)與核心(Core)。官網在 WIKI 中提到 DreamCast 屬於「Work-In-Progress ports」項目,所以在正式釋出的版本中,並未包含 DC 的 PlugIn 與 Core 檔案,所以才不能玩。既然如此,只能上網找找看了。
可惜天不從人願,找了半天始終找不到這兩個檔案,只好從原始碼下手了。而 Github 上的專案 WIKI 有編譯 OpemEmu 主程式的教學,但是編譯 Core 教學從 2014 年至今都沒再補完,網路上也沒有前人的心得,只好自己踹踹看。
踹了一整天終於成功了。從結果論來說,操作不難,步驟不多,但說真的如果沒人教你,保證一定是不斷失敗鬼打牆 LOOP ,過程中還真是 TMD 痛苦,所以才決定寫這篇文章紀錄一下,免得哪天又忘記。
零、準備工作
- 一台具備網際網路連線,且運作 macOS 的電腦:本文以目前的 macOS 10.14.4 為例。
- 已安裝 Xcode:本文以最新的 Xcode 10.2.1 為例。
- 已安裝 GitHub 桌面應用(下載),並且登入 GitHub 帳號。(沒有帳號的話,免費註冊一個)
- 硬碟空間剩餘 10 GB 以上。
- DreamCast 的 BIOS 檔案:dc_bios.bin(md5: e10c53c2f8b90bab96ead2d368858623)與 dc_flash.bin(md5: 74e3f69c2bb92bc1fc5d9a53dcf6ffe2)。
- DreamCast 遊戲映像檔:我用的是莎木 I。(以前寫的介紹文)
零、檢查工作
檢查電腦與 GitHub 的 SSH 連線是否正常。開啟終端機,執行指令:
ssh -T git@github.com
如果回應「Hi xxxxx! You've successfully authenticated, but GitHub does not provide shell access.」表示可以繼續以下步驟。若出現「permission denied」之類的,那麼得必須先處理掉,(見本文末最下方「補充:解決 GitHub 的 SSH 連線問題」),否則接下來的步驟很快就會卡關。
一、下載並編譯 OpenEmu 原始碼:操作過程參考 WIKI。
1. 下載並安裝 Xcode(準備工作)
2. 取得 OpenEmu 的原始碼
有兩種方式,選擇其中任何一種即可:
方法(1):使用 Github 桌面工具下載:
先將 Github 桌面工具安裝妥當之後,用瀏覽器開啟 OpenEmu 原始碼網頁,點擊綠色的 Clone or Downloaded,再點擊「Open in Desktop」,
(註:如果點擊網頁不會自動開啟 Github 桌面工具,請在網頁上登入 Github)
然後選擇目錄
原始碼容量很大,有 2~5.x GB,如果沒有,表示檢查工作 Github 的 SSH 連線有問題沒搞定(參考「補充:解決 GitHub 的 SSH 連線問題」來解決)。
方法(2):使用 git 指令
開啟終端機視窗,執行
$ git clone https://github.com/OpenEmu/OpenEmu.git
$ cd OpenEmu
$ git submodule update --init --recursive
原始碼容量很大,有 2~5.x GB,如果沒有,表示檢查工作 Github 的 SSH 連線有問題沒搞定(參考「補充:解決 GitHub 的 SSH 連線問題」來解決)。
3. Xcode 開啟 「OpenEmu.xcworkspace」。
4. 確認編譯的對象是 OpenEmu -> My Mac
專案的部分,依下圖點擊選擇紅框的位置
這張項目則是支援的插件列表。點擊列表下面的 + 號
然後選擇加入 Products 內的插件(*.oesystemplugin)。可以發現插件中有一個 Dreamcast.oesystemplugin ,就是上面提到的 DC 插件。
功能表 Product -> Build For -> Profiling
大約幾分鐘之後就編譯完成了。
在編譯輸出的「DerivedData/OpenEmu/Build/Products/Release」目錄下,落落長一段。
裡面有兩個最重要的東西:Dreamcast.oesystemplugin 和 OpenEmuBase.framework。
Dreamcast.oesystemplugin 就是 DC 的插件(PlugIn)。還少一個 DC 的核心(Core)檔案。我們需要 OpenEmuBase.framework 來編譯核心。
5. Xcode 關閉 OpenEmu 專案。把上個步驟產生的 OpenEmuBase.framework 複製到 Reicast 目錄下。
6. Xcode 開啟 Reicast.xcodeproj
把剛剛複製過來的 OpenEmuBase.framework 拉進專案內
7. 功能表 Product -> Build For -> Profiling
如果一切順利,編譯輸出的 DerivedData/Reicast/Build/Products/Release 就會有我們要的 DC 核心檔案 Reicast.oecoreplugin 。
8. 部署 DC 的插件、核心、BIOS 檔案:
DC 插件檔案 Dreamcast.oesystemplugin 放到 OpenEmu 的主程式內(OpenEmu.app/Contents/PlugIns/Systems)
DC 核心檔案 Reicast.oecoreplugin 放到 [Home]/Library/Application\ Support/OpenEmu/Cores 目錄下
DC 的 BIOS 檔案(dc_bios.bin 與 dc_flash.bin)放到 [Home]/Library/Application\ Support/OpenEmu/BIOS 目錄下
9. 進入 OpenEmu 之後,編輯左側的模擬器清單,勾選 Dreamcast。
最後,終於可以用 OpenEmu 玩 DreamCast 遊戲啦~
補充:解決 GitHub 的 SSH 連線問題(來源參考)。
如果 ssh -T git@github.com 指令沒有出現 「Hi xxxxx! You've successfully authenticated, but GitHub does not provide shell access.」的訊息,依照以下方式修正:
0.(可選)如果出現 timeout 的訊息,則編輯 ~/.ssh/config 檔案。加上底下三行
Host github.com
Hostname ssh.github.com
Port 443
1. 產生一個新的 SSH Key
ssh-keygen -t rsa -b 4096 -C "xxxxx@example.com"
E-mail 好像可以隨意填。後面幾個問答,一直按 Enter 即可。
2. 編輯 ~/.ssh/config,內容如下:
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
3. 執行指令
ssh-add -K ~/.ssh/id_rsa
4. 執行 pbcopy < ~/.ssh/id_rsa.pub
意思是將 key 內容複製到剪貼簿。
5. 將 key 新增到 GitHub 帳號:點擊帳號下方 Settings
點擊左邊功能區 SSH and GPG keys
點擊 New SSH key
然後在 key 貼上剪貼簿的內容,Title 隨便取(可以用自己的電腦名稱,表示哪一台電腦產生的 key)。
最後點擊 Add SSH key
最後會詢問 GitHub 的密碼進行確認
輸入正確的密碼。完成後再執行 ssh -T git@github.com 確認 SSH 是否成功。
2021.05.22 補充:底下留言中,有網友提到 OpenEmu 執行超任中文化遊戲會出現亂碼的問題,並提供網路找到的解法,需要修改 SNES9x 的 Core 原始碼後重新編譯。我自己是找了幾個中文化的 SFC ROM 檔:最終幻想(舊名太空戰士)5.6 繁體中文、聖火降魔錄3.4.5,結果只有最終幻想 6 繁體中文版無法執行,會出現黑畫面,其他的中文化 SFC ROM 倒是沒什麼亂碼的問題。
接著我依照網友的方法,自行重新編譯了一個 SNES9x Core 檔,最終幻想 6 繁體中文也能用 OpenEmu 執行了。
編譯 SNES9x 的核心檔案(SNES9x.oecoreplugin)和上述文章中編譯 DreamCast 的核心檔(Reicast.oecoreplugin)操作方式都一樣,快速帶一下做法:
1. 將編譯 OpeEmu 時得到的 OpenEmuBase.framework 複製到原始碼 OpenEmu\SNES9x 目錄下。
2. 使用 Xcode 開啟原始碼 OpenEmu\SNES9x\SNES9x.xcodeproj 專案檔
3. 將 OpenEmuBase.framework 拉到專案內
以上三個操作細節,可參考上述文章編譯 Reicast.oecoreplugin 內容。
4. 修改原始碼:依下圖的操作流程,找到 SNESGameCore.mm 原始碼,將 Settings.BlockInvalidVRAMAccessMaster = true 改為 false(大約在第 120 行的位置)。
5. 編譯核心:Xcode 的功能表 Product -> Build For -> Profiling
順利的話,最終會得到 SNES9x.oecoreplugin 這個檔案。
6. 把 SNES9x.oecoreplugin 複製到 ~/Library/Application\ Support/OpenEmu/Cores 底下,蓋掉原來的 SNES9x.oecoreplugin 即可(記得將原來的 SNES9x.oecoreplugin 備份)。
留言列表