TI-84 Plus 操作系统的全面逆向工程

2026-06-08 1 阅读 siraben
TI-84 Plus OS — 逆向工程笔记:系统概述 目标:ti84plus.rom(1 MiB 闪存转储)。操作系统自我识别为 2.55MP。 CPU:Zilog Z80(16 位地址总线,64 KiB 逻辑空间),具有硬件闪存/RAM 分页功能。 Ghidra 项目:ti84.gpr(重建:tools/build.sh)。置信度被标记为:[已确认] = 在反汇编/反编译器中验证; [标准] = 匹配记录的 TI-83+/84+ 架构并与反汇编一致; [假设] = 推断,尚未验证。大图 TI-84+ 是一台 Z80 机器,一次只能看到 64 KiB,但具有 1 MiB 闪存和 128 KiB RAM。它通过 4 槽分页方案和系统调用(“bcall”)机制弥补了这一差距,该机制允许一个 16 KiB 闪存页面上的代码调用任何其他页面上的例程。操作系统是一个单任务监视器:闪存页 0 上的启动/内核核心(始终映射为低电平)、大量操作系统例程分布在其他闪存页上并通过 bcall 到达,以及保存系统状态(标志、浮点寄存器、显示缓冲区、变量表)的固定 RAM 区域。用户交互的所有内容(主屏幕、TI-BASIC 程序、图形、目录)均建立在四大支柱之上: 分页 + bcalls——如何访问超过 64 KiB 的代码和数据。 (参见 02-paging.md 、 03-bcall-mechanism.md )浮点引擎 — OP1–OP6 寄存器中的 9 字节 BCD 实数/复数;所有的数学都经过这些。 ( 06-floating-point.md ) 变量系统 (VAT) — 命名对象(实数、列表、矩阵、字符串、程序、appvars...)编目在变量分配表中。 ( 05-variables-vat.md ) 标记器/解析器 — TI-BASIC 存储为 1 字节和 2 字节标记;解析器执行它们。 ( 07-tokenizer-basic.md ) 周围是 I/O 子系统:驱动定时/APD/光标/ON-​​key 的 IM1 中断 ( 04-interrupts.md )、LCD 驱动程序、键盘扫描仪和链接端口。子系统索引 每行将文档页面映射到它所涵盖的子系统及其分析状态。文档子系统 01-memory-map.md 地址空间、端口、RAM 布局 02-paging.md 闪存/RAM 存储(端口 6/7) 03-bcall-mechanism.md rst 28h 系统调用 + 跳转表 04-interrupts.md IM1 ISR、定时器、APD、ON 键 05-variables-vat.md 变量分配表、对象类型06-floating-point.md BCD 浮点格式,OP 寄存器 07-tokenizer-basic.md 令牌表,解析器/解释器 08-display-lcd.md LCD 端口,屏幕缓冲区 09-keyboard-link.md 键盘扫描,链接协议 10-subsystem-map.md bcall API 表面,系统直通线 11-boot-contexts-errors.md 启动,上下文系统, _JError/onSP 12-memory-management.md RAM 堆、VAT/userMem、Flash archive/GC 13-flash-page-map.md 64 个闪存页面中的每一个包含什么 14-ram-pages.md RAM 页面选择器、第 83 页和恢复规则 99-open-questions.md 优先未来工作路线图 sub-calculation.md 计算引擎:FP ops,超越、格式化、错误 sub-graphing.md 绘图:窗口变量、坐标↔像素、绘制基元、Y= eval sub-tibasic.md TI-BASIC:程序执行、控制流、I/O 命令 sub-tibasic-tracing.md TI-BASIC 夹具轨迹、烟雾流道、覆盖锚点 sub-vat-archive.md 变量、Sto/Rcl、存档/取消存档、Flash GC sub-apps-mem-settings.md 应用程序查找/启动、RAM 重置、MODE/格式标志 sub-statistics.md STAT:1/2-var、回归、statVars sub-matrix-list.md 矩阵/列表元素访问、Gauss-Jordan 逆/det、matmul sub-solver-numeric.md 求解器寻根器、nDeriv/fnInt、TVM 财务sub-table-yvars.md 表生成/缓存,Y= 方程变量 sub-equation-display.md 方程显示/MathPrint 布局(第 0x39 页 eqdisp_* ) sub-link-transfer.md 链接协议:字节/数据包/var-传输(第 0x3C 页) sub-usb-asic.md USB ASIC/链接辅助端口和操作系统传输选择(sub-* 文档是深入研究,涵盖面向用户的功能和 I/O 内部结构:计算、绘图、TI-BASIC、VAT/存档、应用程序、统计数据、矩阵、求解器、表格、方程显示、链接和 USB/链接辅助。) 不熟悉这些说明?从约定和方法论(如何阅读地址和置信标志)和术语表开始; bcall Index 是完整的按字母顺序排列的系统调用参考。主 0x4xxx bcall 表和零售引导 bcall 表( 0x8xxx ,来自本地完整 ROM)都携带 TI-OS 类型。大多数引导 bcall 主体位于第 3F 页; USB 启动例程(例如 _AttemptUSBOSReceive、_ReceiveOS_USB、_InitUSB 和 _KillUSB)位于第 2F 页。重建:tools/build.sh。