TI-92 Link Protocol Guide - Packet formats


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)
Note - The "Length of data" element may not be equal to zero if the packet contains no data. In this case, the Command ID byte will indicate that the packet contains no data.

The Machine ID Byte

The Machine ID byte identifies the machine that is sending the packet. It can have one of the following values:
Value Description
09h Computer sending TI-92 data
89h TI-92 to Computer or TI92 to TI92

The Command ID Byte

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 or padded variable header
09h Clear to send (CTS) None
15h Data packet (DATA) Screenshot/variable/backup data
36h Out of Memory (MEM) Five bytes of unknown data
56h Acknowledge (ACK) None
5Ah Checksum Error (ERR)
The previous packet must be sent again.
None
68h Check Ready (RDY) None
6Dh Silent - Request Screenshot (SCR) None
78h Continue (CONT) 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 or padded variable header
C9h Silent - Request to Send Variable (RTS) A standard or padded variable header

The Checksum

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;
}


Variable Headers

A Variable header contains information about one variable in the calculator.
Offset Length Description
0 4 bytes Size of actual variable data, in bytes, with or without the first four bytes of each data packet.
4 1 byte Type ID Byte (see type ID's below)
5 1 byte Size of variable name, in characters
6 n bytes Variable name (not zero-terminated)
Note: These bytes only make up the "data" section of the packet.

The Type ID Byte

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 Expression
04h List
06h Matrix
0Ah Data
0Bh Text
0Ch String
0Dh GDB
0Eh Figure
10h Picture
12h Program
13h Function
14h Macro
19h Complete Directory (See note below) - only used when requesting a listing of all variables on the calculator.
1Dh Backup (See Backup Header Format below)
1Fh Folder - only used when listing a directory.
Note - If the Type ID is 19h or 1Ah, then the name length byte has a value of 0 and the name field is empty.

Backup Header Format

If the type ID byte specifies a backup, the variable header takes the following format:
Offset Length Description
0 4 bytes Length, in bytes, of the backup data without the extra four bytes at the beginning of each data packet.
3 1 byte Type ID Byte (1Dh in this case).
4 1 bytes Length, in characters, of the name field.
5 n bytes Name.

If the header is a request-style header, then the data length field (offset 0) contains 0 and the name field (offset 5) contains "main\backup".

If the header is a send-style header, then the data length is the length of the entire backup and the name field contains the ROM version string (e.g. "1.11" or "2.1").

If the header is a data-style header, then the data length is the length of the following 1-kilobyte section and the name field contains the ROM version string. Note that the data length field can be less than 400h if the following section is the final section.
 

[previous page]
Link Cables

[home]
Table of Contents

[next page]
Remote control


Site maintained by Romain Liévin (roms@lpg.ticalc.org) and Tim Singer (tsinger@gladstone.uoregon.edu)