← На главную

Инженеры восстановили полную прошивку TI-84 Plus

08.06.2026 17:41 · hackernews

Инженеры восстановили полную прошивку TI-84 Plus с дампом флеша на 1 МиБ. Операционная система опознаёт себя как версию 2.55MP. Внутри стоит процессор Zilog Z80 с 16-битной адресной шиной и логическим пространством всего 64 КиБ. Задача — уместить 1 МиБ флеша и 128 КиБ RAM в этот крошечный адресный тайник. Решение — аппаратный пейджинг через 4 слота и система вызовов bcall, которая позволяет коду на одной 16-КиБ странице обращаться к подпрограммам на любой другой.

Вся ОС — это однозадачный монитор. Ядро и загрузчик сидят на странице 0 флеша (всегда внизу адресов), остальные системные процедуры разбросаны по остальным страницам и доступны только через bcalls. Фиксированная область RAM хранит флаги, регистры с плавающей точкой, буферы дисплея и таблицу переменных.

Четыре столпа, на которых держится всё, что видит пользователь (домашний экран, TI-BASIC, графики, каталог): пейджинг и bcalls, девятибайтный движок BCD для вещественных и комплексных чисел (регистры OP1–OP6), система переменных VAT (таблица размещения объектов) и токенизатор/парсер TI-BASIC. Вокруг них — подсистемы ввода-вывода: прерывание IM1 (таймеры, автоотключение, курсор, кнопка ON), драйвер ЖК-дисплея, сканер клавиатуры и link-порт.

Вся документация разбита на 14 основных и 12 глубоких (sub-*) файлов. Основные покрывают карту памяти, пейджинг, механизм bcall, прерывания, VAT, BCD-формат, токенизатор, LCD, клавиатуру и link, карту bcalls, загрузчик и контексты, управление кучей RAM и архивацию, содержимое 64 страниц флеша и правила восстановления страницы RAM 83. Отдельно есть файл с открытыми вопросами для будущей работы.

Глубокие погружения (sub-*) разбирают расчёты с плавающей точкой, графику (окна, преобразование координат, примитивы, Y=), исполнение TI-BASIC, трассировку тестов, управление VAT и архивированием, запуск приложений и сброс RAM, статистику (1/2-переменные, регрессии), матрицы и списки (обращение Гаусса-Жордана, определитель, произведение), численные методы (решатель, производная, интеграл, TVM-финансы), генерацию таблиц (TABLE), отображение уравнений с MathPrint, протокол link и USB-ASIC.

Ключевые bcalls разложены по таблицам: основная по адресу 0x4xxx и загрузочная 0x8xxx из retail-версии ПЗУ. Тела загрузочных bcalls в основном на странице 3F, а USB-подпрограммы вроде _AttemptUSBOSReceive и _InitUSB — на странице 2F. Сборка проекта — через tools/build.sh.

Читать оригинал →