TI-84 Plus 운영체제 전면 역공학

발행: (2026년 6월 9일 AM 02:41 GMT+9)
6 분 소요

Source: Hacker News

키보드 단축키

  • ← 또는 → 를 눌러 챕터 사이를 이동합니다
  • S 또는 / 를 눌러 책 안에서 검색합니다
  • ? 를 눌러 이 도움말을 표시합니다
  • Esc 를 눌러 이 도움말을 숨깁니다

TI-84 Plus OS — 역공학 노트: 시스템 개요

Target: ti84plus.rom (1 MiB 플래시 덤프). OS는 자체 식별을 2.55MP 로 합니다. CPU: Zilog Z80 (16‑bit 주소 버스, 64 KiB 논리 공간)이며 하드웨어 플래시/RAM 페이지 전환을 지원합니다. Ghidra 프로젝트: ti84.gpr (재빌드: tools/build.sh).

신뢰도 플래그: [confirmed] = 디스어셈블리/디컴파일러에서 검증됨; [standard] = 문서화된 TI‑83+/84+ 아키텍처와 일치하고 디스어셈블리와 일관됨; [hypothesis] = 추론된 것으로 아직 검증되지 않음.

전체 그림

TI‑84+는 한 번에 64 KiB만 볼 수 있는 Z80 머신이지만, 1 MiB 플래시와 128 KiB RAM을 가지고 있습니다. 이를 4‑슬롯 페이지 전환 방식과 시스템 콜(“bcall”) 메커니즘으로 연결하여, 하나의 16 KiB 플래시 페이지에 있는 코드가 다른 페이지에 있는 루틴을 호출할 수 있게 합니다. OS는 단일 작업 모니터이며, 플래시 page 0(항상 낮은 주소에 매핑) 에 있는 부트/커널 코어, 다른 플래시 페이지에 흩어져 있는 다수의 OS 루틴( bcalls 로 접근), 시스템 상태(플래그, 부동소수점 레지스터, 디스플레이 버퍼, 변수 테이블)를 보관하는 고정 RAM 영역으로 구성됩니다.

사용자가 직접 마주하는 모든 요소—홈 화면, TI‑BASIC 프로그램, 그래프, 카탈로그—는 네 가지 기둥 위에 구축됩니다:

  • 페이지 전환 + bcalls — 64 KiB 를 초과하는 코드와 데이터를 어떻게 접근하는지. (02-paging.md, 03-bcall-mechanism.md)
  • 부동소수점 엔진 — OP1–OP6 레지스터에 저장되는 9바이트 BCD 실수/복소수; 모든 연산은 여기서 수행됩니다. (06-floating-point.md)
  • 변수 시스템(VAT) — 이름이 붙은 객체(실수, 리스트, 행렬, 문자열, 프로그램, 앱 변수 등)를 Variable Allocation Table에 기록합니다. (05-variables-vat.md)
  • 토크나이저/파서 — TI‑BASIC 은 1바이트·2바이트 토큰으로 저장되며, 파서가 이를 실행합니다. (07-tokenizer-basic.md)

이 네 가지를 둘러싸고 I/O 서브시스템이 자리합니다: 타이밍·APD·커서·ON‑키를 구동하는 IM1 인터럽트(04-interrupts.md), LCD 드라이버, 키패드 스캐너, 그리고 링크 포트.

서브시스템 색인

각 행은 문서 페이지를 해당 서브시스템과 연결하고, 분석 상태를 표시합니다.

DocSubsystem
01-memory-map.md주소 공간, 포트, RAM 레이아웃
02-paging.md플래시/RAM 페이지 전환 (포트 6/7)
03-bcall-mechanism.mdrst 28h 시스템 콜 + 점프 테이블
04-interrupts.mdIM1 ISR, 타이머, APD, ON‑키
05-variables-vat.mdVariable Allocation Table, 객체 종류
06-floating-point.mdBCD 부동소수점 포맷, OP 레지스터
07-tokenizer-basic.md토큰 테이블, 파서/인터프리터
08-display-lcd.mdLCD 포트, 화면 버퍼
09-keyboard-link.md키패드 스캔, 링크 프로토콜
10-subsystem-map.mdbcall API 전반, 시스템 연계선
11-boot-contexts-errors.md부트, 컨텍스트 시스템, _JError/onSP
12-memory-management.mdRAM 힙, VAT/사용자 메모리, 플래시 아카이브/GC
13-flash-page-map.md64개 플래시 페이지 각각의 내용
14-ram-pages.mdRAM 페이지 선택기, 페이지 83, 복구 규칙
99-open-questions.md우선순위가 매겨진 향후 작업 로드맵
sub-calculation.md계산 엔진: 부동소수점 연산, 초월함수, 포맷, 오류
sub-graphing.md그래프: 윈도우 변수, 좌표↔픽셀, 기본 그리기, Y= 평가
sub-tibasic.mdTI‑BASIC: 프로그램 실행, 흐름 제어, I/O 명령
sub-tibasic-tracing.mdTI‑BASIC 고정 트레이스, 스모크 러너, 커버리지 앵커
sub-vat-archive.md변수, Sto/Rcl, 아카이브/언아카이브, 플래시 GC
sub-apps-mem-settings.md앱 찾기/실행, RAM 초기화, MODE/포맷 플래그
sub-statistics.mdSTAT: 1/2‑변수, 회귀, statVars
sub-matrix-list.md행렬/리스트 요소 접근, 가우스‑조던 역행렬/행렬식, 행렬 곱
sub-solver-numeric.mdSolver(근 찾기), nDeriv/fnInt, TVM 금융
sub-table-yvars.mdTABLE 생성/캐시, Y= 식 변수
sub-equation-display.md식 표시 / MathPrint 레이아웃 (페이지 0x39 eqdisp_*)
sub-link-transfer.md링크 프로토콜: 바이트/패킷/변수 전송 (페이지 0x3C)
sub-usb-asic.mdUSB ASIC/링크 어시스트 포트와 OS 전송 선택

(sub-* 문서들은 사용자 기능

0 조회
Back to Blog

관련 글

더 보기 »