Nintendo Game & Watch 刷機完全攻略

2022/02/09 重大更新,解決方式在最下方。

先前為了要刷這台機器,在網路上爬了很多教學,但每個教學步驟多少有些小問題,不是針對高手省略了一些過程,要不就是部分指令有出錯,所以我在這篇整合了我自己刷下來還算沒什麼問題的步驟給大家參考。首先先準備一台樹莓派 ( 以下簡稱 Pi ),基本上所有型號都行,這邊我是使用 3B+ 來刷機。接著安裝 Raspberry Pi OS,安裝方式如下:

到官網下載 Raspberry Pi Imager 後執行安裝,網址為:https://www.raspberrypi.com/software/

將一張記憶卡 ( 16GB 以上 ) 插入電腦,執行 Raspberry Pi Imager

  1. 選擇 Raspberry Pi OS (other)>Raspberry Pi OS Full (32-bit)
    # 安裝完整版在執行 upgrade 會耗費較多時間,但對不熟悉 Linux指令的人最保險。
  2. 選擇記憶卡位置
  3. 寫入

待寫入完成即可將記憶卡裝入 Pi 開機進行刷機程序。

▲將 Raspberry Pi OS 寫入記憶卡。

本次刷機作業是在 Windows 系統下操作,所以必須要先開啟 Pi 的 SSH 連線,另外 Windows 端也要安裝 SSH 連線工具和 FTP 傳輸工具,這邊是使用 PuTTY 和Filezilla。

對應接腳:
Pi GPIO 24(pin18)←→ Game & Watch 2(SWDIO)
Pi GPIO 25(pin22)←→ Game & Watch 5(SWCLK)
GND(pin39)←→ Game & Watch 3(GND)

▲Mario 對應接腳。

▲Zelda 對應接腳。

正式刷機程序開始:( 以下刷機程序無更換記憶體,Mario 為 1MB,Zelda 為 4MB )

《第一步》
先將 Pi 接上螢幕、網路線、鍵盤、滑鼠後開機,待開機完成後輸入使用者及密碼,原始使用者名稱為 pi,密碼為 raspberry,開啟桌面的 Terminal( 指令系統 )後輸入:

  1. cd /boot
  2. sudo touch ssh
  3. ifconfig
  4. sudo reboot

# 此步驟為將 Pi 的 SSH 開啟以供 Windows 連線,並且使用 ifconfig 確認 Pi 抓取的 IP 位置,最後重新啟動系統讓 SSH 啟用,這樣 Pi 端的部分就設定完成了。

▲開啟 SSH 並確認 IP 位置。

▲在 PuTTY 輸入 IP,並勾選 SSH 開啟連線。

▲在 Filezilla 的協定必須選擇 SFTP-SSH File Transfer Protocol。

《第二步》
將 Pi 的 GPIO 3 個腳位分別對應接上並且移除 Game & Watch 電池接點,刷機全程使用外部電源線。Windows 端開啟 PuTTY 輸入 Pi 的 IP、帳號、密碼連線,接著更新系統,安裝刷機必要程式,將主機解鎖備份韌體:( 注意!所有刷機動作皆在 Game & Watch 關機的狀況下完成,除非有特別提醒要開機才能繼續動作 )

  1. sudo apt update
  2. sudo apt upgrade
  3. wget https://github.com/xpack-dev-tools/arm-none-eabi-gcc-xpack/releases/download/v10.2.1-1.1/xpack-arm-none-eabi-gcc-10.2.1-1.1-linux-arm.tar.gz
  4. wget https://github.com/xpack-dev-tools/openocd-xpack/releases/download/v0.11.0-1/xpack-openocd-0.11.0-1-linux-arm.tar.gz
    # 此版的 openocd 可以由 patch openocd 取代。
  5. mkdir -p ~/opt
  6. cd ~/opt
  7. tar xvf ../xpack-arm-none-eabi-gcc-10.2.1-1.1-linux-arm.tar.gz xpack-arm-none-eabi-gcc-10.2.1-1.1
  8. tar xvf ../xpack-openocd-0.11.0-1-linux-arm.tar.gz
  9. chmod -R -w xpack-openocd-0.11.0-1/
  10. export PATH=$PATH:/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/
  11. sudo apt-get install git ( Full 版免裝 )
  12. git clone https://github.com/ghidraninja/game-and-watch-backup.git
  13. export OPENOCD="/home/pi/opt/xpack-openocd-0.11.0-1/bin/openocd"
  14. sudo apt-get install binutils-arm-none-eabi python3 libftdi1
  15. cd game-and-watch-backup
  16. ./1_sanity_check.sh rpi mario
    # 如果 openocd 有正確執行,那麼執行後會有 Looks good! 訊息出現,此步驟如果失敗請往回檢查,否則接下來都會無法進行。
  17. ./2_backup_flash.sh rpi mario
    # 執行後會提醒你需要在時鐘畫面,這時將 Game & Watch 開機後再按下 Enter 繼續。
  18. ./3_backup_internal_flash.sh rpi mario
    # 備份中途會請你將主機電源線移除再接上開機 ( 建議 5 秒以上再接上
    ),確認畫面出現藍屏再按下 Enter 繼續,如果沒有藍色畫面,可按下 Game & Watch 主機上的 TIME 鍵再重開,直到出現藍色畫面再繼續。
  19. ./4_unlock_device.sh rpi mario
    # 解鎖你的 Game & Watch 以便刷入自製軟件。
  20. ./5_restore.sh rpi mario
    # 還原成功後將主機電源線移除再接上開機即會恢復到原始 Mario 韌體。

# 16.~20. 的 rpi 為連接的設備,mario 為要刷的主機,如果是 zelda 機就要將 mario 改為 zelda,執行指令前也可以輸入 ls ( 功能同 DOS 的 dir ) 檢查目前位置下是否有 16.~20. 的文件,確保你在正確的目錄中。此階段完成後在 game-and-watch-backup/backups 目錄下可以得到 flash_backup_mario.bin、internal_flash_backup_mario.bin、itcm_backup_mario.bin 三個檔案。非常重要!請使用 Filezilla 備份到電腦存檔,要是在往後的刷機過程中發生失誤可以執行 20. 還原。

▲務必確認 openocd 有正確執行,並且有 Looks good! 訊息出現。

《第三步》
安裝 Retro-Go 模擬器:( 第 14. 請將 Game & Watch 開機 )

  1. cd ..
  2. git clone https://github.com/ghidraninja/game-and-watch-flashloader.git
    # 確認在 opt 目錄中。
  3. cd game-and-watch-flashloader
  4. make GCC_PATH=/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/
  5. cd ..
  6. git clone --recurse-submodules https://github.com/kbeckmann/game-and-watch-retro-go
    # 確認在 opt 目錄中。
  7. 使用 Filezilla 將遊戲的 ROM 檔放到 /home/pi/opt/game-and-watch-retro-go/roms/xxx/ 下,在此我是放 Game & Watch
    的遊戲,所以放置路徑為:/home/pi/opt/game-and-watch-retro-go/roms/gw/
  8. cd game-and-watch-retro-go
  9. sudo apt-get install python3-pip ( Full 版免裝 )
  10. sudo apt install python3-pil ( Full 版免裝 )
    # 在後面刷圖形選單介面的時候會用到,沒裝到圖片無法解析。
  11. python3 -m pip install -r requirements.txt
  12. export ADAPTER=rpi
  13. export OPENOCD="/home/pi/opt/xpack-openocd-0.11.0-1/bin/openocd"
  14. make GCC_PATH=/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/ COMPRESS=lzma GNW_TARGET=mario flash

# 如果刷的是 zelda 機,請將 14. 的 mario flash 改為 zelda flash。

注意:往後 Pi 只要有重新開機過,就一定要再確認 arm-none-eabi 與 openocd 有啟動,且刷機使用方式為 rpi。

▲ROM 檔放置位置。

《第四步》
安裝圖形選單介面:( 第 10. 請將 Game & Watch 開機 )

  1. cd game-and-watch-retro-go
  2. git remote add olderzeus https://github.com/olderzeus/game-and-watch-retro-go.git
  3. git fetch olderzeus
  4. git checkout NewUI
  5. git submodule update
  6. make clean
  7. git pull
  8. chmod a+x scripts/*.sh
  9. 使用 Filezilla 將與 ROM 檔同名的圖片檔放置在相同的位置下,可使用 png 或 jpg,尺寸為 128x96 Pixel。
  10. make GCC_PATH=/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/ COVERFLOW=1 COMPRESS=lzma flash_all

# 上述所有 make GCC_PATH 步驟如果刷不過,請移除電源線後再接上,並且按住主機電源鍵不放再執行,失敗請不要放棄,多試幾次就能成功,另外 make GCC_PATH 這個部份是在 Pi 上面做打包的動作然後再寫入 Flash 內,會依照你放的資料多寡,打包及寫入時間會越來越長,之後如果有新增或是刪減 ROM,就需要重新做打包的動作,請回到 7. make clean 後再做一次 make GCC_PATH。

▲圖檔名字要與 ROM 檔完全相同。

《第五步》
刷中文圖形選單介面:( 此步驟無必要性,依個人需求使用 )

在執行第四步驟的 make GCC_PATH 中加入 CODEPAGE=950 即可。

範例:

  1. make GCC_PATH=/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/ COVERFLOW=1 CODEPAGE=950 COMPRESS=lzma flash_all

# 如有更換較大的 Flash 如 16MB或 64MB 可下以下指令:( 可再搭配中文選單指令使用 )

  1. make GCC_PATH=/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/ COVERFLOW=1 COMPRESS=lzma EXTFLASH_SIZE_MB=16 flash_all
  2. make GCC_PATH=/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/ COVERFLOW=1 COMPRESS=lzma EXTFLASH_SIZE_MB=64 flash_all

# 在執行 make GCC_PATH 前,可先下 make romdef 產生每個模擬器的 json,可開啟編輯將遊戲顯示名稱改為中文 ( 此步驟需與中文圖形介面一起使用 ),我個人是覺得這個步驟沒什麼必要,除非刷完以後內容就不會在變動了。

▲修改顯示名稱為中文名。

▲最終刷機成果。

▲特別是原始的 Game & Watch LCD Game 系列,原汁原味,一定要玩。

# 製作 Game & Watch LCD Game 的方式請參考 LCD Game Shrinker 這篇文章,裡面有非常詳細的說明與步驟。

▲最終刷機成果示範影片。

資料參考來源:
olderzeus/game-and-watch-retro-go

後記:
這台機器相信很多朋友都想給它刷下去爽玩,讓它成為正港的 Game & Watch。老實說,知道方法後刷機真的不難,只要有正確的步驟再加上一點點的勇氣,相信大家都能成功的。如果真的不敢嘗試的話,建議還是請專業的朋友幫忙協助處理喔。

2022/02/09 重大更新:
由於 NewUI 於日前有做重大更新,將原本的 BANK 由 128K 改為 256K,所以會造成在第四步刷圖形介面會有問題,請在 make GCC_PATH 中再加入 BIG_BANK=0 即可正常刷入。

評論:

  1. 大推優質教學文,跟著刷機一點都不難!

  2. 請問一下,你在make game-and-watch-flashloader的時候有沒有遇過以下error?有的話請問一下如何解決?謝謝。

    [ CC ] main.o
    Segmentation fault
    make: *** [Makefile:233: build/main.o] Error 139

  3. 7. tar xvf ../xpack-arm-none-eabi-gcc-10.2.1-1.1-linux-arm.tar.gz
    xpack-arm-none-eabi-gcc-10.2.1-1.1
    發生
    -bash: xpack-arm-none-eabi-gcc-10.2.1-1.1 指令找不到
    要如何解決

    • 拷貝時有時會有問題,請注意斷點,最好是自己打過一次
      tar xvf ../xpack-arm-none-eabi-gcc-10.2.1-1.1-linux-arm.tar.gz xpack-arm-none-eabi-gcc-10.2.1-1.1

  4. 請問一下記憶體是先破解再換上還是一開始便換上再進行以上步驟?

發佈留言

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