前前後後搞了大概一個多月,最後一步的雙系統走的好辛苦,因為我刷機硬體是樹莓派 3B+,網路上找到的教學總是遺漏了很多關鍵的部分,但也憑著不放棄的精神總算把它給搞定了。其實有沒有雙系統根本就無所謂,畢竟要玩遊戲的話,一開機直接就切到 RETRO GO 去玩了,只是覺得不弄完整一點似乎有些遺憾。
注意!刷機還是有一定程度的風險,這裡提供的是一個我跑過確定沒有問題的流程,不一定適合所有未知變數。此教學文是使用更換 64MB Flash 後的薩爾達主機操作,其餘容量請參考最下方的資料來源,畢竟在未更換 Flash 的狀況下製作雙系統,就幾乎無法再放得下更多的遊戲,建議如果沒有辦法更換的朋友可以選擇直接刷機就好。這篇算是 Nintendo Game & Watch 刷機完全攻略的延伸,若是沒有看過的朋友,建議可以先去看看,這樣會比較有概念。
刷雙系統重點為:Patch openocd、SWAP、keystone-engine,另外前篇是使用 rpi 刷機,後來發現改用 stlink 速度可以提升兩倍以上,而且還比較穩定,所以建議想刷大容量的朋友還是去買一個 stlink 吧。
▲雙系統刷機成果示範影片。
《第一步》
安裝 Patch openocd。(時程約 20-30 分鐘)
- git clone https://github.com/kbeckmann/ubuntu-openocd-git-builder
- cd ubuntu-openocd-git-builder/
- ./build.sh
- sudo dpkg -i openocd-git_*_armhf.deb
- sudo apt-get -y -f install
- export OPENOCD="/opt/openocd-git/bin/openocd"
# 爾後需要開啟 openocd 時,就使用這個路徑。
《第二步》
調整 SWAP 交換空間容量至少 1GB 以上,否則在安裝 keystone-engine 時,Pi 3B+ 會因記憶體不足而導致崩潰。
- sudo dphys-swapfile swapoff
# 停用 SWAP。 - sudo nano /etc/dphys-swapfile
# 使用 nano 修改文件。 - CONF_SWAPSIZE=100 > CONF_SWAPSIZE=1024
# 將 SWAPSIZE 修改為至少 1GB。 - 按下 Ctrl+X,選 Y 按 Enter 保存退出
- sudo dphys-swapfile setup
sudo dphys-swapfile swapon
sudo reboot
#設定好 SWAP 後並重啟系統。
《第三步》
安裝 cmake。cmake 是構建 keystone-engine 所必需的。
- sudo apt update
- sudo apt install -y cmake
《第四步》
手動安裝 keystone-engine。因為 get 封包文件的問題,會導致接下來在執行第五步的 pip3 install -r requirements.txt 時,會有 keystone-engine 裝不起來的狀況發生,可能是我的刷機設備及 OS 的問題吧,所以這邊直接使用手動安裝。(時程約 20-30 分鐘)
- wget https://files.pythonhosted.org/packages/0a/65/3a2e7e55cc1db188869bbbacee60036828330e0ce57fc5f05a3167ab4b4d/keystone-engine-0.9.2.tar.gz
- tar -zxvf keystone-engine-0.9.2.tar.gz
- obj_dir = os.path.join(BUILD_DIR, 'llvm', 'lib') > obj_dir = os.path.join(BUILD_DIR, 'llvm', 'lib', 'arm-linux-gnueabihf')
# 編輯 setup.py,修改第 114 行內容如上,檔案在pi/keystone-engine-0.9.2/ 資料夾內。 - tar czvf keystone-engine-0.9.2mod.tar.gz keystone-engine-0.9.2
- pip install keystone-engine-0.9.2mod.tar.gz
《第五步》
安裝 Game & Watch Patch。內建是使用 stlink 刷機, 如果有需要也能在指令中更換成 rpi(ADAPTER=rpi)。
- git clone https://github.com/BrianPugh/game-and-watch-patch
# 確認在 opt 目錄中。 - cd game-and-watch-patch
- 將備份的 flash_backup_zelda.bin 與 internal_flash_backup_zelda.bin 兩個檔案放在 game-and-watch-patch 的根目錄下
- pip3 install -r requirements.txt
- make download_sdk
- make clean
- make PATCH_PARAMS="--device=zelda" LARGE_FLASH=1 flash_patched
# 完成後即可看見主機螢幕恢復成薩爾達系統。
《第六步》
安裝 RETRO GO。
- cd ..
- cd game-and-watch-retro-go
- make clean
- make -j8 EXTFLASH_SIZE_MB=60 EXTFLASH_OFFSET=4194304 INTFLASH_BANK=2 flash
注意!若需要顯示遊戲圖片,請在執行 4. 的時候加入 COVERFLOW=1,否則刷完是沒有遊戲圖片的,沒有圖片的好處是可以再放更多的遊戲。需要中文介面也一併加上 CODEPAGE=950。
▲打包完成後請留意 Flash 空間,若超過會無法寫入,必須重新打包。
燒錄完成後重新開機即可進入原生薩爾達系統,按下 GAME + 按鍵左,即可進入 RETRO GO 系統。爾後要增加或是減少遊戲,也只要執行第六步刷入 BANK2 即可。
刷瑪利歐機的雙系統在參考資料來源中也有詳細說明,這裡就不再重複了。另外,檔案一多相對寫入的時間也會變得非常的漫長,建議先放幾個進去測試,確定沒問題後再全部一次寫入。60MB 完全使用,rpi 寫入時程約 150 分鐘(含打包),若是用 stlink 則 60 分鐘內可完成(含打包)。
▲最後來看看 64MB 到底能裝下多少遊戲吧。
資料參考來源:
game-and-watch-patch
Game & Watch的存檔有辦法匯出嗎?
抱歉,沒有研究喔
STLINK 是直接插到 rpi 上 ?還是 windows pc?
RPI