尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Tama P1 拓麻歌子模拟器在 Flipper Zero 上怎么玩:快速上手完整指南

Tama P1 拓麻歌子模拟器在 Flipper Zero 上怎么玩:快速上手完整指南 Tama P1 拓麻歌子模拟器在 Flipper Zero 上怎么玩快速上手完整指南【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper想在 Flipper Zero 上养一只拓麻歌子Tamagotchi P1本指南带你三步把 tama_p1 模拟器跑起来ROM 怎么放、fbt 怎么快速编译部署、按键怎么映射并讲清 4 位 CPU 模拟、硬件抽象层与存档的原理新手友好。先看效果它到底是什么一句话这是一个跑在 Flipper Zero 上的拓麻歌子初代Tamagotchi P1模拟器插件把 32×16 的像素宠物理化到你手掌里的 128×64 屏幕上还带声音和存档。项目源码在 tama_p1/ 目录下采用应用外壳 模拟内核的分层结构各部分职责如下文件/目录职责tama_p1.c应用主入口读 ROM、事件循环、画面渲染、存档读写tama.h路径常量、缩放因子与应用状态结构定义hal.chal_types.h硬件抽象层把模拟器接到 Flipper 的定时器、屏幕、蜂鸣器tamalib/跨平台模拟内核cpu.c、hw.c、tamalib.cicons/compiled/8 个 LCD 状态图标的源文件与编译产物头文件application.fam构建元数据外部插件.fap、入口函数、1KB 堆栈、依赖 gui 与 storage、归类到 Games_Extra三步跑起来第一步ROM 怎么放先弄清楚目标路径。模拟器只认 SD 卡上的一个固定位置由 tama.h 写死/ext/tama_p1/rom.bin操作步骤在 microSD 卡根目录新建tama_p1文件夹网上找到 Tamagotchi P1 的 ROM 文件README 提到流传的文件名叫a重命名为rom.bin放入文件夹完成。读入后代码还会做一次半字节重排——因为 P1 是 4 位机程序按半字节组织读出的字节流需要两两交换高低位才可用。没找到 ROM 时屏幕显示 No ROMCPU 中途崩溃则显示 Halted。第二步fbt 快速编译把tama_p1整个文件夹拷入你本地固件源码树的applications/plugins/tama_p1本仓库是只读镜像请操作自己的本地副本然后用固件自带的fbt一条命令完成编译 部署 启动./fbt launch_app APPSRCapplications/plugins/tama_p1注意README 原文写的是 Windows 风格的applications\plugins\tama_p1在 Linux/macOS 的 Shell 里反斜杠会被转义吞掉必须改成上面的正斜杠写法详见后文避坑清单。如果 8 个状态图标没有编译再补一条资源编译命令scripts/assets.py icons applications/plugins/tama_p1/icons applications/plugins/tama_p1/compiled它在compiled/下生成assets_icons.h声明I_icon_0~I_icon_7供渲染时引用。第三步部署与验证执行上面的launch_app后固件会自动推送到设备并启动应用画面出现宠物、上下各有状态图标 → ROM 加载成功按左键/A、中键/B、右键/C 能操作 → 输入链路正常退出后重进宠物还是上次的状态 → 存档正常存档自动写到/ext/tama_p1/save.bin。想深入排查时可挂上串口日志观察TamaP1/TamaLIB两个 Tag 的输出ROM 加载、按键事件、存档读写都会打印用串口日志脚本FlipperScripts 的serial_logger.py在另一终端监听即可。操作手册按键映射Flipper 按键对应动作左键拓麻歌子 A 键OK 键拓麻歌子 B 键右键拓麻歌子 C 键上键 静音模拟同时按住 A C下键短按 立即保存游戏状态返回键短按同样触发立即保存返回键长按保存并退出应用两个隐藏功能值得记住上键是静音它并不是独立开关而是同时向模拟内核上报 A 和 C 按下/松开下键短按和返回键短按都是随手存一下配合长按返回的退出存档你可以做到随时不丢进度。你一定会踩的坑避坑清单 ️坑 1README 前后矛盾——到底有没有存档正文 How to play 一节写着当前无存档退出会重置进度但 Implemented 一节又列出了保存/加载模拟器状态存于/ext/tama_p1/save.bin。看源码就能判断存档功能真实存在且默认生效前一句是过时描述。识别方法退出后看 SD 卡tama_p1目录里有没有多出一个save.bin有就说明在存。坑 2路径反斜杠在 Linux 上会翻车。README 里的APPSRCapplications\plugins\tama_p1是 Windows 写法。在 Linux/macOS 终端里反斜杠是转义符整个路径会变成一串怪字符fbt找不到目录直接报错。规避一律改用正斜杠applications/plugins/tama_p1。坑 3编译被未使用参数告警卡住。TamaLIB 的cpu.c、hw.c在严格告警配置下会报 unused parameter可能被当错误中断构建。规避在本地固件的site_cons/cc.scons的CCFLAGS里追加-Wno-unused-parameter改的是你本地的固件树与本仓库无关。坑 4ROM 放错位置或没改名。模拟器只查/ext/tama_p1/rom.bin这一个路径文件夹名、文件名错一个字母都会显示 No ROM。SD 卡热插拔后若仍显示 No ROM先确认文件确实拷进去了。它凭什么能模拟一次看懂源码原理核心类比TamaLIB 是模拟器本体hal.c是插在模拟器和真实硬件之间的转接器——TamaLIB 只管4 位 CPU 该干什么转接器负责回答在这块硬件上具体怎么干要时间戳就查 STM32 的 TIM2 硬件定时器预分频 999约 64 kHz要画像素就写进一个uint32_t framebuffer[16]每行 32 个像素正好一行一位要响铃就把 TamaLIB 上报的频率除以 10 换算后驱动蜂鸣器。这样同一套模拟内核能跑在桌面、Arduino 或 MCU 上换台设备只需重写一个hal.c。被模拟的 CPU 长什么样P1 用的是 Epson 4 位 MCU整个地址空间只有 4096 个 4 位单元每个单元只有 4 bit不是 8 bit布局如下区域地址范围大小4 位单元RAM0x000~0x27F640显示区 1LCD0xE00~0xE4F80显示区 2LCD0xE80~0xECF80I/O 寄存器0xF00~0xF7F128为了省 STM32WB 宝贵的内存代码默认开启LOW_FOOTPRINT模式只把真实存在的区域打包进约 464 字节的缓冲区两个半字节挤进一个字节读写时用按位宏SET_RAM_MEMORY/GET_RAM_MEMORY操作而不是老老实实分配 4096 字节。渲染节奏独立模拟线程只负责一步步tamalib_step()GUI 线程以 30 FPS 定时取锁、把 32×16 矩阵放大 2 倍64×32居中绘制上下两排按位点亮 8 个 14×14 的状态图标。两个线程共享一把递归互斥锁 消息队列保证画到的一定是完整的一帧。存档长什么样save.bin把整个模拟世界原样打包布局紧凑且按顺序排列区段内容头部4 字节魔数TLST 1 字节版本号当前为 2CPU 状态PC、X、Y、A、B、NP、SP、Flags 寄存器计时器tick 计数、时钟/可编程定时器时间戳、使能与重载值、调用栈深度中断16 个中断槽每槽 factor/mask/triggered 各 1 字节内存快照640 字节整块 RAM 128 字节 I/O加载时先校验魔数和版本不匹配就打 FATAL 日志放弃恢复恢复完成后调用tamalib_refresh_hw()让显示与蜂鸣器状态重新同步——这就是退出再进宠物还在的全部秘密。目前的边界单存档只有唯一的save.bin没有多槽位Slots无游戏内软重置想重开只能退出重进测试模式未实现进不了 P1 固件自带的自检蜂鸣器音量不可调加速Fast-forward只有占位代码里fast_forward_done直接置真注释明写 TODO写在最后 tama_p1 证明了 Flipper Zero 插件生态的灵活性一个跨平台模拟内核 不到两百行的转接层就能把 32,768 Hz 的 4 位掌机完整搬进 STM32WB。装好 ROM 三分钟开玩读懂源码一小时受益——想继续深挖可以看看 tamalib/ 里的 4 位指令集与硬件状态机实现或逛逛 Applications/ 目录下的其他游戏类插件下一只虚拟宠物也许就差一个 ROM。【免费下载链接】FlipperPlayground (and dump) of stuff I make or modify for the Flipper Zero项目地址: https://gitcode.com/GitHub_Trending/fl/Flipper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表