Protocol89.txt Driver File Contents (tiglusbsrc.zip)

*****************************************************************
* Protocol of the TI89 calculator				*
* Documentation by Romain Lievin <rlievin@mail.com>		*
* programmer of TiLP: http://lpg.ticalc.org/prj_tilp            *
* Begin: 15/08/1999						*
* Last update: 09/12/2001					*
* Latest version of this doc can be found at			*
*    http://lpg.ticalc.org/prj_tilp/download/docs               *
*****************************************************************




Note:
- all values are in hexadecimal format or in character format.
- all 2-byte words are LSB first and MSB next, so {5B 01} = 015B.

?? = unknown (I do not know what these values represent)
XX = an appropriate value
Xl = the least significant part of the value
Xh = the most significant part of the value


0) Remark
=========

This calculator has the silent link capability. The only calculators
which have this capability are TI83, 83+, 86, 89, 92 and 92+.
When a calculator has not the silent link capability, the computer behaves
as a calculator.


I) The hardware protocol
========================

For more informations, see 'Protocol_hard.txt' in the hard directory of this
documentation. You will find documentation as well as schematics and routines.


II) The software protocol
=========================
        2.1) Packets
        ------------

The transmission of data between the TI calculator and the PC is made by
packets. A packet has the following format:

Offset  Length  Sortcuts  Description
--------------------------------------------------------
0       1       MID       Machine ID
1       1       CID       Command ID
2       2       Pl        Packet length of data in bytes if data attached
4       n       DATA      Data if attached
4+n     2       CHK       Checksum if data attached. The checksum is the sum
                          of all bytes of data (CHK <-> {Cl Ch}).

The checksum tells the receiving machine if the data in a packet with data
was received correctly.  It is actually the least significant 16 bits of
the sum of all data bytes.

Be careful, the datalength word can be different of 0 without data and checksum
. Indeed, this word is an information. Example:

PC: 08 68 00 00         PC request if the TI is OK   (RDY)
TI: 98 56 00 01         TI reply that it is not OK   (NOK/NAK)
PC: 08 09 XX XX         ready to receive XX XX bytes (CTS)
PC: 08 09 FF FF         PC ready to receive
TI: 98 09 00 00         TI wait data (CONT)

Else, this a normal packet. Example:

                             +--Machine ID=Computer linked to TI-92
                             |  +--Command ID=Skip/Exit
                             |  |   +--Data length=0001 bytes
                             |  |   |    +--Data=01 (Exit pressed)
                             |  |  / \   | Checksum=0001
A typical packet would be:  09 36 01 00 01 01 00
Packets can have up to 65535 bytes in the Data part.

Note: FLASHed TI89 have a reply different of basic TI89.
Instead of replying 98 56 00 XX, a flashed TI89 reply 98 56 04 XX.


        2.2) Machine ID
        ---------------

The Machine ID byte identifies the machine so the calculator can decide
whether or not to accept the transmission.  Here are the possible values:

+---------------+-------------------------------+
| Machine ID    | Description                   |
+---------------+-------------------------------+
| 00            | PC -> TI?? (*)                |
| 08            | PC -> TI89                    |
| 98            | TI89 -> PC or TI89 -> TI89    |
+---------------+-------------------------------+

(*) used for checking if TI has been FLASHed


        2.3) Command ID
        ---------------

The command ID byte specifies the type of packet that it is.

Legend:
* means there is data attached.
# means the device id is ignored with this command.
$ means it's a silent command.

+----+-----+------------+----------------------------------------------------+
| ID | --- | Shortcuts  | Description                                        |
+----+-----+------------+----------------------------------------------------+
| 06 | *-- | VAR        | Includes a std variable header (used in receiving) |
| 09 | --- | CTS        | Used to signal OK to send a variable               |
| 15 | *-- | XDP/DATA   | Xmit Data Packet (pure data)                       |
| 36 | *-- | SKIP/EXIT  | Skip/exit - used when duplicate name is found      |
| 56 | --- | ACK/OK     | Acknowledgment                                     |
| 5A | --- | ERR        | Checksum error: send last packet again             |
| 68 | --- | RDY        | Check whether TI is ready                          |
| 6D | --$ | SCR        | Request screenshot                                 |
| 87 | --- | direct CMD | Direct command (for remote control for instance)   |
| 92 | --- | EOT/DONE   | End Of Transmission: no more variables to send     |
| A2 | *-$ | REQ        | Request variable - includes a standard variable    |
| C9 | *-$ | RTS        | Request to send - includes a padded variable header|
+----+-----+------------+----------------------------------------------------+


        2.4) The variable header format (0x06)
        --------------------------------------

A variable header or 'var header' is used whenever an information must
be tranmitted.
The variable header is the data of a packet when the command is 06.

The variable header is up to 14 bytes long. It has the following format:

+-------+-------+-------+---------------------------------------+
| Offset| Length| Short | Description                           |
+-------+-------+-------+---------------------------------------+
| 0     | 1     | MID   | Machine ID                            |
| 1     | 1     | CID   | Command ID, 06 in this case           |
| 2     | 2     | Pl    | Packet length (LL-HH)                 |
| 2     | 2     | Dl    | Data length (LL LH HL HH)             |
| 3     | 1     | Ty    | Variable Type (see next paragraph)    |
| 4     | 1     | Nl    | Name length (0..8)                    |
| 5     | n     | Name  | Name (not zero-terminated)            |
| 6+n   | 2     | CHK   | Checksum                              |
+-------+-------+-------+---------------------------------------+

HHHLLHLL is the size of the var in memory (real size + 2; the '2' is due to the
fact that a data part take x bytes + 2 bytes of length of variable). This is
the value we can see in the VAR-LINK menu.

If the header is describing a memory backup, the variable header will take the
following format: Ty=1D, Nl=04 and name=1.11


        2.5) Request (0xA2)
        -------------------

A request is used whenever the computer request an action.

The format of a request is the same as the variable header format but the data
length is zero and the varname is not completed by space characters.
It has the following format:

+-------+-------+-------+---------------------------------------+
| Offset| Length| Short | Description                           |
+-------+-------+-------+---------------------------------------+
| 0     | 1     | MID   | Machine ID                            |
| 1     | 1     | CID   | Command ID, A2 in this case           |
| 2     | 2     | Pl    | Packet length (LL-HH)                 |
| 2     | 2     | Dl    | Data length (00 00 00 00)             |
| 3     | 1     | Ty    | Variable Type (see next paragraph)    |
| 4     | 1     | Nl    | Name length (0..8)                    |
| 5     | n     | Name  | Name (not zero-terminated)            |
| 6+n   | 2     | CHK   | Checksum                              |
+-------+-------+-------+---------------------------------------+

For a directory list, the request type is Ty=19 and the name length is zero.
Other particular request types:

1D: backup
1A: dir (directory list)
1B: local dir
1F: directory


        2.6) Data part format (0x15)
        ----------------------------

A data part is used whenever data or a variable content must be transmit.
The data part is same as in memory. It has the following format:

+-------+-------+-------+---------------------------------------+
| Offset| Length| Short | Description                           |
+-------+-------+-------+---------------------------------------+
| 0     | 1     | MID   | Machine ID                            |
| 1     | 1     | CID   | Command ID, 15 in this case           |
| 2     | 2     | Pl    | Packet length (LL-HH)                 |
| 2     | 2     | Dl    | Data length (00 00 00 00)             |
| 3     | n     | Data  | Data                                  |
| 6+n   | 2     | CHK   | Checksum                              |
+-------+-------+-------+---------------------------------------+
where HHLL is the length of the variable (real size).

When a directory list or a backup is made, the data part format is different.
See the corresponding section.


        2.7) Variable types and file extensions
        ---------------------------------------

Type of the variable:

+----+--------------------------+-------+-------+
| 00 | expression               | EXPR  | .89e  |
| 04 | list                     | LIST  | .89l  |
| 06 | matrix                   | MAT   | .89m  |
| 0A | data                     | DATA  | .89c  |
| 0B | text                     | TEXT  | .89t  |
| 0C | string                   | STR   | .89s  |
| 0D | graphic data base        | GDB   | .89d  |
| 0E | figure                   | FIG   | .89a  |
| 10 | picture                  | PIC   | .89i  |
| 12 | program                  | PRGM  | .89p  |
| 13 | function                 | FUNC  | .89f  |
| 14 | macro made by Geometry   | MAC   | .89x  |
| 1F | directory                | DIR   |       |
| 21 | assembler                | ASM   | .89z  |
| 22 | ID list                  |       |       |
| 23 | AMS (Operating System)   |       | .89u  |
| 24 | FLASH application        | FLASH | .89k  |
+----+--------------------------+-------+-------+

Files which have the ".89u" extension are OS upgrades
(Advanced Mathematic Software, AMS).


III) Data transfers
===================
        3.1) Handshaking
        ----------------

In the most cases, the protocol is the following.

* In sending (PC -> TI):

1 - PC: VAR or RTS      var header (name, type, ...)
2 - TI: ACK             continue
3 - TI: CTS             wait data
4 - PC: ACK             continue
5 - PC: XDP             data part
6 - TI: ACK             continue
7 - PC: EOT             end of transmission
8 - TI: ACK             end of transfert

If they are several variables, repeat the 1 to 7 steps.

* In receiving (TI -> PC):

1 - PC: REQ           request variable
2 - TI: ACK           continue
3 - TI: VAR           var header
4 - PC: ACK           continue
5 - PC: CTS           wait data
6 - TI: ACK           continue
7 - TI: XDP           data part
8 - PC: ACK           end of transfer
9 - TI: EOT           end of transmission
0 - PC: ACK           acknowledge


        3.2) Calc-to-calc "manual" variable transfers
        ---------------------------------------------

To do...


       3.3) "Silent" link capability
       -----------------------------

TI incorporated a "Silent Link" capability into the TI-83, TI-86, and
TI-92.  It allows you to send and receive variables from the calculator
without putting the calculator in link mode.  The only drawback is that
the silent send function automatically overwrites any data already in
that variable on the calculator.  Therefore, any program that
incorporates this capability must also check to make sure this doesn't
happen.

The next paragraph use the silent link capability...


        3.4) The remote control/command
        -------------------------------

PC: 08 87 LL HH		send code of the key (HHLL)
TI: 98 56 00 00		TI reply OK

The key word is the code of the key. This code is in section B8 to B12 of the 
French user's manual or page 384 and next of the US manual.

For example: see remote.txt


	3.5) The screen dump
	--------------------

PC: 08 6D 00 00		PC request a screen dump
TI: 98 56 00 00		TI reply OK
    98 15 00 0F <... 0x0F00=3840 bytes of data terminated by the checksum ...>
    CHK (1 word)
PC: 08 56		PC reply OK

The screen of the TI calculator is a matrix of 239 columms and 128 rows of 
pixels. So, there are 240x128=30720 pixels -> 3840 bytes.
240=30x8 bits -> 30 bytes and 
128=16x8 bits -> 16 bytes.
So, 30x128=3840 and 3840x8=30720 bits.

But, for the TI89, only the 160x100 upper rectangle is visible. The remaining
bytes are usable (in assembler for instance) but they are not visible.

For example: see screen.txt


	3.6) Receiving a backup
	-----------------------

Indeed, receiving a backup is a group of all variables of the calculator.
So, it is necessary to make a directory list in order to have the list of
variables to receive.


	3.7) Sending a backup
	---------------------

First step:
PC: 08 06 0A 00 00 00 00 00 1D 04		send a backup 
    m  a  i  n	CHK
TI: 98 56 00 00					OK
    98 09 00 00					wait data
PC: 08 56 00 00					OK
    08 92 00 00					End of transmission
TI: 98 56 00 00					OK

Second step:
PC: 08 C9 .. .. LL LH HL HH Ty Nl		name of the variable to send
	<full name of the var> ?? CHK		
TI: 98 56 00 00					OK
    98 09 00 00					wait data
PC: 08 56 00 00					OK
    08 15 .. .. 00 00 00 00 HH LL		send the content of the var
	<...data...> CHK
TI: 98 56 00 00					OK
PC: 08 92 00 00					End of transmission
TI: 98 56 00 00					OK 

Remark: Ty can be equal to 1D (normal), 26 (locked) or 27 (archived).
Repeat the second step as long as there are some variables to transmit. Once
terminated, it is obvious that TI does not restart unlike a TI92.

For example, see sbackup1.txt (begin) and sbackup2.txt (end).


        3.8) Directory list
        -------------------

PC: 08 A2 06 00 00 00 00 Fl 1A 00 39 00                 request a dir. list
TI: 98 56 00 00                                         OK
    98 06 0B 00 6C 01 00 0E 1A 04 m  a  i  n  03 CHK    ??? (do not change)

PC: 08 56 00 00                                         OK
    08 09 00 00                                         wait data
TI: 98 56 00 00                                         OK
    98 15 .. .. <... data ...> CHK                      listing of the folders

PC: 08 56 00 00                                         OK
TI: 98 92 00 00                                         EOT
PC: 08 56 00 00                                         OK

Fl is a filter. For example, if Fl=0B (TEXT variable), the data part returns
all the folders and all the text variables.

The data part contains the list of all the folders without the variables
that they attached them. The data part has the following format:

00 00 00 00 < 8 characters completed by NULL characters > Ty Lk LL LH HL HH
< 8 characters completed by NULL characters > Ty Lk LL LH HL HH
 ...
< 8 characters completed by NULL characters > Ty Lk LL LH HL HH CHK

Ty is the type of the variable. See 2.5)
Lk shows if the variable is locked or archived: 
00 = nothing, 01 = locked and 03 = archived
LL LH HL HH is the size of the variable in memory. Apparently, the HH byte is 
used but for what ??? If the variable is a directory then I do not know what 
this number represents.

Next, it is necessary to request the variables contained in a folder for each 
folder. Example for the 'bode' directory:

PC: 08 A2 .. .. 00 00 00 1B 1A 04 b  o  d  e  CHK       request a dir list
TI: 98 56 00 00                                         OK
    98 06 .. .. ?? ?? ?? ?? 1A 04 m  a  i  n  ?? CHK    ??? (do not change)
PC: 08 56 00 00                                         OK
    08 09 FF FF                                         wait data
TI: 98 56 00 00                                         OK
    98 15 .. .. <... data ...> CHK

PC: 98 56 00 00                                         OK
TI: 98 92 00 00                                         EOT
PC: 08 56 00 00						OK

The data part format has the same format as above but it contains the list of
the variable name.

For example, see dir_list.txt


	3.9) Receiving a variable
	-------------------------

PC: 08 A2 .. .. 00 00 00 00			request a var with a full 
	Ty Nl <Name of the variable> CHK	pathname
TI: 98 56 00 00 (*)				OK
    98 06 .. .. LL LH HL HH Ty Nl 		TI reply the local name
	<Name of the variable> 00 CHK		of the variable
PC: 08 56 00 00					OK
    08 09 FF FF					wait data
TI: 98 56 00 00					OK
    98 15 .. .. 00 00 00 00 HH LL		TI send the content 
	<... data ...> CHK			of the variable
PC: 08 56 00 00					OK
TI: 98 92 00 00					End of transmission
PC: 08 56 00 00					OK

(*) If the TI reply 98 56 00 xx where xx is different of 00, the variable 
requested do not exist.

For example, see r_var.txt


	3.10) Sending a variable
	------------------------

There is two ways to send a variable: with its full path or only its name. If 
is there only its name, the variable is recorded in the current directory.

PC: 08 06 .. .. LL LH HL HH Ty Nl 			send
	<... Name of the variable (local or full)...> 	the
	00 CHK						variable
TI: 98 56 00 00						OK
    98 09 00 00						wait data
PC: 08 56 00 00						OK
    08 15 .. .. 00 00 00 00 HH LL			send the content 
	<... data ... > CHK				of the variable
TI: 98 56 00 00						OK
PC: 08 92 00 00						end of transmission
TI: 98 56 00 00						OK

For example, see s_var.txt

If several variables must be transmitted, see 2.4).


	3.11) Checking FLASH
	--------------------

PC: 00 68 00 00
TI: 98 56 00 10				TI has not been FLASHed (AMS1.00)
or
TI: 98 56 04 10				TI has been FLASHed (AMS2.05)

This is 00, not 98 !!!


        3.12) The ID list
        -----------------

Indeed, the request is as if the TI requested the IDLIST variable.
Ty=22 and Nl=00

PC: 08 A2 06 00 00 00 00 00                     request the IDlist
        Ty Nl 22 00
TI: 98 56 00 00					OK
    98 06 0D 00 12 00 00 00 Ty 06               TI reply the local name
        <IDLIST> 00 CHK				of the variable
PC: 08 56 00 00					OK
    08 09 00 00					wait data
TI: 98 56 00 00					OK
    98 15 16 00 00 00 00 00 01 00		TI send the IDlist:	
    0E 00 30 33 30 36 39 44 31 42		"03069-D1BA3-FFAB"
    41 33 46 46 41 42 CHK
PC: 08 56 00 00					OK
TI: 98 92 00 00					End of transmission
PC: 08 56 00 00					OK


        3.13) The FLASHing 
        ------------------

Here, Ty=24 for FLASH applications, Ty=23 for Advanced Mathematic Software 
upgrade (AMS). If an AMS upgraded is sent, there is no name field and Nl=00
<name> is the name of the FLASH app or 'basecode' for AMS.

First step:
PC: 08 C9 XX XX LL LH HL HH Ty Nl <name> CL CH	send a FLASH application with 
FLASH size and FLASH application name

Second step:
->
TI: 98 56 00 00					OK
    98 09 00 00					TI reply the header size
PC: 08 56 00 00					OK
    08 15 00 00 <... 64 Kb of data ...> Cl Ch	send a 64Kb data block
TI: 98 56 00 00					OK
PC: 08 78 00 00
->

The part between arrows must be repeated until there is no entire block to
transmit.
Once all the blocks has been transmitted, you have to transmit the last block 
with the remaining data as above but it is necessary to send the sequence 
below instead of the '08 78 00 00' final sequence:

PC: 08 92 00 00					end of transmission
TI: 98 56 00 00					OK

which finally give:

->
TI: 98 56 00 00					OK
    98 09 XL XH					TI reply the header size
PC: 08 56 00 00					OK
    08 15 Xl Xh <... 64 Kb of data ...> Cl Ch	send a 64Kb data block
TI: 98 56 00 00					OK
PC: 08 92 00 00					end of transmission
TI: 98 56 00 00					OK


IV) The different variable formats
==================================

About the variable format, I have written another doc about this topic.
See the var_format archive.
Download Driver Pack

How To Update Drivers Manually

After your driver has been downloaded, follow these simple steps to install it.

  • Expand the archive file (if the download file is in zip or rar format).

  • If the expanded file has an .exe extension, double click it and follow the installation instructions.

  • Otherwise, open Device Manager by right-clicking the Start menu and selecting Device Manager.

  • Find the device and model you want to update in the device list.

  • Double-click on it to open the Properties dialog box.

  • From the Properties dialog box, select the Driver tab.

  • Click the Update Driver button, then follow the instructions.

Very important: You must reboot your system to ensure that any driver updates have taken effect.

For more help, visit our Driver Support section for step-by-step videos on how to install drivers for every file type.

server: web3, load: 1.84