← 返回信息流
AI 资讯Hacker News·2 小时前

TI-84 Plus操作系统完整逆向工程解析

原标题:Full Reverse Engineering of the TI-84 Plus Operating System

速览

本文详细展示了TI-84 Plus计算器操作系统的完整逆向工程过程。通过深入分析其底层代码和架构,揭示了该经典教育计算设备的软件实现细节。这一工作不仅有助于理解传统嵌入式系统的开发模式,也为相关硬件的安全研究和功能扩展提供了重要参考。

AI 深度解读

TI-84 Plus 操作系统完整逆向工程深度解读

背景

TI-84 Plus 是一款在教育和工程领域广泛使用的图形计算器,其核心架构基于 Zilog Z80 处理器。尽管 Z80 拥有 16 位地址总线,理论上可寻址 64 KiB 的逻辑空间,但 TI-84 Plus 的实际硬件配置远超这一限制:它配备了 1 MiB 的 Flash 存储和 128 KiB 的 RAM。

为了在有限的寻址能力下管理庞大的存储资源,TI 设计了一套复杂的硬件分页机制。此次逆向工程的目标文件为 ti84plus.rom(1 MiB 的 Flash 转储镜像),操作系统自标识版本为 2.55MP。研究团队使用 Ghidra 进行了反编译和分析,项目名为 ti84.gpr,并提供了通过 tools/build.sh 脚本重建项目的工具。

值得注意的是,该逆向工程文档引入了明确的置信度标记体系,以确保技术分析的严谨性:

  • [confirmed](已确认):已在反汇编或反编译器中验证。
  • [standard](标准):符合 TI-83+/84+ 的文档架构,且与反汇编结果一致。
  • [hypothesis](假设):基于推断,尚未得到最终验证。

核心内容

系统架构概览:分页与系统调用

TI-84 Plus 的操作系统是一个单任务监控程序(Single-tasking Monitor)。其核心架构解决了“小寻址空间”与“大存储空间”之间的矛盾,主要依赖两大机制:

  1. 4 槽分页方案(4-Slot Paging Scheme): 系统通过硬件 Flash/RAM 分页技术,将 1 MiB Flash 和 128 KiB RAM 映射到 64 KiB 的逻辑地址空间中。代码和数据被分割成 16 KiB 的页面,通过切换页面来访问不同区域。

  2. 系统调用机制(bcalls): 这是 TI 操作系统特有的内部通信协议。位于 Flash 不同页面的代码可以通过 bcalls 调用其他页面的例程。这种机制使得分散在 Flash 各处的 OS 例程能够协同工作。

内存布局与核心组件

  • Flash Page 0:始终映射在低地址区域,包含引导程序(Boot)和内核核心(Kernel Core)。
  • 其他 Flash 页面:包含庞大的 OS 例程库,通过 bcalls 被访问。
  • 固定 RAM 区域:用于保存系统状态,包括标志位、浮点寄存器、显示缓冲区以及变量表(Variable Table)。

用户交互的四大支柱

用户所看到的所有交互界面——包括主屏幕(Homescreen)、TI-BASIC 程序、绘图功能以及目录(Catalog)——均建立在以下四个核心技术支柱之上:

  1. 分页 + bcalls: 这是访问超出 64 KiB 限制代码和数据的基础设施。相关细节详见文档 02-paging.md03-bcall-mechanism.md

  2. 浮点引擎(Floating-Point Engine): 所有数学运算都流经此引擎。它使用 9 字节的 BCD(二进制编码十进制)格式存储实数和复数,数据暂存在 OP1 至 OP6 寄存器中。

  3. 变量系统(VAT - Variable Allocation Table): 这是一个命名对象目录,用于管理实数、列表、矩阵、字符串、程序和应用变量(appvars)等。所有用户数据都通过 VAT 进行编目和管理。

  4. 词法分析器/解析器(Tokenizer/Parser): TI-BASIC 程序在存储时采用 1 字节或 2 字节的 Token 形式。解析器负责读取这些 Token 并执行相应的指令。

I/O 子系统

围绕上述核心支柱,系统还集成了多个 I/O 子系统,包括:

  • IM1 中断:负责驱动计时器、自动断电(APD)、光标显示和 ON 键响应。
  • LCD 驱动器:控制屏幕显示。
  • 键盘扫描器:处理用户输入。
  • 链路端口(Link Port):用于计算器之间的数据通信。

文档结构与索引

逆向工程笔记提供了详细的子系统索引,将文档映射到具体的功能模块:

  • *子文档(sub- docs)**:深入探讨面向用户的功能和 I/O 内部细节,涵盖计算、绘图、TI-BASIC、VAT/归档、应用程序、统计、矩阵、求解器、表格、方程显示、链路及 USB 辅助等功能。
  • 入门指南:新用户建议先阅读《约定与方法论》(了解地址读取和置信度标记)以及《术语表》。
  • bcalls 索引:提供完整的字母顺序系统调用参考。

关键地址与 Boot 细节

  • 0x4xxx 地址空间:主要的 bcalls 表,包含 TI-OS 类型。
  • 0x8xxx 地址空间:零售版启动 bcalls 表,数据来源于本地完整的 ROM。
  • Flash Page 3F:大多数启动 bcalls 的主体代码位于此页。
  • Flash Page 2F:包含 USB 启动例程,如 _AttemptUSBOSReceive_ReceiveOS_USB_InitUSB_KillUSB

关键要点

  • 硬件限制与突破:TI-84 Plus 使用 Z80 处理器,受限于 64 KiB 的逻辑寻址空间,但通过 4 槽分页机制成功管理了 1 MiB Flash 和 128 KiB RAM。
  • 单任务监控架构:操作系统是单任务的,核心内核固定在 Flash Page 0,其余功能通过分页和 bcalls 分散存储。
  • 数据运算核心:浮点运算依赖 9 字节 BCD 格式,所有数学计算必须经过 OP1-OP6 寄存器。
  • 数据存储机制:变量系统(VAT)是管理所有用户数据(程序、变量、矩阵等)的核心目录结构。
  • 语言执行方式:TI-BASIC 不是解释纯文本,而是通过词法分析器执行压缩后的 Token 流。
  • 逆向工程严谨性:分析结果分为“已确认”、“标准”和“假设”三个置信度等级,确保技术文档的可靠性。
  • USB 支持位置:USB 相关的启动例程(如初始化、接收 OS 数据等)具体位于 Flash Page 2F。

意义与影响

此次对 TI-84 Plus 操作系统的完整逆向工程,不仅揭示了经典教育计算器的底层工作原理,也为嵌入式系统开发、复古计算研究以及硬件安全分析提供了宝贵的参考。

  1. 教育工具的透明度:TI-84 系列是许多学生接触编程和高级数学的起点。公开其底层架构细节,有助于开发者创建更高效的第三方工具、模拟器或教育软件。
  2. 嵌入式分页技术的案例研究:该案例展示了如何在资源受限的 8/16 位微控制器上,通过硬件分页和软件调用机制(bcalls)实现超越物理寻址限制的大规模程序运行。
  3. 固件分析与安全:详细的 bcalls 索引和内存布局分析,为固件修改、漏洞挖掘以及理解专有操作系统的设计模式提供了基础。
  4. 开源社区贡献:通过提供 Ghidra 项目和重建脚本,研究团队降低了其他开发者参与 TI 计算器逆向工程的门槛,促进了开源硬件社区的协作。

这一工作将原本黑盒化的商业固件转化为可理解、可分析的技术文档,体现了开源精神在硬件逆向工程领域的价值。

查看原文 →siraben.github.io