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」,

    undefined

    (註:如果點擊網頁不會自動開啟 Github 桌面工具,請在網頁上登入 Github)

    然後選擇目錄 

    undefined

    原始碼容量很大,有 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」。

    undefined

    4. 確認編譯的對象是 OpenEmu -> My Mac

    專案的部分,依下圖點擊選擇紅框的位置

    1556996978-3274782099_n.png

    這張項目則是支援的插件列表。點擊列表下面的 + 號

    然後選擇加入 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。

    貼上的影像_2022_8_13_下午11_32.png

    最後,終於可以用 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

    Settings icon in the user bar

    點擊左邊功能區 SSH and GPG keys

    Authentication keys

    點擊 New SSH key

    SSH Key button

    然後在 key 貼上剪貼簿的內容,Title 隨便取(可以用自己的電腦名稱,表示哪一台電腦產生的 key)。

    The key field

    最後點擊 Add SSH key

    The Add key button

    最後會詢問 GitHub 的密碼進行確認

    Sudo mode dialog

    輸入正確的密碼。完成後再執行 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 執行了。
    截圖 2021-05-23 上午1.04.31.png

    編譯 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 行的位置)。

    貼上的影像_2021_5_23_上午1_46.png

    5. 編譯核心:Xcode 的功能表 Product -> Build For -> Profiling

    順利的話,最終會得到 SNES9x.oecoreplugin 這個檔案。

    截圖_2021-05-23_上午1_56_47.png

    6. 把 SNES9x.oecoreplugin 複製到 ~/Library/Application\ Support/OpenEmu/Cores 底下,蓋掉原來的 SNES9x.oecoreplugin 即可(記得將原來的 SNES9x.oecoreplugin 備份)。

    10 Comments

    1. 補充相關討論:
      https://ainlee.blogspot.com/2019/05/sfc.html
      版主回覆:(05/19/2021 01:24:59 AM)
      近日我有別的事情在搞,
      並且手邊沒有中文化的 SFC 遊戲 ROM 來重建您的問題,
      所以以下您可能要自行踹踹看了。
      OpenCore 針對 SFC 並沒有可調整的選項,
      估計要從原始碼下手改了
      我猜是這樣
      照文章的做法把 OpenEmu 原始碼全部下載之後,
      找一下 SNESGameCore.mm 這個檔案
      差不多在第 120 行
      Settings.BlockInvalidVRAMAccessMaster = true 改為 false
      然後照文章「編譯 Core 核心」的作法,
      編譯 SNES9x-Core 試試看
      若沒錯誤的話,
      估計最後應該會產出 SNES9x.oecoreplugin 這個檔案,
      再把它放到 ~/Library/Application\ Support/OpenEmu/Cores 試試
      至於細節如何操作,
      或是過程中可能會遇到什麼問題,
      這我就不清楚了,近日也沒什麼空閒去踹,
      您有興趣就踹踹看囉

    2. 好喔!
      謝謝抽空回應,我試著做做看
      版主回覆:(05/23/2021 01:17:57 AM)
      哈囉~由於近日疫情突然爆開,在家的時間變多了,所以就有時間嘗試編譯了SFC的 Core 檔案(SNES9x.oecoreplugin),放在這裡
      http://u.pc.cd/VK6italK
      我找到最終幻想6的繁體中文化版,試了一下可以跑(用未修改的 Core 是不能運行的)。如果您不想自行編譯的話,可以直接拿我編譯好的試試看,下載.zip並解壓縮之後,把它放在 ~/Library/Application\ Support/OpenEmu/Cores 底下試試看(本來的 SNES9x.oecoreplugin 要記得備份)

    3. 請問可以再拿一次編譯過的SFC Core檔案嗎?
      網址裡面沒有了~
      因為要玩SFC的聖火降魔錄-紋章之謎中文版,遊戲也會亂碼無法顯示。
      謝謝您,再麻煩了!
      版主回覆:(05/15/2022 04:02:58 PM)
      我補上去了
      http://u.pc.cd/VK6italK
      試試看囉

    4. 不好意思,想再請教一下,放進去新的core之後,
      開啟遊戲會說:因為是網路下載來的檔案,無法判斷是不是惡意軟體,這個要怎麼解決呢?
      版主回覆:(05/16/2022 02:06:36 AM)
      1. 開啟終端機,輸入指令 sudo spctl –master-disable
      2. 開啟系統偏好設定 – 安全性與隱私權 – 一般,看看「允許從以下來源下載的 App」是否能選擇「任何來源」。
      3. 重新執行 OpenEmu 看看

    5. 你好,如果直接將Reicast.oecoreplugin, Dreamcast.oesystemplugin這兩個檔複制到指定位置就可以玩dc的遊戲了嗎?
      請問可以分享這2個檔嗎?感謝!
      版主回覆:(08/13/2022 11:51:48 PM)
      是的,將這兩個檔案放到對應的位置,並且在左側模擬器清單勾選 Dreamcast 就可以了。已將檔案放在 http://u.pc.cd/UAzctalK
      要提醒的是分享的檔案僅支援 Intel x86 CPU 的 Mac 電腦,不支援 Apple Silicon M1/M2 。

    6. 我用的是M1,實測後是可以的,玩得到dreamcast的遊戲,謝謝!
      版主回覆:(08/16/2022 11:24:48 AM)
      原來 M1 是可以用啊~檔案是三年前做的,當初在編譯的時候只有 x86 可選,所以我以為 M1 應該不能用,現在知道是可以的。

    7. 請問還有研究在openemu裡面玩ps2或wii嗎?
      好像看到編程時有“playstation2.oesystemplugin““的選項
      openmu真的很強,很多機種的遊戲都能玩
      版主回覆:(08/17/2022 09:44:38 AM)
      PS2 先前有試過,編譯出來之後,執行時是黑畫面不會動…
      Wii 印象中沒試過,不過和 Wii 相近的 GameCube 有試過,跑薩爾達-風之律動可以玩但卡卡的。
      這些都是兩三年前還是舊電腦時試的。後來這些 Core 都有更新,不過我沒再試了。
      OpenEmu 的確好用,但是模擬 2000 年後的主機效果都不是很好,有更好的選擇,
      macOS 要玩 PS2 的話建議可以用 pcsx2 的 macOS 版,
      https://github.com/tellowkrinkle/pcsx2/releases
      macOS 玩 DC 建議用 Redream
      https://redream.io/download

    8. 您好 我也正在處理中文亂碼的問題
      想請問我的OpenEmu安裝好之後並沒有以下路徑~/Library/Application\ Support/OpenEmu/Cores
      這樣子要怎麼處理呢?我的版本是v2.3.3
      版主回覆:(05/11/2023 12:42:05 AM)
      安裝好第一次執行時,會自動進入精靈設定模式,按指示做完,就會出現該目錄了。

    發佈回覆給「MX」的留言 取消回覆

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *