曾在 2017 年寫過一篇文章「親手打造任天堂紅白機遊樂器」體驗 DIY 的樂趣之後,相信「紅白機掌機化」是有搞頭的。不久之後創客圈出現了「ODROID-GO」這種 DIY 掌上型遊戲機,但據說體驗極差,又不夠便宜(USD $32),所以很快就 Discontinued 消聲匿跡了。近年來「紅白機掌機化」方案有如雨後春筍般的紛紛冒出,但基於更好的遊戲體驗與操作手感為由,這類開源掌機始終存在一定的體積和重量,很難方便直覺的收納在身上任何一處口袋並隨時掏出來玩。時間來到 2020 年,「紅白機掌機化」總算迎來真正意義上的實現,紅白機本家廠商「任天堂」,以「35 週年活動」為由,於 2020 和 2021 年,先後發表「超級瑪莉兄弟」與「薩爾達傳說」兩款 Game&Watch 遊戲掌機,日幣 4,980 円,台灣官方的定價 1,450 元。 (官網註明「超級瑪利歐兄弟」款式已於 2021 年 3 月 31 日結束生產)
Game&Watch 掌機(WIKI)是 1980 ~1991 年之間,由任天堂推出的掌上型遊戲機,上市年代比紅白機更為久遠,在當時的學齡人口之間廣為流行,如今已是許多中年成人的童年回憶。「35 週年活動」發表的兩款 Game&Watch 更是完全復刻當年的外型風格,外觀尺寸 67mm x 112mm x 12.5mm,比成年人的手掌略小,重量僅 68 克,可輕鬆放入身上任何一處口袋。遊戲內容則是各自挑選了幾款紅白機與昔日 Game&Watch 的經典代表作,薩爾達款更多了 GameBoy 和新的計時小遊戲,機體外觀上薩爾達款也比瑪莉歐款多兩顆按鈕。在 Game&Watch 掌機框架上遊玩紅白機遊戲,又是任天堂本家公司的產品,可說是 100% 根正苗紅、血統純正,真正意義上「紅白機掌機化」的最佳方案。唯一的遺憾是,收錄的內置遊戲實在太少了,所以這款產品的收藏價值遠大於實用性,估計這也是廠商滿滿的套路,說不定哪天「寶可夢 N 週年活動」、「星之卡比 N 週年」,或是跟某 K 遊戲商一起來合搞「惡魔城 N 週年」、「魂斗羅 N 週年」等等,再以相同手法推出對應的 Game&Watch 掌機,一次又一次收割中年韭菜的懷舊之情,屆時也不意外。
坦白說 1,450 元的定價,只能玩特定幾款遊戲,又是「限定發行」,本來對我沒什麼吸引力。差不多在今年 9 月上旬的時候,臉書社團的人分享摸摸電商的消息,Game&Watch 薩爾達款出現歷史低價只要 888 元,然後又很不小心 G (Google) 到這台掌機的「黑工玩法」,加上當時又有信用卡與電商合作贈送的 100 元折價券,各種敗家誘因的驅使之下,忍不住就剁手了,以 788 元購入一台來搞搞看。
G 過才知道,「35 週年活動」Game&Watch 掌機經由某些黑工改造之後,不僅能玩紅白主機遊戲,還能玩上 PC-Engine、SEGA MegaDrive、Game Gear、GameBoy ... 等其他平台的遊戲。若對自己的焊工手藝有點自信的話,還能擴增內置空間,搞出「原廠+自製」雙系統來玩玩。由於 G 到的相關黑客工具有些已經更新,發現大部分網路教程如今已經有點過時,或是有些沒寫清楚的,所以自己也來寫篇教學文章更新一下。
本文內容主要分成以下幾個部分:
- 前置作業概述
- 安裝 OpenOCD 與 ToolChain 工具,gnwmanager 管理套件、環境參數設置
- 備份原廠韌體、解鎖 Game&Watch、還原原廠韌體
- 編譯安裝自製韌體(retro-go 客製化模擬器)
- 擴充 Game&Watch 內置記憶體容量
- 原廠與 retro-go 雙系統:必須擴充容量後才能使用
- 額外補充:轉換成 retro-go 可運行的 Game&Watch 遊戲
準備工具:
- 人字螺絲起子:拆解 Game & Watch
- 杜邦線三條:連接樹莓派(或 ST-LINK)與 Game & Watch 掌機
- 樹莓派,或是 ST-LINK 讀寫器:連接 Game & Watch 掌機並上傳韌體。本篇文章所使用的 ST-LINK 是 V2 版。
- USB Type-C 電源供應器:Game&Watch 上傳韌體的過程中,有些時候必須斷電重開機(power-cycle),所以要斷開鋰電池,改以 Type-C 供電。 若想偷懶的話,可以直接用電腦或樹莓派的 USB 埠作為 Game&Watch 的 Type-C 供電來源。
- 一台 Linux 的電腦:用來編譯 Game&Watch 的客製化韌體,樹莓派安裝官方 Raspbian 32bit OS 亦可視為 Linux 電腦。若要以虛擬機安裝 Linux ,不建議使用 Paralkels Desktop,因為 ST-LINK 不能跳接至虛擬機內。
- 電腦一台(可選):整理 ROM 檔、安裝樹莓派作業系統,或是連線到樹莓派下指令之類的雜項用途。
所需技能:
- 基本的 Linux 指令操作、小螺絲起子拆解物品。
如果要搞雙系統,需求如下:
- 晶片拆解與焊接工具:焊槍或熱風槍,以及其他相關工具(鑷子、焊錫/錫油/錫膏...)。
- Flash 記憶體晶片 16MB 或 32MB 或 64MB:看個人的需求,三種容量的 Flash IC 有兩種外觀。32MB 與 64MB 可能需要熱風槍。型號後文中詳述。
個人覺得不搞雙系統的話難度不高,對於常玩樹莓派、或是習慣使用 Linux 的人來說,這種難度根本是小菜一碟,僅需具備一點點 Linux 系統下操作指令的基礎即可。而雙系統的難度,主要在於個人的焊工手藝,不是每個人都會拿焊槍,不過對我個人來說這部分難度也不高,比上次 GPi Case 更換晶片的難度偏低許多。這次改機除了倒楣買到故障的 ST-LINK V2,其他一切都很順利,幾乎沒踩到什麼坑。
若對以上的部分沒啥問題,想繼續看下去的話,底下的內容可能很長,請繫好安全帶,要發車了。
1、前置作業概述
「35 週年活動」Game&Watch 掌機不能外插記憶卡,Type-C 口也只有充電功能,想對它上下其手的話,必須先脫了它的...外殼。不過 Game&Watch 外殼由 4 顆特製的人字螺絲固定,得用特殊工具拆解,所幸這種螺絲與任天堂 Switch 主機 Joy-Con 手把的外殼螺絲一模一樣,還相同都是鋁製螺絲,很容易崩牙。受惠於 Joy-Con 的高銷量與高維修率,網路賣場搜尋「Joy Con 維修工具」會跑出一大堆,價格也很便宜。建議買一整組的(人字、十字、鑷子、翹棒),在本文中這 4 個工具全都用得上。
人字:拆裝外殼螺絲。十字:主板拆裝。鑷子:排線固定、更換 Flash 晶片。翹棒:撬開鋰電池接頭、螢幕排線黑色壓版。
拆開之後還可發現 Game&Watch 使用的喇叭與 Nintendo Switch 同款,鋰電池也和 Joy-Con 同款。受惠於 Nintendo Switch 與 Joy-Con 的高銷量與高維修率,將來 Game&Watch 電池跟喇叭故障也不用擔心,很容易買得到零件更換。上面提到易崩牙的人字鋁製螺絲,也能找到鐵製十字的替代品。
Game&Watch 的處理器是 STM32H7B0VBT6,280Mhz Cortex-M7 核心,內部搭載 1376KB 主記憶體與 128KB Flash RAM,外部 Flash 記憶體為 MX25U 系列的 1.8v SPI NOR Flash,薩爾達版本容量為 4MB,瑪利歐版本為 1MB,通過 QSPI 模式與處理器連接。處理器附近有一排 DEBUG 接口,薩爾達版本為 7 孔,瑪利歐版本為 5 孔,排列順序相同(下圖中薩爾達版左 5 孔與瑪利歐版相同)。DEBUG 接口就是這次用來和 ST-LINK 或樹莓派對接的地方,其他詳細的細節可參考這段影片。
與 Game&Watch 連接有兩種方法,依照自身的狀況擇一即可:
方法(1):使用 ST-LINK 搭配 LINUX 的電腦(樹莓派搭載 Raspbian OS 32bit 也可視為 LINUX 電腦)。ST-LINK 有很多種版本形式,本文使用的是下圖的 ST-LiNK V2 版,接法如下(連接前務必先斷開鋰電池):
2024.10.08 補充:上面斷開電源的動畫時動作務必小心放輕,否則焊在 PCB 上的電源母座很可能一併脫落。本人在近日弄掉了一次,最後使用熱風槍+低溫錫把母座成功黏回去。
方法(2):使用樹莓派 GPIO,接法如下(連接前務必先斷開鋰電池):
兩種我都試過了,我個人建議使用 ST-LINK 搭配安裝 Ubuntu 22.04 64-bit 的電腦,會少走一些冤枉路。用個人電腦編譯 Game&Watch 韌體的速度比樹莓派還快上許多,用 ST-LINK 刷寫韌體的速度也比樹莓派 GPIO 明顯快上不少,可節省超過一半的時間,ST-LINK 刷寫時也有燈號可判斷,比樹莓派 GPIO 刷寫時更直觀,以及在「製作雙系統」時,樹莓派會特別遇到套件版本不相容的問題須額外處理。
注意:千萬不可以將 ST-LINK 或樹莓派上 VDD 端連接到 Game&Watch 主板 VDD 端,因為 ST-LINK 或樹莓派的 VDD 輸出是 3.3V 或 5V,會燒毀 Flash 記憶體晶片( Flash 晶片只支援 1.65~2 V)。
另外,連接的時候可不需焊上,只用膠帶固定住即可,方便完工後拆除,不過得注意接觸不良的問題。連接實作如下圖:
ST-LINK 的品質似乎也有差。從淘寶順便買回來的 ST-LINK V2 竟然不能用,只好再買一個。
連接好之後,接下來就是 Linux 電腦(或安裝 Raspbian 32-bit OS 的樹莓派)的事了。以下的 Linux 指令中,藍底白字的部分,請自行依情況不同而逕行修改。如何修改可參考 #白底藍字 的相關說明。
上述前置作業完成之後,接下來就是進行 Linux 指令操作的部分了。要提醒的是,隨著時間推進,以下內文中某些指令很可能會發生錯誤,例如在某個時間點本來是可以、指令是沒問題的,後來過了一段時間之後,重來一次就突然不行了,這也是許多使用者對 Linux 望而卻步的地方:「明明別人可以,為何我就不行!?」這類問題的原因,多半是某些套件版本或程式碼內容發生變化,而導致的語法不相容錯誤,我會盡可能找出修正指令的方法,並補上黃底紅字說明。
2、安裝 OpenOCD 與 ToolChain 工具,gnwmanager 管理套件、環境參數設置
Game&Watch 的處理器採用 STM32 開源方案,OpenOCD(Open On-Chip Debugger)則是開源晶片的調試軟體,可直接視為刷寫韌體的工具軟體。
先安裝相依套件:
sudo apt update && sudo apt upgrade -y sudo apt install binutils-arm-none-eabi python3 libftdi1 -y sudo apt install python3-pip python3-pil git cmake -y |
2.1 安裝 OpenOCD
操作原理是下載 OpenOCD 的原始碼進行編譯安裝,大約需要幾分鐘到十幾分鐘。指令如下:
cd ~ git clone https://github.com/kbeckmann/ubuntu-openocd-git-builder cd ~/ubuntu-openocd-git-builder/ git checkout c1003f4 git submodule update --init --recursive ./build.sh sudo dpkg -i openocd-git_*_*.deb sudo apt -y -f install export OPENOCD="/opt/openocd-git/bin/openocd" |
執行完畢之後 /opt 底下會生成 openocd-git 目錄,重點是會產生一個執行檔 /opt/openocd-git/bin/openocd。如果沒有這個檔案,表示失敗了。
以後要開始進行寫錄韌體前,可以先執行一次 export OPENOCD="/opt/openocd-git/bin/openocd"
2.2 下載並安裝設定 ToolChain
ToolChain 工具鏈是用來編譯 STM32 韌體的工具軟體。Ubuntu 64-bit 電腦和樹莓派 Raspbian OS 32-bit 使用的工具鏈不同。下載安裝 ToolChain 的操作方法如下:
# ToolChain 平台:linux-x64 - Ubuntu 64bit, linux-arm - 樹莓派 Raspbian OS 32bit # GCC 版本 cd ~ |
2.3 將 ToolChain 加入路徑中
# GCC 版本 export gccver=10.3.1-2.3 export PATH=$PATH:/home/${USER}/gnw/xpack-arm-none-eabi-gcc-${gccver}/bin/ |
想要驗證 ToolChain 有沒有加入 PATH 路徑時,除了 echo $PATH 查看搜尋路徑,還可以輸入 arm-none-eabi- 之後按 TAB 鍵,會列出可執行的指令集。重點是要有底下紅框內的 gcc 和 gdb,因為它是編譯 STM32 自製韌體的必要工具。
2.4 安裝 gnwmanager
gnwmanager 是近期橫空出世的 Game & Watch 整合製作工具,能自動偵測各種狀態(如 G&W 機型、連線方式與上述 openocd 和 toolchain 工具等)與內建管理操作指令。部份 G&W 套件已陸續改用 gnwmanager 進行操作,為避免後續操作卡關,所以還是把它安裝起來。
sudo apt update sudo apt install python3-pip python3-venv pip3 install pipx export PATH=$PATH:$HOME/.local/bin # 這行加入 ~/.bashrc 或其他等效文件 pipx install gnwmanager |
2.5 將環境參數寫入 ~/.bashrc 檔案
所有的操作指令都在終端機模式下進行,期間會使用到的環境參數例如 OpenOCD、ToolChain 的執行位置、刷機的對象機型(Mario 款或是 Zelda 款)、刷機的方法(使用樹梅派 rpi 或 ST-LINK ...),這些參數若能在開啟終端機的當下就能自動設定完成,就不用每次執行時去檢查設定。對於 Debian 系列的 Linux 系統來說(如 Debian、Ubuntu、Mint、Raspberry Pi OS...),只需把環境參數寫入 ~/.bashrc 即可。
.bashrc 是一個標準的文字檔,可以用任何一種文字編輯器來修改。檔案位於家目錄「~/」,用「.」開頭表示它是一個隱藏檔,一般的情況下看不到它的存在。以下是使用 nano 開啟 ~/.bashrc 的操作指令:
cd ~ nano .bashrc |
將以下的環境參數內容,新增到 .bashrc 最下方:
# 連接方式:rpi - 樹莓派 , stlink - ST-LINK # Game&Watch 機型 : mario - 瑪利歐款, zelda - 薩爾達款 # 設定 OPENOCD 路徑 # gnwmanager 的執行路徑 # 將 ToolChain 加入 $PATH 路徑 |
接著按下 Ctrl + X,詢問是否存檔時回答 Y 再按 Enter 即可。
最後,關閉所有的終端機視窗。以後每此啟用終端機視窗時,上述環境參數會自動生效,例如終端機內輸入 echo $PATH 指令看看 ToolChain 有沒有在路徑中,輸入 arm-none-eabi- 之後按 TAB 鍵會不會跑出一堆 arm-none-eabi- 開頭的指令集等等。
3.備份、解鎖、還原 Game&Watch 韌體
提醒:每一台 「Game&Watch 35 週年款」掌機,若想要在日後自行寫錄韌體,或是換擴容晶片等,都必須先經歷一次「備份、解鎖、還原」一輪操作。重點在解鎖和備份,出廠之後必須至少做過一次,也只需做過一次即可。
先確認步驟 1. 的連接是否妥當。Game&Watch 插入 Type-C 電源,開機停在時鐘畫面。並開啟終端機,執行指令如下:
cd ~ # 1_檢查 OpenOCD # 2_備份第1階段 # 英文會提示先把 Game&Watch 切換到時鐘畫面,確定後按 Enter |
完成之後,~/gnw/game-and-watch-backup/backups 目錄底下會產生 flash_backup_zelda.bin 與 itcm_backup_zelda.bin 兩個檔案,Game&Watch 的畫面全黑。繼續以下的動作:
# 3_備份第2階段 ./3_backup_internal_flash.sh ${ADAPTER} ${gnw_tg} |
這個步驟比較容易出錯。若是正常進行,中間會出現「Flash successfully programmed. Now do the following procedure: - Disconnect power from the device ...」提示,要把 Game&Watch 斷電重開(斷開 Type-C 再接上,然後按電源鍵),此時 Game&Watch 的畫面是整片藍色,按 Enter 繼續。這個步驟完成之後, backups 目錄下會產生 internal_flash_backup_zelda.bin 檔案。
倘若失敗的話,Game&Watch 把 Type-C 斷電重開後會回到時鐘畫面。接著按住 Game&Watch 的電源鍵不放,再執行一次,若進入刷寫程序的話,約 5 秒就能放開電源鍵。總之要看到上面的「Flash successfully programmed. Now do...」的提示訊息、power-cycle 斷電重開後螢幕藍色才算正常。接著繼續:
# 4_解鎖裝置 ./4_unlock_device.sh ${ADAPTER} ${gnw_tg} |
完成後會出現「Congratulations, your device has been unlocked. Please power-cycle it for the changes to take full effect.」。通常不會有什麼問題。每一台 Game&Watch 只需做一次解鎖即可。跟著提示做一次 power-cycle (斷開 Type-C 電源再接上,按下 Gamw&Watch 電源鈕),繼續最後一個還原動作:
# 5_還原成原始韌體內容 ./5_restore.sh ${ADAPTER} ${gnw_tg} |
完成之後會提示「Success, your device should be running the original firmware again! (You should power-cycle the device now)」,提示把裝置再一次 power-cycle(斷電再開機)。開機之後會回到原廠韌體的時鐘畫面。
做到這裡,整個步驟 3 就完成了, 如同「開光典禮」般,這台 Game&Watch 經過解鎖步驟的「成年禮」之後,以後便可直接刷寫其他韌體,不需再解鎖。
指令 #1~#5 備份、解鎖、還原的整個流程正常畫面如下:
在 ~/gnw/game-and-watch-backup/backups 目錄底下一共會產生三個檔案:
- flash_backup_zelda.bin
- internal_flash_backup_zelda.bin
- itcm_backup_zelda.bin
請務必妥善保存這三個檔案。以後這台 Game&Watch 掌機,不論先前刷寫了哪些內容,只需執行指令「#5_還原成原始韌體內容」就能恢復原廠韌體。
補充說明:
1. 擴容至 64MB 者,「#5_還原成原始韌體內容」 指令不支援,會報錯。
2. stlink 的用戶若遇到「Error: libusb_open() failed with LIBUSB_ERROR_ACCESS」的問題(記錄在 logs 中),可執行以下指令後重開機試試看:
sudo usermod -a -G plugdev `whoami` |
3. 每一台 Game&Watch 掌機,在出廠之後只需做過一次成功解鎖即可。
4. 編譯安裝自製韌體(retro-go 客製化模擬器)
目前網路上的中文教學大多是採用 olderzeus 的版本,不過在撰寫本文的時候,發現另一個作者 sylverb 的版本更完善。sylverb 的版本從 olderzeus fork 出來,已包含 olderzeus 的 NewUI 分支(支援多語系和顯示遊戲封面),支援更多的模擬器(包含 SEGA MD),並支援超頻(PC-E 與 MD 遊戲適用)。所以本文以安裝 sylverb 的版本為準。
提醒:sylverb 版的程式碼更動頻繁,某些版本可能會導致編譯失敗,所以下面 4.1 步驟操作指令中,有特別 checkout 切換至可編譯運作的版本。(2023.02.14 補充)另外,作者 sylverb 似乎於近日完成了任天堂模擬器 fceumm 的移植,終於可以玩任天堂磁碟機(FDS)的遊戲了。
4.1 下載 sylverb 版 retro-go 原始碼並設置編譯環境
操作指令如下:
cd ~ mkdir -p ~/gnw cd ~/gnw git clone https://github.com/sylverb/game-and-watch-retro-go.git cd ~/gnw/game-and-watch-retro-go git checkout 70b8f1a git submodule update --init --recursive make clean chmod a+x scripts/*.sh python3 -m pip install -r requirements.txt |
4.2 整理 ROM 檔
Game&Watch 並不能外接記憶卡等裝置,遊戲的部分必須和韌體一併打包。整理遊戲 ROM 檔沒有特定做法,可依個人的習慣,選擇適合的方式進行。在 ~/gnw/game-and-watch-retro-go/roms 目錄底下有 a7800、...gb、gc...nes...pce 等遊戲主機平台的子目錄,將想玩的遊戲放入不同的子目錄中,最終會和韌體一併編譯封裝。遊戲如果是 .zip 檔,必須解壓縮,遊戲副檔名和遊戲子目錄名稱保持相同。另外 sylverb 的版本是從 olderzeus 的版本 fork 出來的,也支援顯示遊戲封面和中文遊戲名稱。在相同的遊戲目錄下放入遊戲封面縮圖(.jpg 或 .png 或 .bmp),封面圖的主檔名必須和遊戲主檔名一致,不要使用中文檔名。如果有任天堂紅白機的磁碟機遊戲(副檔名為 .fds),一樣放在 nes 目錄下(副檔名依樣維持 .fds 即可),遊戲封面圖檔和遊戲檔名一致,磁碟機系統必備的 BIOS 檔案(disksys.rom)放在 nes_bios\ 目錄下即可。若該遊戲有作弊碼(.ggcode),主檔名也和遊戲檔名一致。以紅白機 ROM 為例,整理如下圖:
遊戲 rom、縮圖、作弊碼(如果有的話)都就定位放置好之後,執行以下指令產生遊戲設定檔:
cd ~/gnw/game-and-watch-retro-go make romdef ROMINFOCODE=UTF-8 |
執行完後,在 cd ~/gnw/game-and-watch-retro-go 目錄底下會有一系列 xx.json 檔案,例如 gb.json、nes.json、md.json... 等等。
可以用文書編輯器開啟,自行編輯修改每個遊戲的中文名稱。
小技巧:如果不擅於在 Linux 作業系統環境中編輯文字檔,可以將 json 檔以自己知道的方式(如 ssh,vnc,上傳雲端同步...等等)傳到電腦上進行編輯。編輯完記得要再一次確認以 UTF-8 格式存檔,否則中文會出問題。遊戲封面的製作亦然,以熟用的電腦製作完成後,再傳回 Linux 電腦的 ~/gnw/game-and-watch-retro-go/roms/[模擬器] 目錄下。
.json 檔中的參數說明:
- enable_save:該遊戲是否支援自動存檔?1:是 0:否。適用於 make 參數 STATE_SAVING=0 時個別指定遊戲才會生效。
- publish:該遊戲是否要打包入韌體檔?1:是 0:否。倘若整理出來的遊戲太多,導致編譯韌體大於 Flash 容量而編譯失敗,可利用此設定調整遊戲數量。
- _cover_height 與 _cover_width :封面的長寬。_cover_width 介於 64 ~ 180,_cover_height 介於 64 ~ 136 。每個 .json 檔案內只有一組,意即每一種遊戲主機平台只有一組封面長寬設定。例如 pce 的遊戲封面多為近正方形,md 的遊戲多為直立矩形,那麼 pce.json 與 md.json 內的 _cover_height 與 _cover_width 的值就可以不相同。
(2024.01.14 新增)最新的 retro-go 版本新增支援兩款特定的超任遊戲「超級瑪利歐世界」與「薩爾達傳說 - 眾神的三角力」。不過整理遊戲的方式與其他復古遊戲有些不同,方法在文章最下方「補充項目」中說明。
整理好 ROM 檔之後,下一步動作就是編譯 Game&Watch 的 retro-go 包含遊戲的自製韌體。
提醒:如果都沒有 ROM 檔,下一步的編譯韌體動作就會出現錯誤「No roms found! Please add .....」。
4.3 編譯並上傳 retro-go 自製韌體到 Game&Watch
cd ~/gnw/game-and-watch-retro-go |
make 編譯參數說明:
- flash: 韌體編譯完成後繼續進行刷寫。如果參數中沒有 flash 則只是編譯韌體,可用來檢查編譯韌體的過程中有沒有其他問題,免得出錯時誤會是晶片壞了燒不進去。
- COVERFLOW:是否包含遊戲封面?1:是 0:否
- CODEPAGE:950 為顯示中文
- EXTFLASH_SIZE_MB:Flash 容量,瑪利歐款為 1(MB),薩爾達款為 4(MB)。若有更換 Flash 晶片擴容,則必須填入擴容後的數字。如果韌體容量大於該數字的話(例如遊戲放太多)則編譯會失敗。
- OVERCLOCKING_LEVEL:超頻?0:預設不超頻 1:微超頻 2:最大超頻。經測試,薩爾達原廠 4MB 可以最大超頻,但是自行擴容不一定能最大超頻(會當機停住),受限於晶片體質,得試過才知道。另外,PC-E 與 SEGA MD 的某些遊戲則需要超頻,才能跑得更順。
- EXTFLASH_FORCE_SPI=1:禁用 quad 模式。禁用之後,retro-go 的「調試選項 - 存儲晶片」會顯示 Unknow。原廠未改裝過的 Flash 晶片不用加上這個參數,如果改裝的擴容晶片運行時脈較低(例如下面提到的 16MB / 32MB 擴容晶片),且啟用超頻的話,可以嘗試加入這個參數試試。如果使用的是下面提到的 64MB Flash (MX25U51245GZ4I00)晶片,則更不能加上此參數,否則在刷寫韌體的過程中(第 15 處)會發生錯誤。
- CHEAT_CODES=1:作弊碼。可以到這裡或這裡找,或是到這裡用遊戲英文名搜尋。任天堂的作弊碼支援 Game Genie 格式(長度為 8 的字串)與基本格式(格式為 xxxx:xx),與遊戲相同主檔名,放在同一目錄即可。(此參數在 2022.12.2 的 7968d42 版以前為 GAME_GENIE=1)。
- FORCE_NOFRENDO=1:(2023.02.14 新增)強迫使用 nofrendo 核心,而不使用 fceumm 核心。nofrendo 和 fceumm 都是任天堂紅白機的模擬器核心,主要差別在於 fceumm 對 CPU 的使用負載比 nofrendo 高很多(所以建議超頻),但 fceumm 能玩的紅白機遊戲更多,還能玩磁碟機(.fds)遊戲。沒有此參數時,預設使用 fceumm 核心。
- DISABLE_SPLASH_SCREEN=1:(2023.03.23 新增)關閉 retr-go 啟動圖片。參數 =0 或是沒有此參數時為啟用啟動圖片。關閉時可縮短 retro-go 的啟動時間。
提示:倘若刷寫出現錯誤,先拿掉 make 的 flash 參數看看編譯韌體的動作有沒有問題。如果加入 flash 指令後出現 openocd .... 之類的錯誤,先檢查連接是否正常,並拔除 Game&Watch 的 Type-C 電源之後再接上,按下 Game&Watch 電源鈕開機後再試。若一直失敗,則除了檢查接觸不良的情況,也可以嘗試接上 Type-C 電源之後按下 Game&Watch 電源鈕不放,接著執行 make 指令。
進入刷寫動作時, Game&Watch 螢幕會顯示進度和狀態如下(此時 Game&Watch 電源鈕如果是按住時,可以放手了):
刷寫完成若一切順利,retro-go 的部分就完成了。最後移除連接線,鋰電池接上,鎖上外殼,一台客製化的 Game&Watch 就此誕生。以薩爾達款 4MB 來說,差不多能放 20 多個紅白機遊戲。PC-E 或 MD 的遊戲就比較佔空間,例如 MD 知名神作「怒之鐵拳」全系列 1~3 代三款遊戲加起來就超過 4MB,「快打旋風 II Turbo」容量就高達 3MB,想玩 PCE 或 MD 遊戲的話 4MB 一定不夠用,這時候就可以考慮擴充升級內置記憶體的容量了。
5. 擴充 Game&Watch 內置記憶體容量
原廠 Game&Watch 內置 Flash 記憶體,瑪利歐款使用的是 MX25U8035FM2I,容量只有 8Mb(1MB),薩爾達款好一點,使用 MX25U3232FM2I02,容量 32Mb(4MB),兩者都是 8-SOP 封裝,電壓 1.65V ~ 2V,頻率 133MHz。如果覺得改成 retro-go 之後遊戲實在不夠玩,可自行更換 Flash 晶片擴容,放入更多遊戲。網路上的資訊通常提到的幾款可用型號:
- MX25U12835FM2I-10G:容量為 128Mb(16MB),和原廠 Flash 晶片一樣的 8-SOP 封裝,電壓 1.65V ~ 2V,頻率 104Mhz。
- MX25U25635FZ4I-10G:容量為 256Mb(32MB),8-WSON (8x6) 封裝,電壓 1.65V ~ 2V,頻率 108Mhz。
- MX25U51245GZ4I00:容量為 512Mb(64MB),8-WSON (8x6) 封裝,電壓 1.65V ~ 2V,頻率 166Mhz。
以上 3 款 Flash 晶片在淘寶或是蝦皮上都有人販售。照理說可用的 Flash 晶片應該不只這兩款(可查看 gw_flash.c#L335 內容),也有 128MB 和 256MB 的 Flash,不過那又是另一種封裝(需使用轉換板),建議小心購買,比較不會踩到地雷。
本人的焊工水準平平,所以更換晶片的方式就不多說了,Youtube 搜尋「Game&Watch upgrade flash 」就能搜出好幾個。以下是心得:
- 該台 Game&Watch 入手之後必須先做過一次解鎖(即本文的步驟 3. 中 #1~#5 全部動作),才能更換晶片。
- 第一次拆解原廠 Flash 晶片時,建議使用焊槍施工。若要用風槍吹下,建議先用焊槍把原腳位上的錫點,用較低溫的銲錫換過一遍比較保險。例如我個人第一次拆解時並沒有用低溫錫換過原銲錫,直接用風槍吹時,溫度得開到近 400 度才能勉強把原廠晶片吹下來,這種高溫度萬一稍有不慎,就可能把附近的小元件一併溶解吹跑,或是吹壞 Flash 晶片。
- 由於封裝方式不同,換上 8-WSON (8x6) 建議使用熱風槍施工。個人經驗建議 8-WSON 使用低溫錫施工,風槍溫度約 230 度即可。
- 建議把主板從外殼上拆下來後再施工。主板以 10 顆十字螺絲固定。特別注意還有兩條排線,各自有黑色小板固定,小心別扯斷。細節可看下圖。
- 下圖是薩爾達款的檢查點,可用來檢查焊接是否虛焊不實。
Flash 晶片更換完成之後,Game&Watch 在此時是完全無法開機的狀態。可接著進行以下第 6 步驟「安裝雙系統」,或是回到上面第 4 步驟安裝 Retro-Go 模擬器,記得在第 4.3 步驟中 make 參數 EXTFLASH_SIZE_MB 要填入擴容後的數字。
注意:經實測擴容至 64MB 之後,無法進行上面第 3 步驟第 5 個動作「# 5_還原成原始韌體內容」,會出現無法刷寫的錯誤。更換成 64MB 後,直接進行第 6 步驟即可。
6. 安裝雙系統
所謂雙系統,就是在已經 Flash 擴容的 Game&Watch 上,同時安裝原廠韌體和自製韌體,操作原理差不多是把原廠韌體刷寫在前面的 1MB 或 4MB 區塊,自製韌體刷寫在後面剩餘的區塊。不過若是直接把兩種韌體刷上去,就沒有辦法兩者互相切換。所以有人研究出 Patched 原廠韌體加入切換的指令(也就是刷入前 1MB 或 4MB 的原廠韌體是 Patched 過的),達到理想的雙系統的效果。這個項目建議使用 ST-LINK + 個人電腦版的 Linux 64 位元作業系統,因為使用樹莓派會遇到額外的問題需處理。
操作指令如下:
sudo apt update && sudo apt upgrade -y sudo apt install git python3-pip cmake -y cd ~ mkdir -p ~/gnw cd ~/gnw git clone https://github.com/BrianPugh/game-and-watch-patch cd ~/gnw/game-and-watch-patch pip3 install -r requirements.txt |
樹莓派 Rasbian OS 32bit 的用戶會出現安裝 keystone-engine 的錯誤(其他 Linux 用戶應該不受影響),需手動下載原始碼並進行編譯與安裝。解決方式如下:
# =========樹莓派編譯安裝 keystone-engine========
cd ~ 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 |
接著編輯 ~/gnw/keystone-engine-0.9.2/setup.py,第 114 行
obj_dir = os.path.join(BUILD_DIR, 'llvm', 'lib')
修改成
obj_dir = os.path.join(BUILD_DIR, 'llvm', 'lib', 'arm-linux-gnueabihf')
存檔離開,然後編譯安裝 keystone-engine。以下兩種方法擇一即可。
方法一:
cd ~/keystone-engine-0.9.2 python3 -m pip install . |
(補充:「python3 -m pip install . 」後面可加上 --verbose --log logfilename.txt 查看安裝訊息)
方法二:
cd ~ tar czvf keystone-engine-0.9.2mod.tar.gz keystone-engine-0.9.2 pip3 install keystone-engine-0.9.2mod.tar.gz |
不論是哪個方法,編譯安裝都需要一段長時間。應該就不會有錯誤訊息了。如果是樹莓派 3(1GB)的用戶,編譯安裝時又可能會遇到記憶體容量不足的問題,得加大 swapfile 交換檔設定,方法如下:
以 sudo 權限編輯 /etc/dphys-swapfile,找到 CONF_SWAPSIZE=... 這行,把數字改成 1024(或是大於 1024 的任一數字),存檔離開。繼續以下指令:
# 重新啟用 swapfile: #檢查設定 |
加大 swapfile 生效之後,再做一次編譯安裝(上述兩方法擇一)
# ======= END OF 樹莓派編譯安裝 keystone-engine ====
做完上述的動作之後(樹莓派用戶解決 keystone-engine 的安裝問題,其他 Linux 用戶應該不受影響),繼續執行以下指令:
cd ~/gnw/game-and-watch-patch |
做完之後,再將第 3 步驟產生的原始備份 flash_backup_zelda.bin、internal_flash_backup_zelda.bin 與 itcm_backup_zelda.bin 三個檔案複製一份,放在 game-and-watch-patch 的根目錄下。
接著開始燒錄第一個區塊:原廠 Patch 韌體
# 提示: 擴容 >= 64MB 時,make 參數一定要加上 LARGE_FLASH=1 ,否則會出現 Flash sector_erase failed on sector 0 的錯誤。 # make PATCH_PARAMS="--device=zelda" LARGE_FLASH=1 flash_patchedcd ~/gnw/game-and-watch-patch |
make 參數說明如下:
- LARGE_FLASH=1:如果擴容後的容量 >= 64MB,則必須加上這個參數,否則會出現 Flash sector_erase failed on sector 0 的錯誤而中止。
- flash_patched:加上此參數則會刷寫 Patch 過的韌體,若不加此參數,則只會進行 Patch 韌體動作而不會進行刷寫,不加參數可用來檢查第 3 步驟取得的原廠備份韌體是否有無問題。另外,若將此參數改成 flash_stock 則是直接刷寫原廠備份韌體,作用相當於第 3 步驟的指令#5,配合 LARGE_FLASH=1 參數可將原廠韌體刷入 >=64MB 的 Flash,不過未經 Patched 的原廠韌體刷入擴容 64MB 並無任何意義,因為無法使用擴容空間。
執行畫面如下:
如果整個過程中沒看到上圖類似綠字的部分,表示先前的步驟有問題,可能與第 3 步驟取得的原廠韌體檔案不符有關,得回去逐一檢查看看。
如果都沒問題的話,完成之後,Game&Watch 會恢復成原廠環境,power cycle 之後會出現時鐘畫面 。
接著燒錄第二個區塊 retro-go 客製化韌體
cd ~/gnw/game-and-watch-retro-go # 編譯第二區塊的指令,為步驟 4.3 的 make 參數中, EXTFLASH_SIZE_MB 值要扣除原廠韌體的容量,再加上兩個參數 EXTFLASH_OFFSET=[偏移量] INTFLASH_BANK=2 。其他的參數都和步驟 4.3 相同。 make GCC_PATH=/home/${USER}/gnw/xpack-arm-none-eabi-gcc-${gccver}/bin/ COVERFLOW=1 CHEAT_CODES=1 COMPRESS=lzma CODEPAGE=950 EXTFLASH_SIZE_MB=12 GNW_TARGET=${gnw_tg} EXTFLASH_FORCE_SPI=1 EXTFLASH_OFFSET=4194304 INTFLASH_BANK=2 OVERCLOCKING_LEVEL=2 -j8 flash |
和 4.3 步驟相同道理,CHEAT_CODES、CODEPAGE、EXTFLASH_FORCE_SPI 等參數可參考 4.3 的說明,make 指令不加 flash 的話只會編譯而不刷機,可用來檢視編譯過程中有無問題,沒問題時再加入 flash 進行刷機。另外再補充一點,如果有超頻(OVERCLOCKING_LEVEL=2),那麼有改裝擴容為 16MB 與 32MB 的用戶,由於該晶片的預設工作頻率較低,最好再加上 EXTFLASH_FORCE_SPI=1 參數,否則遊戲很可能會開不起來或是各種閃退。(一旦啟用 EXTFLASH_FORCE_SPI=1 ,retro-go 的「調試選項 - 存儲晶片」會顯示 Unknow,不影響使用)
開始刷機時通常會出現一行錯誤紅字「Flashing chunk 0 failed... power cycle unit and retry? (y/n)」,要求 power-cycle 一次(斷開 Game&Watch 的 Type-C 電源再接上,按電源鍵開啟),做完回到電腦按 y 繼續,正常的話就會開始刷寫第二區塊韌體。若再不行的話則多按 y 幾次(原廠時鐘畫面),或是再檢查一下有無接觸不良的情況。又或者可以按住 Game&Watch 本體的電源鍵不放的情況下,電腦按 y 繼續。有時要試個 4、5 次才會繼續。
刷寫所需的時間除了與韌體大小有關,也和使用 ST-LINK 或樹梅派刷寫有關,我個人的經驗是約 52MB 韌體使用 ST-LINK 刷寫大約是 12 分鐘就結束,網路上有人分享用樹梅派刷寫近 60MB 耗時約 50 分鐘。
做完就大功告成了。在原廠韌體畫面(即薩爾達時鐘畫面)同時按住「方向鍵左+GAME 鍵」就會進入客製韌體,按電源鍵重開機回到原廠韌體。
如果想在「Game&Watch 35 週年款」遊玩上個世紀的 Game&Watch 老遊戲的話,請繼續閱讀「轉換為 retro-go 可用的 Game&Watch 復古遊戲」。
心得後記
不少復古遊戲玩家都認為 Game&Watch 的螢幕與按鈕太小,遊戲體驗一定不好,Game&Watch 35 週年款的收藏意義大於實用價值。不過我個人體驗之後卻不這麼覺得。透過解鎖、擴容、刷寫支援更多平台的 sylverb 版自製韌體與雙系統之後,這台掌機成為了出門必備良品。體積夠小,可以隨意放在身上任何一處口袋,收取相當便利,秒開機,關機即時存檔,支援遊戲即時狀態存取,隨時隨地拿出來接續遊戲進度毫無懸念,而且非常省電。它支援遊戲的 0.5/0.75 慢速運行(MD 遊戲目前不支援慢速),玩起射擊遊戲這類即時反應的遊戲難度大幅降低。搭載的螢幕雖然不大,但是螢幕解析度 320x240 對於紅白機、PC-E、MD 這類低解析度的老主機已是綽綽有餘,螢幕發色也很不錯。最近幾天利用生活的碎片時間,一些昔日想玩卻沒玩到、當時怎麼玩都破不了關的遊戲,經由 CHEAT_CODES=1 的作弊神功加持,全都逐一在這台掌機上破關補完了,對我來說它已是實用性遠大於收藏。
不過它也是有一些缺點,例如十字鍵偏小容易誤按,A 鍵太靠近本體邊緣不好連打,喇叭聲音太小(國外有改裝耳機埠的教學),retro-go 支援的遊戲也有限(不是所有的 nes/pce/md... 都能玩,有些 PC-E 或 MD 的遊戲甚至還會固定閃退)。不過對於一台僅以 788 元入手,以及花點小錢擴容的機器來說,CP 值仍是很值得。截至撰寫本文時,摸摸電商的 888 元特價活動仍在,PCHome 上也有在販售 Wame&Watch 薩爾達款,兩台合購也只要 1,680(平均一台不到 850元),建議愛好復古遊戲者、並且對自己焊工手藝有信心和 DIY 感興趣的人,可以趁便宜時買來搞搞玩玩看。
補充:轉換為 retro-go 可用的 Game&Watch 復古遊戲
上個世紀的 Game&Watch 也可以用模擬器來運行。不過和一般的遊戲 ROM 很不同的是,最原始的 Game & Watch 的 ROM 檔並未包含(也不可能包含)圖像資料,所以模擬 Game&Watch 的遊戲還得額外載入特別製作的圖像素材(另稱「裝飾檔」)才能正常遊玩。以 Retropie 這個模擬器來說,直接載入別人已整合完成的 .gnw 檔案即可,MAME 的話就必須同時具備遊戲 ROM 的 .zip 與素材的 .zip (檔名與副檔名都相同的兩個檔案)才能正常遊玩。
至於 retro-go 採用的 Game&Watch ROM 檔,則必須使用 MAME 的格式,透過 bzhxx/LCD-Game-Shrinker 這個工具轉換成 .gw 之後,再放到 retro-go 的 roms/gw 目錄底下,轉換工具必須在 Linux 的環境下操作(建議使用 Ubuntu 22.04,樹莓派建議最新版 Raspbian GNU/Linux 11 bullseye )。詳細的操作方式可以參考 DNA64/LCD-Game-Shrinker-Guide.md 這篇文章。做法如下:
# 套件更新 # 下載與安裝 LCD-Game-Shrinker 工具 cd ~ |
接著安裝 Inkscape ,它是知名的編修向量素材的軟體。
sudo apt install inkscape -y |
繼續將 MAME 格式的 Game&Watch 遊戲檔案(有兩個,遊戲 ROM .zip 與 素材 .zip,檔名和副檔名都一樣的兩個檔案),分別放到以下兩個目錄中
- ~/LCD-Game-Shrinker/input/rom:遊戲 ROM .zip
- ~/LCD-Game-Shrinker/input/artwork:遊戲素材 .zip
(2023.02.15 補充)由於 sylverb 在最新版的 game-and-watch-retro-go/LCD-Game-Emulator 模擬器中移除對 .lz4 壓縮格式的支援,改成只支援 .lzma 格式(因為 .lzma 壓縮後體積更小,可在有限的容量中放入更多 G&W 遊戲),所以要手動修改 LCD-Game-Shrinker 轉檔程式。使用任何一種文書編輯器(nano 或 gedit)開啟 ~/LCD-Game-Shrinker/shrink_it.py ,找到下圖中紅框的兩行(第 55,56 行):
把這兩行前面的 # 對調:
#COMPRESS_WITH = LZ4_COMPRESSOR COMPRESS_WITH = LZMA_COMPRESSOR |
將 shrink_it.py 存檔。最後執行 LCD-Game-Shrinker:
cd ~/LCD-Game-Shrinker python3 shrink_it.py |
執行過程如下:
如果遊戲夠多的話(根據 WIKI 資料大約是近 60 款遊戲),全部轉完也要幾分鐘的時間。若一切順利的話,在 ~/LCD-Game-Shrinker/output 目錄下會生成 .gw 檔案,這些就是 retro-go 可用的 Game&Watch 遊戲 ROM 檔。附帶一提的是,~/LCD-Game-Shrinker/preview 目錄下是遊戲預覽圖,可用來製作遊戲封面。
不過,若是出現「returned non-zero exit status 1.」錯誤(發生於 Inkscape 0.92 版)或「FileNotFoundError: [Errno 2] No such file or directory」錯誤(發生於 Inkscape >= 1.2 版)的話,則可能是 apt 預設下載的 Inkscape 版本與 LCD-Game-Shrinker 不相容。經測試與 LCD-Game-Shrinker 相容的 Inkscape 版本是 1.0 與 1.1。有兩種方式:
方法一:apt 查詢可安裝的版本
apt policy inkscape |
查詢結果如下:
如果出現的是 1.0 或 1.1 版,安裝時只要輸入完整的版本號碼(上圖黃框處)即可。指令如下:
sudo apt install inkscape=1.1.1-3ubuntu1~bpo20.04.1 -y # 執行 LCD-Game-Shrinker cd ~/LCD-Game-Shrinker python3 shrink_it.py |
方法二:如果方法一沒有出現 1.0 或 1.1 版時,就只能用這個方法了。將版本資訊加入 apt 安裝源,完整指令如下:
sudo add-apt-repository ppa:inkscape.dev/stable-1.1 sudo apt update sudo apt install inkscape # 執行 LCD-Game-Shrinker cd ~/LCD-Game-Shrinker python3 shrink_it.py |
當然了,復古 Game&Watch 遊戲也可自製封面,一併放到 ~/gnw/game-and-watch-retro-go/roms/gw 底下,再透過步驟 4.3 編譯上傳。
額外項目:有限運行超任特定遊戲
如果各位的 Game & Watch 35 周年款已經黑工程成功,暢玩紅白機、PC-E、Sega MD 等第三世代、第四世代的遊戲,那麼可能跟我有一樣的疑問:這台機器能不能執行同樣是第四世代的超級任天堂(SFC)遊戲呢?不久前在 Github 上發現兩個專案,分別是 marian-m12l/game-and-watch-smw 與 marian-m12l/game-and-watch-zelda3,顧名思義,是在 Game & Watch 35 週年款運行超任遊戲「超級瑪利歐世界」(美版 Super Mario World)和「薩爾達傳說:眾神的三角神力」(美版 Legend of Zelda, The - A Link to the Past ) 。不過嚴格來說它並不是一般認知的模擬器方案,而是 Rom Patched 的手段,讓遊戲移植到其他平台上運作。
我找時間依照說明試了一下,超級瑪利歐世界會出現記憶體刷寫錯誤而失敗,不過超任版薩爾達是真的可以運行,音樂和音效也都有,幀率穩定 30fps ,實在是太神奇了。可惜的是超任的按鈕比 Game & Watch 多出好幾顆,遊戲玩起來實在很憋扭。編譯刷寫的方法和 game-and-watch-retro-go 非常類似,不同的地方在於 ToolChain 的 GCC 版本必須使用 12 版以上(12.3.1-1.2),編譯時把文章中的 gccver=10.3.1-2.3 改成 gccver=12.3.1-1.2 就差不多了,有興趣的人可以試試看。
補充項目:有限運行超任遊戲「超級瑪利歐世界」與「薩爾達傳說:眾神的三角神力」
最新版的 retro-go 韌體新增支援超任的特定兩款遊戲:「超級瑪利歐世界」(美版 Super Mario World)和「薩爾達傳說:眾神的三角神力」(美版 Legend of Zelda, The - A Link to the Past )。由於這兩款遊戲是以反向工程(拆解遊戲 ROM 檔 Patched)的手段來實現移植至其他平台運行,因此兩款遊戲有各自的執行程式,並非常見的模擬器讀取 ROM 檔運作。目前 retro-go 客製韌體支援的超任遊戲也只有這兩款,整理 ROM 的方式也和其他復古遊戲有些不同。
作法如下:
1.由於是 Patched ROM 檔,所以遊戲的 ROM 檔版本有嚴格限制。
- 「超級瑪利歐世界」必須是美版的 ROM,SHA-1 值為 6B47BB75D16514B6A476AA0C73A683A2A4C18765 ,MD5 值為 CDD3C8C37322978CA8669B34BC89C804。
- 「薩爾達傳說:眾神的三角神力」美版 ROM 的 SHA-1 值為 6D4F10A8B10E10DBE624CB23CF03B88BB8252973,MD5 值為 608C22B8FF930C62DC2DE54BCD6EBA72。
2.「超級瑪利歐世界」的 ROM 檔名限定為 smw.sfc,放置於 retro-go 的 game-and-watch-retro-go\roms\smw 目錄下。「薩爾達傳說:眾神的三角神力」的 ROM 檔名限定 zelda3.sfc,放置在 game-and-watch-retro-go\roms\zelda3 目錄下。意即一目錄僅一個遊戲。
3.make romdef ROMINFOCODE=UTF-8 指令並不會產生這兩款遊戲的 json 文件,所以需要自行製作 smw.json 與 zelda3.json 文件。或是修改 retro-go 的 parse_romdef.py 原始檔,再交由 make romdef 產生 json 文件檔案。
4.可自行製作遊戲封面,邏輯與其他遊戲相同,即 smw.jpg 與 smw.sfc 同目錄,zelda3.jpg 與 zelda3.sfc 同目錄。封面大小可在 json 文件內自行定義(_cover_height 與 _cover_width)。
5.「薩爾達傳說:眾神的三角神力」也支援其他語系的 ROM 檔。各語系的 ROM 檔 SHA-1 可參考 util.py 原始碼。
雖然 Game & Watch 35 周年款可成功運行這兩款超任遊戲,不過 Game & Watch 按鈕數量和配置與超任有些差異,這兩款遊戲玩起來感覺不太舒服,所以個人認為象徵意義大於實用體驗。希望有朝一日能移植 Gradius III 這類較少按鈕即可暢玩的超任遊戲,似乎就更完美了。
教程參考資料:
- Nintendo Game & Watch 刷機完全攻略
- Zelda Game & Watch Dual System 薩爾達機刷雙系統完全攻略
- Game and Watch 破解刷机教程
- 刷全套遊戲《GAME & WATCH 專用機》一機搞定全部擁有
資源:
留言列表