TI-86 Link Protocol Guide v1.0 - Packet formats
Texas Instruments calculators always send data and responses in
self-contained "packets."
Packets have the following format:
Note - all 2-byte integers are transmitted little-endian Intel-style
(least significant byte first).
Offset | Length | Description |
---|---|---|
0 | 1 byte | Machine ID byte |
1 | 1 byte | Command ID byte |
2 | 2 bytes | Length of data (see note below) |
4 | n bytes | Data (if attached) |
4+n | 2 bytes | Checksum (if data is attached) |
The Machine ID byte identifies the machine that is sending the packet. It can have one of the following values:
Value | Description |
---|---|
05h | Computer sending TI-85 data |
06h | Computer sending TI-86 data |
85h | TI-85 |
86h | TI-86 |
The Command ID byte identifies the request or response that the machine is sending. It can have one of the following values:
Value | Description | Data Included |
---|---|---|
06h | Variable Header (VAR) | A standard variable header |
09h | Clear to send (CTS) | None |
15h | Data packet (DATA) | Screenshot/variable/backup data |
36h | Skip/Exit (SKIP/EXIT) | A one-byte rejection code (see codes below) |
56h | Acknowledge (ACK) | None |
5Ah | Checksum Error (ERR) The previous packet must be sent again. |
None |
6Dh | Silent - Request Screenshot (SCR) | None |
87h | Direct command (CMD) | None - all data needed is in the packet header. There is no checksum. |
92h | End of Transmission (EOT) | None |
A2h | Silent - Request Variable (REQ) | A standard variable header |
C9h | Silent - Request to Send Variable (RTS) | A SPC padded variable header |
Rejection codes (used with Command ID 36h) can have one of the following values:
Value | Description |
---|---|
01h | EXIT - The entire transmission has been cancelled. |
02h | SKIP - The current variable has been skipped. |
03h | OUT OF MEMORY (silent transmissions only) - The receiving calculator is out of memory. |
The checksum is a 16-bit value used to verify the integrity of the
data in the packet. It only present if data
is present.
The checksum is calculated by taking the lower 16 bits of the sum of
the data bytes, as shown below:
int calculateChecksum(unsigned char* data, unsigned short datalength) {
unsigned short x, checksum;
for(x=0; x<datalength; x++) {
checksum+=data[x]; //overflow automatically limits to 16 bits
}
return checksum;
}
A Variable header contains information about one variable in the
calculator.
Standard and padded variable headers have the following format:
Offset | Length | Description |
---|---|---|
0 | 2 bytes | Size of actual variable data, in bytes |
2 | 1 byte | Type ID Byte (see type ID's below) |
3 | 1 byte | Size of variable name, in characters |
4 | n bytes | Variable name (not zero-terminated) |
A padded variable header will always be 12 bytes long. The unused bytes at the end are padded with space characters (20h) or NULLs (0h). The standard and padded formats for variable headers are interchangeable.
The type ID byte specifies the type of variable that is being transmitted. It can have one of the following values:
Value | Description (click for variable format) |
---|---|
00h | Real Number |
01h | Complex Number |
02h | Real Vector |
03h | Complex Vector |
04h | Real List |
05h | Complex List |
06h | Real Matrix |
07h | Complex Matrix |
08h | Real Constant |
09h | Complex Constant |
0Ah | Equation |
0Ch | String |
0Dh | Function GDB |
0Eh | Polar GDB |
0Fh | Parametric GDB |
10h | Differential Equation GDB |
11h | Picture |
12h | Program |
15h | Directory (See note below) - only used when requesting a directory |
17h | Func: Function Window Settings (See note below) |
18h | Pol: Polar Window Settings (See note below) |
19h | Param: Parametric Window Settings (See note below) |
1Ah | DifEq: Differential Equation Window Settings (See note below) |
1Bh | ZRCL: Saved Window Settings (See note below) |
1Dh | Backup (No meaningful name) |
1Eh | Unknown (only used when requesting variables of unknown type) |
2Ah | Equation |
If the type ID byte specifies a backup, the variable header takes the following 9-byte format:
Offset | Length | Description |
---|---|---|
0 | 2 bytes | Size of first backup section, in bytes |
2 | 1 byte | Type ID Byte (1Dh in this case) |
3 | 2 bytes | Size of second backup section, in bytes |
5 | 2 bytes | Size of third backup section, in bytes (may be zero if second part is less than 64KB) |
7 | 2 bytes | Size of fourth backup section, in bytes |