Zelda Game & Watch Dual System 薩爾達機刷雙系統完全攻略

前前後後搞了大概一個多月,最後一步的雙系統走的好辛苦,因為我刷機硬體是樹莓派 3B+,網路上找到的教學總是遺漏了很多關鍵的部分,但也憑著不放棄的精神總算把它給搞定了。其實有沒有雙系統根本就無所謂,畢竟要玩遊戲的話,一開機直接就切到 RETRO GO 去玩了,只是覺得不弄完整一點似乎有些遺憾。

注意!刷機還是有一定程度的風險,這裡提供的是一個我跑過確定沒有問題的流程,不一定適合所有未知變數。此教學文是使用更換 64MB Flash 後的薩爾達主機操作,其餘容量請參考最下方的資料來源,畢竟在未更換 Flash 的狀況下製作雙系統,就幾乎無法再放得下更多的遊戲,建議如果沒有辦法更換的朋友可以選擇直接刷機就好。這篇算是 Nintendo Game & Watch 刷機完全攻略的延伸,若是沒有看過的朋友,建議可以先去看看,這樣會比較有概念。

刷雙系統重點為:Patch openocdSWAPkeystone-engine,另外前篇是使用 rpi 刷機,後來發現改用 stlink 速度可以提升兩倍以上,而且還比較穩定,所以建議想刷大容量的朋友還是去買一個 stlink 吧。

▲雙系統刷機成果示範影片。

《第一步》
安裝 Patch openocd。(時程約 20-30 分鐘)
  1. git clone https://github.com/kbeckmann/ubuntu-openocd-git-builder

  2. cd ubuntu-openocd-git-builder/

  3. ./build.sh

  4. sudo dpkg -i openocd-git_*_armhf.deb

  5. sudo apt-get -y -f install

  6. export OPENOCD="/opt/openocd-git/bin/openocd"
    # 爾後需要開啟 openocd 時,就使用這個路徑
《第二步》
調整 SWAP 交換空間容量至少 1GB 以上,否則在安裝 keystone-engine 時,Pi 3B+ 會因記憶體不足而導致崩潰。
  1. sudo dphys-swapfile swapoff
    # 停用 SWAP。

  2. sudo nano /etc/dphys-swapfile
    # 使用 nano 修改文件。

  3. CONF_SWAPSIZE=100  >  CONF_SWAPSIZE=1024
    # 將 SWAPSIZE 修改為至少 1GB。

  4. 按下 Ctrl+X,選 Y 按 Enter 保存退出

  5. sudo dphys-swapfile setup
    sudo dphys-swapfile swapon
    sudo reboot
    #設定好 SWAP 後並重啟系統。
《第三步》
安裝 cmake。cmake 是構建 keystone-engine 所必需的。
  1. sudo apt update

  2. sudo apt install -y cmake
《第四步》
手動安裝 keystone-engine。因為 get 封包文件的問題,會導致接下來在執行第五步的 pip3 install -r requirements.txt 時,會有 keystone-engine 裝不起來的狀況發生,可能是我的刷機設備及 OS 的問題吧,所以這邊直接使用手動安裝。(時程約 20-30 分鐘)
  1. wget https://files.pythonhosted.org/packages/0a/65/3a2e7e55cc1db188869bbbacee60036828330e0ce57fc5f05a3167ab4b4d/keystone-engine-0.9.2.tar.gz

  2. tar -zxvf keystone-engine-0.9.2.tar.gz

  3. 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/ 資料夾內。

  4. tar czvf keystone-engine-0.9.2mod.tar.gz keystone-engine-0.9.2

  5. pip install keystone-engine-0.9.2mod.tar.gz
《第五步》
安裝 Game & Watch Patch。內建是使用 stlink 刷機, 如果有需要也能在指令中更換成 rpi(ADAPTER=rpi)。
  1. git clone https://github.com/BrianPugh/game-and-watch-patch
    # 確認在 opt 目錄中。

  2. cd game-and-watch-patch

  3. 將備份的 flash_backup_zelda.bin 與 internal_flash_backup_zelda.bin 兩個檔案放在 game-and-watch-patch 的根目錄下

  4. pip3 install -r requirements.txt

  5. make download_sdk

  6. make clean

  7. make PATCH_PARAMS="--device=zelda" LARGE_FLASH=1 flash_patched
    # 完成後即可看見主機螢幕恢復成薩爾達系統。
    # 如果刷機提示無 gcc 時,也要記得再啟動一次。
    export PATH=$PATH:/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/

《第六步》
安裝 RETRO GO。
  1. cd ..

  2. cd game-and-watch-retro-go

  3. make clean

  4. make -j8 EXTFLASH_SIZE_MB=60 EXTFLASH_OFFSET=4194304 INTFLASH_BANK=2 flash
注意!若需要顯示遊戲圖片,請在執行 4. 的時候加入 COVERFLOW=1,否則刷完是沒有遊戲圖片的,沒有圖片的好處是可以再放更多的遊戲。需要中文介面也一併加上 CODEPAGE=950

範例:
  • make -j8 EXTFLASH_SIZE_MB=60 EXTFLASH_OFFSET=4194304 COVERFLOW=1 CODEPAGE=950 INTFLASH_BANK=2 flash
▲打包完成後請留意 Flash 空間,若超過會無法寫入,必須重新打包。

燒錄完成後重新開機即可進入原生薩爾達系統,按下 GAME + 按鍵左,即可進入 RETRO GO 系統。爾後要增加或是減少遊戲,也只要執行第六步刷入 BANK2 即可。

刷瑪利歐機的雙系統在參考資料來源中也有詳細說明,這裡就不再重複了。另外,檔案一多相對寫入的時間也會變得非常的漫長,建議先放幾個進去測試,確定沒問題後再全部一次寫入。60MB 完全使用,rpi 寫入時程約 150 分鐘(含打包),若是用 stlink 則 60 分鐘內可完成(含打包)。

2022/03/07 補充:
感謝網友 123 說明,寫入速度慢是因為 openocd 的 rpi cfg 沒寫好,打開 scrpits/interface_rpi.cfg 在最後添加一行 adapter speed 1500 就可以了。


▲最後我們來看看 64MB 到底能裝下多少遊戲吧。

資料參考來源:

留言

  1. 写入速度慢是因为openocd的rpi cfg没写好。打开scrpits/interface_rpi.cfg在最后添加一行就可以了
    adapter speed 1500

    我是最老的rpi最高只能到1.5M/s,不知道比较新一点的型号能不能更高速度。make flash_all的时候可以看输出有没有设定成你配置里写的速度,如果太高不支持的话会退回最低速度

    回覆刪除
    回覆
    1. 太好了,感謝您的說明,又學到一招了~

      刪除
  2. 請大大幫忙,我試多部改64M後,所有正常,唯讀所有返回唔到時鐘系统,未改前可以的。謝謝

    回覆刪除
    回覆
    1. 這是正常的喔,刷雙系統切到RETROGO後只能重開機才能回到原系統。

      刪除
    2. 麻煩大大,我意思是刷雙系统前,是不是要用三個backups檔做回原本時鐘系统,先可開始刷雙系统,求指敎謝謝。

      刪除
    3. 沒錯,要先刷原系統,再刷RETROGO,文章的步驟說的很清楚。

      刪除
  3. 請問大大 RETROGO 的game & wahch 的rom是 .gw 檔 請問是如何生成的 謝謝!!

    回覆刪除
    回覆
    1. https://gist.github.com/DNA64/16fed499d6bd4664b78b4c0a9638e4ef?fbclid=IwAR2KIzrSifpIkhPPO5sXohJ_au7lykDE6OIMSV1ateH1ItqMwyxkGp5yhSg
      這裡有完整的說明喔,照著步驟即可。

      刪除
  4. maxxkao 問一下 如果是3B 的板子 也是同樣方法嗎? 謝謝你~

    回覆刪除
    回覆
    1. 大大問一下喔 備份的是每台都備份還是備份一台就好? 備份完之後在改內存嗎?

      謝謝

      刪除
    2. 相同的機器備份一台即可,只要機器有解鎖過,都可以用同一份還原。

      刪除
  5. 求大大幫手,本人薩爾達跟程序已可刷雙系统能正常運作,唯獨瑪利歐機照跟這程序刷機,第一日是可以的,到第二日就好多時不能進入刷機畫面自動關機,我已抓文用很多方法及跟大大的 (資料參考來源) 都未能改善都是一樣, 麻煩大大幫手敎刷瑪利歐雙系统,謝謝。

    回覆刪除
    回覆
    1. 在game-and-watch-patch
      make clean
      make PATCH_PARAMS="--device=mario --internal-only" flash_patched

      在game-and-watch-retro-go
      make clean
      make -j8 EXTFLASH_SIZE_MB=60 EXTFLASH_OFFSET=4194304 INTFLASH_BANK=2 flash

      可以試試這個,可能可以多3MB
      make -j8 EXTFLASH_SIZE_MB=63 EXTFLASH_OFFSET=1048576 INTFLASH_BANK=2 flash

      刪除
    2. 謝謝大大,你寫的是最好的,只要跟着你的就能成功.

      刪除
  6. 谢谢教学,您是全网写的最清楚的。

    希望大大能再出一篇「备份/还原游戏存档」的教学...
    (试了好久,不知道如何在「游戏改成中文名称」后,进行备份/还原游戏存档)
    (遇到乱码的问题… 好难解!!)

    https://github.com/olderzeus/game-and-watch-retro-go#:~:text=and%20read%20on.-,Backing%20up%20and%20restoring%20save%20state%20files,-Save%20states%20can

    回覆刪除
    回覆
    1. 這個我沒有用過耶,有時間再來試看看。

      刪除
    2. 亂碼會不會是因為950是繁體中文,簡体中文要用936

      刪除
  7. 你好, 我在第四步安裝keysotone-engine的時候出現了問題,即便我已經修改了SETUP.PY。 安裝還是失敗。 請問又什麽其他建議嗎? 謝謝

    回覆刪除
    回覆
    1. 請問你是使用哪一個樹莓版本呢?

      刪除
    2. 那應該是沒問題才對,有具體錯誤訊息嗎?

      刪除
    3. 你好,我已經成功安裝了KEYSTONE ENGINE, 我把文件都刪了,重新安裝一遍就可以了。 但是接下來的第五步又出現了問題。 首先,第五步,你介紹說: 安裝 Game & Watch Patch。內建是使用 stlink 刷機, 如果有需要也能在指令中更換成 rpi(ADAPTER=rpi)。 我用的樹莓, 我在哪個指令中更換RPI呢?
      之後,我卡在7, make PATCH_PARAMS="--device=mario" LARGE_FLASH=1 flash_patched
      錯誤提示是adot111@raspberrypi:~/opt/game-and-watch-patch $ make PATCH_PARAMS="--device=mario" LARGE_FLASH=1 flash_patched
      python3 scripts/check_env_vars.py "flash_patched" build/env "--device=mario"
      arm-none-eabi-gcc -c -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -DGNW_DEVICE_MARIO=1 -DUSE_HAL_DRIVER -DSTM32H7B0xx -ICore/Inc -ICore/lzma -IDrivers/STM32H7xx_HAL_Driver/Inc -IDrivers/STM32H7xx_HAL_Driver/Inc/Legacy -IDrivers/CMSIS/Device/ST/STM32H7xx/Include -IDrivers/CMSIS/Include -Wall -fdata-sections -ffunction-sections -Os -MMD -MP -MF"build/ips.d" -Wa,-a,-ad,-alms=build/ips.lst Core/Src/ips.c -o build/ips.o
      /bin/sh: 1: arm-none-eabi-gcc: not found
      make: *** [Makefile:186: build/ips.o] Error 127
      謝謝

      刪除
    4. 刷機請確認主機已解鎖並啟動 gcc 與 openocd,rpi啟動為 export ADAPTER=rpi,在刷之前執行即可
      另外我mario的語法和你不同,我是用

      在game-and-watch-patch
      make clean
      make PATCH_PARAMS="--device=mario --internal-only" flash_patched

      在game-and-watch-retro-go
      make clean
      make -j8 EXTFLASH_SIZE_MB=60 EXTFLASH_OFFSET=4194304 INTFLASH_BANK=2 flash

      基本上所有的解決方式在我這兩篇都有明確的方法,另外挑選好線材也很重要,很多人刷不過幾乎都是因為接觸不良。

      刪除
    5. 謝謝大大,我試試。 是不是刷機之前都要運行,export ADAPTER=rpi ; export OPENOCD="/home/pi/opt/xpack-openocd-0.11.0-1/bin/openocd" 怎麽啟動,GCC? 謝謝

      刪除
    6. 是的,每次打開樹莓都要啟動 gcc 與 openocd,如果你用 rpi 也要
      export ADAPTER=rpi
      export OPENOCD="/opt/openocd-git/bin/openocd"
      export PATH=$PATH:/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/

      刪除
  8. 请教一下,树莓派3B不是硬件吗?使用的配套TF卡应该刷入什么固件?谢谢

    回覆刪除
    回覆
    1. 刷樹莓派OS,請參考這篇
      https://maxxkao.blogspot.com/2022/01/game-watch.html

      刪除
    2. 收到,非常感谢。我在网上也看到有图形化界面的树莓派刷机方式,不知道这种是什么方式呢?https://www.youtube.com/watch?v=h5S6eFH2jD4

      刪除
    3. 這是另一種早期的刷法,我沒有用過,現在大都是跑我這個雙系統的刷法

      刪除
    4. 感谢解答,听说64M的Flash会有卡的情况发生?我考虑主要哪来玩GBC的RPG游戏,后期有些游戏都已经4MB和2MB了,16MFlash似乎又小了点,不知道您这边实际使用16M和64M的FLash使用运行速度差异大吗?

      刪除
    5. 沒用過16,只有用64,已經刷過至少30台,沒你說的會卡的情形

      刪除
    6. 谢谢,请问刷完双系统,玩模拟器的话,续航还能达到8小时吗

      刪除
    7. 沒刷能有5-6小時就很偷笑了,有刷和沒刷使用時間差異不大,和你開聲音還有亮度才有關係,當然亮度越暗,聲音越小可以玩越久

      刪除
    8. 哈哈哈,我这个月刚买的机器,就是感觉续航还是挺强的。但是这个机器是不是充电完成也没指示灯啊?没电了没提示,充电完成也没提示~~

      刪除
  9. 您好,make romdef生成json的详细命令能介绍一下吗?我没有看懂,非常感谢。现在我的各个ROM文件里面都没有json文件,谢谢。另外再咨询一下,“Pack or don't pack rom to firmware (Set publish to 1 or 0)
    Enable save for single game even STATE_SAVING=0 (Set enable_save to 1, if STATE_SAVING=1 all games will be save enabled)”这两段又是什么意思呢?非常感谢

    回覆刪除
    回覆
    1. 請參考此篇的第五步:
      https://maxxkao.blogspot.com/2022/01/game-watch.html
      直接 make romdef 後,每個模擬器的資料夾下就會出現 json 文件,如果沒有要特別將遊戲標題變成中文的話,基本上這步驟可以直接省略。
      至於你說的那個文字我沒特別注意過,因為刷機途中出現的訊息實在太多了,除了重要訊息之外,我無法每個都一一確認。

      刪除
  10. 請問一下,在改完記憶體後,在這步(make flash_patched)會出現the adapter doesnt support configurable speed,請問是啥問題? 我使用的是rpi3

    回覆刪除
    回覆
    1. 先確認已解鎖還原後才更換記憶體,如果是的話那就確認你是用stlink還是rpi連結,最後都沒問題的話,就再確認是否接觸不良,可以的話建議使用stlink,因為上面有燈號可以方便確認是否有寫入資料。

      刪除
  11. 想請問一下,在第五步make PATCH_PARAMS="--device=zelda" LARGE_FLASH=1 flash_patched 之後,要麼會報錯停止,要麼裝入的原廠系統不是patched的,導致retrogo沒辦法正常安裝是怎麼回事呢

    回覆刪除
    回覆
    1. make: *** [Makefile:281:flash_patched_ext] 错误 1

      刪除
    2. 我沒有出現過簡體字的錯誤訊息過,你有先照這篇 https://maxxkao.blogspot.com/2022/01/game-watch.html 刷過破解了嗎?另外你也是用樹莓派刷嗎?

      刪除
  12. 想請問一下,《第五步》make download_sdk出現報錯:make: *** 【Makefile.sdk:97:Drivers/CMSIS/Device/ST/STM32H7xx/Include/stm32h7b0xx.h】 錯誤 4怎么解决

    回覆刪除
    回覆
    1. 出錯的問題有很多,首先要確認你有照這篇 https://maxxkao.blogspot.com/2022/01/game-watch.html 完成破解,並且正確地將系統還原成功,這樣才能進行本篇的刷雙系統,另外你是用原來的Flash還是有更換大容量的Flash,有沒有更換成功都會造成無法繼續刷下去的原因。

      刪除
    2. 你好,我也是出现了这个问题,此处make download_sdk应该不需要接game&watch就能把SDK下载到电脑,但是报错了,是不是网络问题呢

      刪除
    3. 出錯的問題有很多,首先要確認你有照這篇 https://maxxkao.blogspot.com/2022/01/game-watch.html 完成破解,並且正確地將系統還原成功,這樣才能進行本篇的刷雙系統,否則是刷不進去的。
      另外是否用原來的Flash還是有更換大容量的Flash,有沒有更換成功都會造成無法繼續刷下去的原因。

      刪除
  13. 你好!可以幫我看看出了甚麼問題嗎?我在執行第五步的第7後得到下列的錯誤
    DEPRECATED! use 'sysfsgpio swd_nums' not 'sysfsgpio_swd_nums'
    DEPRECATED! use 'sysfsgpio srst_num' not 'sysfsgpio_srst_num'
    none separate
    Info : SysfsGPIO JTAG/SWD bitbang driver
    Info : Note: The adapter "sysfsgpio" doesn't support configurable speed
    Info : SWD DPIDR 0x6ba02477
    Info : [stm32h7x.cpu0] Cortex-M7 r1p1 processor detected
    Info : [stm32h7x.cpu0] target has 8 breakpoints, 4 watchpoints
    Info : gdb port disabled
    Info : starting gdb server for stm32h7x.cpu0 on 3333
    Info : Listening on port 3333 for gdb connections
    Warn : [stm32h7x.cpu0] target was in unknown state when halt was requested
    Info : [stm32h7x.cpu0] external reset detected
    Info : Halt timed out, wake up GDB.
    Error: timed out while waiting for target halted

    make: *** [Makefile:274:flash_patched_int] 錯誤 1
    我刷機方式採用rpi,麻煩撥空幫我看看哪裡出問題了,感謝!

    回覆刪除
    回覆
    1. 有確認過已經完成 https://maxxkao.blogspot.com/2022/01/game-watch.html Nintendo Game & Watch 刷機完全攻略這篇的流程了嗎?

      刪除

張貼留言

這個網誌中的熱門文章

為什麼要在 CRT 電視上玩復古遊戲?

Nintendo Game & Watch 刷機完全攻略

小霸王 Q9 非官方韌體初探

如何轉換 PCE-CDROM 的映像檔成為小霸王 Q9 能玩的格式(兼容其他需要此格式的模擬器)

任天堂紅白機改超級 AV 心得

RGBSPi 簡易開箱評測

RaspiBoy 簡易開箱評測

SEGA New Astro City Mini 新發售 ?

自製迷你賽車遊戲 Mini Arcade Racer 機台