A9VG电玩部落论坛

 找回密码
 注册
搜索
查看: 209311|回复: 180

game watch双系统制作教程

[复制链接]

精华
0
帖子
486
威望
0 点
积分
509 点
种子
16 点
注册时间
2006-5-15
最后登录
2024-7-2
 楼主| 发表于 2021-5-28 03:40  ·  安徽 | 显示全部楼层 |阅读模式
本帖最后由 hitomilee 于 2021-8-18 03:45 编辑

一、准备工作
1、  ST-LINK V2编程器,TB上那种40多块钱的那种就好,
2、  杜邦线若干最好是一头母,一头公的那种
3、  树莓派一个(型号随意),刷官方系统或者苹果系统的Macos(可以虚拟机安装黑苹果),推荐用树莓派,各种教程很多都是基于这个的,其他系统Ubuntu之类应该也可以,我没时间测试,就试了这两个
4、  更换用的 SPI闪存,目前支持的型号有MX25U12835F,MX25U25635F,MX25U51245G,MX25U8035F,MX66U1G45G,MX66U2G45G等,目前用的比较多的是MX25U12835F,128Mbit的容量,有16MB的空间,够用了。TB上MX25U12835F大概10块钱一个,其他型号的我未测试,但是在外网看到有成功的,但是最好买SOP-8针脚的,电压是1.8V的那种,其他的封装的也是买8脚的,电压要一致。
5、  Y字型小螺丝刀一个(拆后盖)
6、  电烙铁、热风枪(拆换闪存芯片用的)

二、配置软件与环境
以下操作都是以树莓派为主,有Macos操作的我会单独说明
首先树莓派系统装好联网后,使用SSH工具进行连接(我使用的是XSHELL,方便操作,头铁的可以直接用树莓派操作),连接后我们需要给系统安装必要工具,树莓派就需要安装一个lz4压缩软件就可以了,Macos需要安装 wget,和git工具,最好先安装brew工具,然后还需要安装lz4压缩软件,而且必备软件路径与树莓派不一样,请注意。具体命令如下(树莓派):
sudo apt update
sudo apt upgrade
sudo apt install mc
sudo apt install lz4
(苹果系统使用如下命令安装必要软件)
brew install --HEAD openocd
brew tap ArmMbed/homebrew-formulae
brew installarm-none-eabi-gcc
brew install lz4
brew install wget
brew install python3
brew install git

继续,
mkdir -p ~/opt
cd ~/opt
tar xvf ../xpack-openocd-0.10.0-15-linux-arm.tar.gz
chmod -R -wxpack-openocd-0.10.0-15/
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
export PATH=$PATH:/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/
(苹果系统安装后的路径是/Applications/ARM/bin)
export OPENOCD="/home/pi/opt/xpack-openocd-0.10.0-15/bin/openocd"

这时候使用
ls –la
命令列目录,当前目录下文件应该如下
配置UDEV规则
sudo cp ~/opt/xpack-openocd-0.10.0-15/contrib/60-openocd.rules/etc/udev/rules.d/
sudo udevadm control--reload-rules

三、 拆机连接编程器
GW拆机后,第一件事是拔掉电池排线,然后能看到在背面靠近喇叭的位置,有5个控制接口如图
从左往右分辨是 SWCLK、VDD、GND、SWDIO、NRST
STLINK编程器的接口定义如下图:
注意按缺口方向辨别
我们要做的就是用杜邦线连接GW与STLINK编程器
SWCLK口连接STLINK的9号口,VDD空着不连,GND连接STLINK的4号接口,SWDIO连接STLINK的7号口,NRST连接STLINK的15号口。网上不建议连接VTref口,说会有概率损毁存储芯片,我接上了没问题,可以不接,接的话VDD口连接STLINK1号口。

然后STLINK连接树莓派(或者MacOs电脑),GW插上TYPE-C接口供电


接着回到SSH中端命令行,测试STLINK是否正常
$OPENOCD -f inte**ce/stlink.cfg -c "adapter speed300; transport selecthla_swd" -ftarget/stm32h7x.cfg  (如果提示没有OPENCD,请重新定义一下exportOPENOCD="/home/pi/opt/xpack-openocd-0.10.0-15/bin/openocd")(命令行内容论坛有屏蔽,建议下载下面的网盘内的电子档查看)
如果没问题,我们就可以进行开始进行固件的备份和解锁还有恢复操作了。
cd game-and-watch-backup
测试程序是否工作正常
./1_sanity_check.sh
备份固件
./2_backup_flash.sh stlink
备份内存(此步骤可多次尝试,务必确保保存成功)
./ 3_backup_internal_flash.sh stlink
解锁设备(解锁后,可以刷入非官方固件)
./4_unlock_device.sh stlink
恢复备份(操作后,换内存后再执行一次)
./ 5_restore.sh stlink
这样,你就得到了完整的备份文件,在game-and-watch-backup/backups目录下有三个文件flash_backup.bin,internal_flash_backup.bin,itcm_backup.bin。复制一份到其他地方,防止丢失。
四、更换内存
接着,我们开始进行更换内存,如果技术不好的,推荐用风枪吹下内存,或者去修手机店的地方帮你焊接,注意针脚方向位置,技术好的,完全可以用刀头电烙铁更换,注意旁边的芯片,最好贴上隔热绝缘胶带。
换好芯片后,接上STLINK,接上TYPE-C电源,我们需要把原始固件恢复进去
在game-and-watch-backup目录下,继续执行
./ 5_restore.sh stlink
如果提示失败,请断开电源和STLINK,再重新插上,然后执行,还不行就按住GW电源键执行。恢复完成后,屏幕会每秒闪动一次,然后断开电源和STLINK,再插上,这时候正常的话,GW会回到时钟界面,如果花屏的,黑屏的,请重复尝试,如果还不行,可以尝试把芯片一脚接GND
然后接上VTref和VDD口,再试试,我遇到过,这样操作好了
具体更换芯片可以去看看
(需要富强上网)
五、编译游戏ROM与刷回自制程序
然后接着,我们就可以进行编译游戏ROM的操作了
回到SSH界面
cd ..  (回到OPT目录下)
cd game-and-watch-flashloader
然后利用SSH工具,把Drivers目录解压并传到game-and-watch-flashloader目录下,因为程序需要用到这个芯片的驱动,传输完成然后接着输入:
make GCC_PATH=/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/
(Macos操作为make GCC_PATH=/Applications/ARM/bin)
以上为编译FLASHLOADER程序
cd ..  (返回OPT目录)
git clone --recurse-submodules https://github.com/kbeckmann/game-and-watch-retro-go   
cd game-and-watch-retro-go
git submodule update –init (此步骤为更新子模块,默认GIT的时候会出现注册子模块失败的问题)
以上操作完后,同样,利用SSH工具把Drivers目录传到game-and-watch-retro-go目录下,才能正常编译操作,传输完成后,接着操作:
cd ..
ls –la
这时候OPT目录下应该是如下文件
然后就可以用SSH自带的工具SFTP这样的把文件传输到game-and-watch-retro-go目录下的对应的模拟器路径下,貌似不支持zip格式的ROM,只能用.nes .gb  .gbc这样的
GB和GBC都可以放在gb目录下
/home/pi/opt/game-and-watch-retro-go/roms/gb
/home/pi/opt/game-and-watch-retro-go/roms/gg
/home/pi/opt/game-and-watch-retro-go/roms/nes
/home/pi/opt/game-and-watch-retro-go/roms/sms

放好ROM后,我们需要查看一下ROM的合计大小,建议实际大小比存储芯片大小要小2MB左右,比如16MB的存储芯片,我们ROM大小最好控制在14MB左右,如果我们不需要做双系统,那么我们可以直接编译写入,这样原系统将替换为game-and-watch-retro-go程序,但是我们这次讲的是双系统,所以我们还需要修改以下5个文件,才能开始编译
1、 打开game-and-watch-retro-go/Core/Src/main.c
修改223行: uint32_tsave_address = flash_ptr - &__EXTFLASH_REAL__;
修改263行: uint32_tsave_address = flash_ptr - &__EXTFLASH_REAL__;
修改431行://MX_RTC_Init();
修改597行: PeriphClkInitStruct.RTCClockSelection= RCC_RTCCLKSOURCE_LSE;

2、 打开game-and-watch-retro-go/Core/Src/system_stm32h7xx.c
修改267行:SCB->VTOR = FLASH_BANK2_BASE | VECT_TAB_OFFSET; /* Vector Table Relocationin Internal FLASH */

3、 打开game-and-watch-retro-go/Core/Inc/gw_linker.h
在007行后面的第008行添加:
extern uint8_t __EXTFLASH_REAL__;

4、 打开game-and-watch-retro-go/STM32H7B0VBTx_FLASH.ld
修改075行:__EXTFLASH_START__ = 0x90100000;
在0075行后面的0076行添加
__EXTFLASH_REAL__ = 0x90000000;

修改088行:__EXTFLASH_LENGTH__ = DEFINED(__EXTFLASH_TOTAL_LENGTH__) ?__EXTFLASH_TOTAL_LENGTH__ - (__CONFIGFLASH_LENGTH__ + __SAVEFLASH_LENGTH__ +1024K) : 1024K - (__CONFIGFLASH_LENGTH__ + __SAVEFLASH_LENGTH__);
修改107行: FLASH (xr) : ORIGIN = 0x08100000, LENGTH = __FLASH_LENGTH__

5、 打开game-and-watch-retro-go/Core/Src/porting/odroid_system.c
在080行后面添加这两行
*((uint32_t*)0x2001FFF8) = 0x544F4F42; // "BOOT"
*((uint32_t*)0x2001FFFC) = 0x08100000; // vector table

好了,5个文件修改好了后,按照原来的路径覆盖掉,然后开始编译ROM文件,回到SSH命令行界面来:
cd game-and-watch-retro-go  (进入cd game-and-watch-retro-go目录)
export ADAPTER=stlink
export OPENOCD="/home/pi/opt/xpack-openocd-0.10.0-15/bin/openocd"
make GCC_PATH=/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/ LARGE_FLASH=1

然后就是漫长的等待编译,程序会把ROM先用LZ4压缩,再打包
最后在game-and-watch-retro-go/build目录下得到这两个文件
build/gw_retro_go_intflash.bin
build/gw_retro_go_extflash.bin

把这两个文件保存到你的电脑里,顺便把你备份的原始固件也一起保存到电脑里
现在需要用到WINDOWS系统操作,把你的STLINK插到WINDOWS的USB口,建议插电脑的后置口,前置容易供电不足,导致刷写失败,就是我遇到过这个问题困扰了几天。
打开附件文件包里的en.stm32cubeprg-win32_v2-6-0.zip,安装stm32cubeprg程序,安装路径为C:\ProgramFiles (x86)\STMicroelectronics\STM32Cube\STM32CubeProgrammer\
然后再打开STM32CubeProgrammer External Loaders (2021-05-02),把里面的芯片资料文件放到C:\Program Files(x86)\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin\ExternalLoader目录下。

打开附件程序包里的Stock Firmware Patcher这个程序,然后设置如下
Input file选择你的原始固件,Output设置一个保存路径,STM32路径设置你刚才安装的STM32Cube的安装路径,程序一般默认识别,不对的你自己设置一下。其他的按照我的设置即可,然后选择Patch进行创建带有按键菜单的固件,然后接上GW与STLINK编程器,点击UPLOAD,让新修改好的程序上传到GW内,如果识别不到出错,请断开GW电源与STLINK,并重新连接试试。提示DONE,表示上传成功。
这时候GW是在时钟界面
你按住方向键左键+GAME键+A键,能进入菜单说明成功
然后按B退出,先别急,你新做的ROM还没刷入呢。
打开C:\Program Files(x86)\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin 文件夹
把你刚才创建的两个带有ROM的固件放到这个目录下
gw_retro_go_intflash.bin
gw_retro_go_extflash.bin
然后进入CMD模式(WINDOWS10按住WINDOWS键+X键,选择运行,输入CMD回车)
进入STMCUBE程序目录
Cd C:\Program Files(x86)\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin
STM32_Programmer_CLI.exe -c port=SWD -wgw_retro_go_intflash.bin 0x08100000  
回车,然后有进度提示完成后,接着输入
STM32_Programmer_CLI.exe -c port=SWD reset=HWrst -wgw_retro_go_extflash.bin 0x90100000 -el ".\ExternalLoader\MX25U12835F_GAME-AND-WATCH.stldr"–rst  
回车,程序开始刷写,有进度条提示。
(这里的MX25U12835F_GAME-AND-WATCH.stldr是对应你更换的内存芯片型号)

刷写完成后,断开TYPE-C和STLINK,然后接上电池,按一下电源键,时钟界面是不是回来了,你按GAME还是可以选择原装系统的游戏,按住方向键左键+GAME键+A键,进入菜单自制菜单,在RETRO-GO上按A键,进入RETRO-GO,就可以玩FC和GBC之类的游戏了,这时候GAME键就是START,TIME就是select键,至此完成全部操作。


其实还可以玩LCD模拟器,就是模拟原始GAMEWATC爱吃游戏的,需要单独划分空间,我也没去搞了,有兴趣的可以去看看。对了,还有一个备份程序是windows版本的,感兴趣的,也可以去尝试一下


本教程内工具与电子档,提供百度网盘下载
更新------------
忘记把Drivers目录上传上来了,补上链接,另外上面的教程内的文档也更新了一下

=======================
新买了MX25U51245G这个芯片刷机,目前已经刷机成功
说一下几个注意事项
1、这个是512Mb的芯片,封装是QFN,其实只要把SOP的芯片拿掉,把8个焊盘清理一下,上点焊油,把QFN的芯片对准好位置,用热风枪很容易就吹上去了

2、由于更换了64MB的内存,retrogo和flash程序都需要做修改,修改成支持32位(默认24位最高支持128Mb也就是16MB的芯片)
具体修改方法为,下载下面百度网盘内的gnw_flash_menu.sh文件,传到OPT目录,并且设置权限为755(chmod +x gnw_flash_menu.sh),然后在opt目录下输入./gnw_flash_menu.sh执行此文件,选择1,打开32位地址支持。修改后,要先进game-and-watch-flashloader目录下,重新编译一下程序,输入:
cd game-and-watch-flashloader
make GCC_PATH=/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/
然后退出目录,再进入game-and-watch-flashloader目录
直接使用make GCC_PATH=/home/pi/opt/xpack-arm-none-eabi-gcc-10.2.1-1.1/bin/ LARGE_FLASH=1 就可以编译了(可以不用EXTFLASH_SIZE命令去指定芯片大小了),等于默认是创建64MB的文件,所以不是64MB的芯片的兄弟,这部分就别看了
后面附上百度网盘链接


3、对应的,也要在给GW打补丁和在WINDOWS刷写编译好的固件的时候,修改相关的设置

------------------------
下载补丁地址

-------------------------------------------------------------------------------------------------------
7月15日更新
由于新版本retorgo修改了很多文件,导致64M失败,现在放出我自己用的老版本
我分别上传了我的树莓派整个系统的镜像,直接还原就可以使用,安装教程里,把游戏放到ROM下就可以build了,都配置好了,默认是打开了支持64M的32bit,需要用16M的芯片的,使用上面分享的gnw_flash_menu.sh修改回24bit即可,文件是bak.rar,在树莓派2b和4b都测试可用
还单独上传了retrogo的文件包,里面没有drivers文件夹,需要你自己放进去,都已经修改好的,支持64M的32bit版本,需要用16M的芯片的,使用上面分享的gnw_flash_menu.sh修改回24bit即可
链接:https://pan.luryl.com/s/16WDIIs2snca285hmNKMjEA
提取码:waz9

新版本就添加了两个新的模拟器,Sega SG-1000和ColecoVision ,如果对这两个机器没兴趣,可以用我的老版本镜像,直接可以上手操作

----------------------------------------------------------------
8月17日更新
制作带图片中文格式的自制系统,需要下载原系统的分支[size=13.3333px]git clone--recurse-submodules -b NewUI https://github.com/olderzeus/game-and-watch-retro-go

然后把DRIVERS目录丢进去,游戏封面使用png格式的图片,分辨率建议128x96,可以使用微信PC版截图保存,和游戏rom名称一样放在相同目录下即可,然后上传到ROM目录下对应的子目录
命令使用make romdef 创建游戏和图片菜单在rom目录下(需要中文的,可以下载下来自己修改保存后再覆盖原文件),然后就按照正常的创建ROM方式:
make -j8 EXTFLASH_SIZE_MB=63 EXTFLASH_OFFSET=1048576 INTFLASH_BANK=2 (63代表64MB的芯片ROM,16M可以用15,最大支持256MB,新版系统已经默认支持16MB以上芯片,不需要打32bit补丁),新版原作者增加了一些参数,可以直接指定生成bank2文件,不需要修改原来的5个文件。其他用操作和之前的双系统操作一样,用windows 打补丁,然后再用cmd命令行刷刚才创建的ROM进去,有问题的,可以留言,要多善于使用make clean来清除创建的缓存,特别是升级了程序后build失败的,可以尝试make clean清除一下再试试





-----------------------------
8月18日更新无法保存的问题
无法保存是因为新版的双系统BUG,KB大神已经修复,修改下面几个文件即可
1.打开Core/Inc/gw_linker.h 文件
第8行添加:extern uint8_t __EXTFLASH_BASE__;

2.打开Core/Src/main.c 文件
第231行的 uint32_t save_address = flash_ptr - &__EXTFLASH_START__;
替换为:uint32_t save_address = flash_ptr - &__EXTFLASH_BASE__;

第254行的:uint32_t save_address = flash_ptr - &__EXTFLASH_START__;
替换为:uint32_t save_address = flash_ptr - &__EXTFLASH_BASE__;

打开 根目录下的 STM32H7B0VBTx_FLASH.ld
第77行的:__EXTFLASH_START__ = 0x90000000 + __EXTFLASH_OFFSET__;
替换为:__EXTFLASH_BASE__ = 0x90000000;  /* Beginning of addressable extflash addresses */
__EXTFLASH_START__ = __EXTFLASH_BASE__ + __EXTFLASH_OFFSET__;  /* Beginning of where we're going to store emulator and rom data */

第93行的:__SAVEFLASH_START__ = __EXTFLASH_START__ + __EXTFLASH_LENGTH__;
替换为:__EXTFLASH_END__ = __EXTFLASH_START__ + __EXTFLASH_LENGTH__;
__SAVEFLASH_START__ = __EXTFLASH_END__;
第95行的:__CONFIGFLASH_START__ = __SAVEFLASH_START__ + __SAVEFLASH_LENGTH__;
替换为:__CONFIGFLASH_START__ = __SAVEFLASH_END__;

修改后上传覆盖,清除缓存MAKE CLEAN,然后重新BUILD就可以了


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

精华
0
帖子
486
威望
0 点
积分
509 点
种子
16 点
注册时间
2006-5-15
最后登录
2024-7-2
 楼主| 发表于 2021-5-28 03:43  ·  安徽 | 显示全部楼层
在此特别感谢 @战鼓萧瑟 还有 @sg_asoka 两位坛友,感谢他们提供相关资料与教程

精华
0
帖子
486
威望
0 点
积分
509 点
种子
16 点
注册时间
2006-5-15
最后登录
2024-7-2
 楼主| 发表于 2021-5-28 03:47  ·  安徽 | 显示全部楼层
本帖最后由 hitomilee 于 2021-5-28 04:03 编辑

论坛有关键字屏蔽,有的链接内文字变成*号了,为了保证成功,建议下载网盘内电子档操作
大致流程其实就是
1、备份原始固件,并解锁设备
2、更换闪存芯片,并刷回原始固件
3、修改编译程序,并编译游戏固件
4、给GW打补丁,添加自定义菜单
5、刷回编译好的游戏固件

精华
0
帖子
486
威望
0 点
积分
509 点
种子
16 点
注册时间
2006-5-15
最后登录
2024-7-2
 楼主| 发表于 2021-5-28 04:00  ·  安徽 | 显示全部楼层
还有一个双系统的教学视频,优土比上找的,感兴趣的可以富强去看看
https://www.***.com/watch?v=fFf6EUv1VIE&t=1262s
该用户已被禁言

精华
0
帖子
3881
威望
0 点
积分
4348 点
种子
736 点
注册时间
2012-5-21
最后登录
2024-8-8
发表于 2021-5-28 06:37  ·  陕西 | 显示全部楼层
写的真详细。
辛苦了。
发自A9VG Android客户端

精华
0
帖子
142
威望
0 点
积分
153 点
种子
30 点
注册时间
2020-5-5
最后登录
2022-7-10
发表于 2021-5-28 09:20  ·  江苏 | 显示全部楼层
哈哈哈 666 顶贴
不知道W25Q128FW能不能用了
我发的英文教程里有没有看到给打SPI补丁相关的的东西哦?

精华
0
帖子
142
威望
0 点
积分
153 点
种子
30 点
注册时间
2020-5-5
最后登录
2022-7-10
发表于 2021-5-28 09:45  ·  江苏 | 显示全部楼层
本帖最后由 战鼓萧瑟 于 2021-5-28 09:50 编辑

是不是可以理解为Stock Firmware Patcher那步含有打补丁步骤?

哦,看到了,另一个file system builder工具做的,你教程里没贴

精华
0
帖子
1168
威望
0 点
积分
1254 点
种子
70 点
注册时间
2017-8-2
最后登录
2024-11-24
发表于 2021-5-28 13:29  ·  广西 | 显示全部楼层
感谢技术大佬的无私分享

精华
0
帖子
62
威望
0 点
积分
718 点
种子
1011 点
注册时间
2011-9-23
最后登录
2024-10-13
发表于 2021-5-28 14:08  ·  北京 | 显示全部楼层
树莓派本身的io是不是就可以?一定要stlink么?
发自A9VG Android客户端

精华
0
帖子
486
威望
0 点
积分
509 点
种子
16 点
注册时间
2006-5-15
最后登录
2024-7-2
 楼主| 发表于 2021-5-28 14:57  ·  安徽 | 显示全部楼层
战鼓萧瑟 发表于 2021-5-28 09:20
哈哈哈 666 顶贴
不知道W25Q128FW能不能用了
我发的英文教程里有没有看到给打SPI补丁相关的的东西哦? ...

至少双系统的软件里面,没看到这个芯片的写入的配置文件,有对应的stldr文件才可以写入啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2024-11-26 05:22 , Processed in 0.218261 second(s), 14 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部