packet.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
  2. <html>
  3. <head>
  4. <meta name="GENERATOR" content="Visual Page 1.0 for Windows">
  5. <meta http-equiv="Content-Type" content="text/html;CHARSET=iso-8859-1">
  6. <title>TI-86 Link Protocol Guide - Packet formats</title>
  7. </head>
  8. <body bgcolor="#ffffe8">
  9. <p><b>TI-86 Link Protocol Guide v1.0</b> - Packet formats</p>
  10. <center>
  11. <h2>
  12. <hr align="center">Packet Formats</h2>
  13. </center>
  14. <p>Texas Instruments calculators always send data and responses in
  15. self-contained "packets."<br>
  16. Packets have the following format:<br>
  17. <i>Note - all 2-byte integers are transmitted little-endian Intel-style
  18. (least significant byte first).</i></p>
  19. <p>
  20. <table border="1" cellspacing="0" width="92%">
  21. <tbody>
  22. <tr>
  23. <th bgcolor="#008800" width="7%"><font color="#ffffff">Offset</font></th>
  24. <th bgcolor="#008800" width="8%"><font color="#ffffff">Length</font></th>
  25. <th bgcolor="#008800" width="85%"><font color="#ffffff">Description</font></th>
  26. </tr>
  27. <tr>
  28. <td bgcolor="#ffffff" width="7%">0</td>
  29. <td bgcolor="#ffffff" width="8%">1 byte</td>
  30. <td bgcolor="#ffffff" width="85%">Machine ID byte</td>
  31. </tr>
  32. <tr>
  33. <td bgcolor="#ffffff" width="7%">1</td>
  34. <td bgcolor="#ffffff" width="8%">1 byte</td>
  35. <td bgcolor="#ffffff" width="85%">Command ID byte</td>
  36. </tr>
  37. <tr>
  38. <td bgcolor="#ffffff" width="7%">2</td>
  39. <td bgcolor="#ffffff" width="8%">2 bytes</td>
  40. <td bgcolor="#ffffff" width="85%">Length of data (see note below)</td>
  41. </tr>
  42. <tr>
  43. <td bgcolor="#ffffff" width="7%">4</td>
  44. <td bgcolor="#ffffff" width="8%"><i>n</i> bytes</td>
  45. <td bgcolor="#ffffff" width="85%">Data (if attached)</td>
  46. </tr>
  47. <tr>
  48. <td bgcolor="#ffffff" width="7%">4+<i>n</i></td>
  49. <td bgcolor="#ffffff" width="8%">2 bytes</td>
  50. <td bgcolor="#ffffff" width="85%">Checksum (if data is attached)</td>
  51. </tr>
  52. </tbody>
  53. </table>
  54. <i>Note - The "Length of data" element may not be equal to zero if the
  55. packet contains no data. In this
  56. case, the Command ID byte will indicate that the packet contains no
  57. data.</i></p>
  58. <p></p>
  59. <h4>The Machine ID Byte</h4>
  60. <p>The Machine ID byte identifies the machine that is sending the
  61. packet. It can have one of the following values:
  62. <table border="1" cellspacing="0" width="66%">
  63. <tbody>
  64. <tr>
  65. <th bgcolor="#dddddd" width="13%">Value</th>
  66. <th bgcolor="#dddddd">Description</th>
  67. </tr>
  68. <tr>
  69. <td width="13%">05h</td>
  70. <td>Computer sending TI-85 data</td>
  71. </tr>
  72. <tr>
  73. <td width="13%">06h</td>
  74. <td>Computer sending TI-86 data</td>
  75. </tr>
  76. <tr>
  77. <td width="13%">85h</td>
  78. <td>TI-85</td>
  79. </tr>
  80. <tr>
  81. <td width="13%">86h</td>
  82. <td>TI-86</td>
  83. </tr>
  84. </tbody>
  85. </table>
  86. <i>Note: The TI-86 accepts TI-85 Machine ID bytes in order to transfer
  87. data between a TI-85 and a TI-86.</i></p>
  88. <p></p>
  89. <h4>The Command ID Byte</h4>
  90. <p>The Command ID byte identifies the request or response that the
  91. machine is sending. It can have one of the following
  92. values:</p>
  93. <p>
  94. <table border="1" cellspacing="0" width="66%">
  95. <tbody>
  96. <tr>
  97. <th bgcolor="#dddddd" width="22%">Value</th>
  98. <th bgcolor="#dddddd" width="259">Description</th>
  99. <th bgcolor="#dddddd">Data Included</th>
  100. </tr>
  101. <tr>
  102. <td width="22%">06h</td>
  103. <td width="259">Variable Header (VAR)</td>
  104. <td>A standard <a href="#varheader">variable header</a></td>
  105. </tr>
  106. <tr>
  107. <td width="22%">09h</td>
  108. <td width="259">Clear to send (CTS)</td>
  109. <td><i>None</i></td>
  110. </tr>
  111. <tr>
  112. <td width="22%">15h</td>
  113. <td width="259">Data packet (DATA)</td>
  114. <td>Screenshot/variable/backup data</td>
  115. </tr>
  116. <tr>
  117. <td width="22%">36h</td>
  118. <td width="259">Skip/Exit (SKIP/EXIT)</td>
  119. <td>A one-byte rejection code (see codes below)</td>
  120. </tr>
  121. <tr>
  122. <td width="22%">56h</td>
  123. <td width="259">Acknowledge (ACK)</td>
  124. <td><i>None</i></td>
  125. </tr>
  126. <tr>
  127. <td width="22%">5Ah</td>
  128. <td width="259">Checksum Error (ERR)<br>
  129. The previous packet must be sent again.</td>
  130. <td><i>None</i></td>
  131. </tr>
  132. <tr>
  133. <td width="22%">6Dh</td>
  134. <td width="259"><i>Silent</i> - Request Screenshot (SCR)</td>
  135. <td><i>None</i></td>
  136. </tr>
  137. <tr>
  138. <td width="22%">87h</td>
  139. <td width="259">Direct command (CMD)</td>
  140. <td><i>None - all data needed is in the packet header. There is
  141. no checksum.</i></td>
  142. </tr>
  143. <tr>
  144. <td width="22%">92h</td>
  145. <td width="259">End of Transmission (EOT)</td>
  146. <td><i>None</i></td>
  147. </tr>
  148. <tr>
  149. <td width="22%">A2h</td>
  150. <td width="259"><i>Silent</i> - Request Variable (REQ)</td>
  151. <td>A standard <a href="#varheader">variable header</a></td>
  152. </tr>
  153. <tr>
  154. <td width="22%">C9h</td>
  155. <td width="259"><i>Silent</i> - Request to Send Variable (RTS)</td>
  156. <td>A SPC padded <a href="#varheader">variable header</a></td>
  157. </tr>
  158. </tbody>
  159. </table>
  160. </p>
  161. <p></p>
  162. <p>Rejection codes (used with Command ID 36h) can have one of the
  163. following values:</p>
  164. <p>
  165. <table border="1" cellspacing="0" width="66%">
  166. <tbody>
  167. <tr>
  168. <th bgcolor="#dddddd" width="13%">Value</th>
  169. <th bgcolor="#dddddd">Description</th>
  170. </tr>
  171. <tr>
  172. <td width="13%">01h</td>
  173. <td>EXIT - The entire transmission has been cancelled.</td>
  174. </tr>
  175. <tr>
  176. <td width="13%">02h</td>
  177. <td>SKIP - The current variable has been skipped.</td>
  178. </tr>
  179. <tr>
  180. <td width="13%">03h</td>
  181. <td>OUT OF MEMORY (silent transmissions only) - The receiving
  182. calculator is out of memory.</td>
  183. </tr>
  184. </tbody>
  185. </table>
  186. </p>
  187. <p></p>
  188. <h4>The Checksum</h4>
  189. <p>The checksum is a 16-bit value used to verify the integrity of the
  190. data in the packet. It only present if data
  191. is present.<br>
  192. The checksum is calculated by taking the lower 16 bits of the sum of
  193. the data bytes, as shown below:</p>
  194. <pre>int calculateChecksum(unsigned char* data, unsigned short datalength) {<br> unsigned short x, checksum;<br> for(x=0; x&lt;datalength; x++) {<br> checksum+=data[x]; //overflow automatically limits to 16 bits<br> }<br> return checksum;<br>}</pre>
  195. <center>
  196. <h3>
  197. <hr align="center"><a name="varheader"></a>Variable Headers</h3>
  198. </center>
  199. <p>A Variable header contains information about one variable in the
  200. calculator.<br>
  201. Standard and padded variable headers have the following format:</p>
  202. <p>
  203. <table border="1" cellspacing="0" width="92%">
  204. <tbody>
  205. <tr>
  206. <th bgcolor="#008800" width="7%"><font color="#ffffff">Offset</font></th>
  207. <th bgcolor="#008800" width="8%"><font color="#ffffff">Length</font></th>
  208. <th bgcolor="#008800" width="85%"><font color="#ffffff">Description</font></th>
  209. </tr>
  210. <tr>
  211. <td bgcolor="#ffffff" width="7%">0</td>
  212. <td bgcolor="#ffffff" width="8%">2 bytes</td>
  213. <td bgcolor="#ffffff" width="85%">Size of actual variable data,
  214. in bytes</td>
  215. </tr>
  216. <tr>
  217. <td bgcolor="#ffffff" width="7%">2</td>
  218. <td bgcolor="#ffffff" width="8%">1 byte</td>
  219. <td bgcolor="#ffffff" width="85%">Type ID Byte (see type ID's
  220. below)</td>
  221. </tr>
  222. <tr>
  223. <td bgcolor="#ffffff" width="7%">3</td>
  224. <td bgcolor="#ffffff" width="8%">1 byte</td>
  225. <td bgcolor="#ffffff" width="85%">Size of variable name, in
  226. characters</td>
  227. </tr>
  228. <tr>
  229. <td bgcolor="#ffffff" width="7%">4</td>
  230. <td bgcolor="#ffffff" width="8%"><i>n</i> bytes</td>
  231. <td bgcolor="#ffffff" width="85%">Variable name (not
  232. zero-terminated)</td>
  233. </tr>
  234. </tbody>
  235. </table>
  236. <i>Note: These bytes only make up the "data" section of the packet.</i></p>
  237. <p></p>
  238. <p>A padded variable header will always be 12 bytes long. The unused
  239. bytes at the end are padded with space characters
  240. (20h) or NULLs (0h). The standard and padded formats for variable
  241. headers are interchangeable.</p>
  242. <h4><a name="vartypes"></a>The Type ID Byte</h4>
  243. <p>The type ID byte specifies the type of variable that is being
  244. transmitted. It can have one of the following
  245. values:</p>
  246. <p>
  247. <table border="1" cellspacing="0" width="66%">
  248. <tbody>
  249. <tr>
  250. <th bgcolor="#dddddd" width="13%">Value</th>
  251. <th bgcolor="#dddddd">Description (click for variable format)</th>
  252. </tr>
  253. <tr>
  254. <td width="13%">00h</td>
  255. <td><a href="vars.html#real">Real Number</a></td>
  256. </tr>
  257. <tr>
  258. <td width="13%">01h</td>
  259. <td><a href="vars.html#complex">Complex Number</a></td>
  260. </tr>
  261. <tr>
  262. <td width="13%">02h</td>
  263. <td><a href="vars.html#vector">Real Vector</a></td>
  264. </tr>
  265. <tr>
  266. <td width="13%">03h</td>
  267. <td><a href="vars.html#vector">Complex Vector</a></td>
  268. </tr>
  269. <tr>
  270. <td width="13%">04h</td>
  271. <td><a href="vars.html#list">Real List</a></td>
  272. </tr>
  273. <tr>
  274. <td width="13%">05h</td>
  275. <td><a href="vars.html#list">Complex List</a></td>
  276. </tr>
  277. <tr>
  278. <td width="13%">06h</td>
  279. <td><a href="vars.html#matrix">Real Matrix</a></td>
  280. </tr>
  281. <tr>
  282. <td width="13%">07h</td>
  283. <td><a href="vars.html#matrix">Complex Matrix</a></td>
  284. </tr>
  285. <tr>
  286. <td width="13%">08h</td>
  287. <td><a href="vars.html#constant">Real Constant</a></td>
  288. </tr>
  289. <tr>
  290. <td width="13%">09h</td>
  291. <td><a href="vars.html#constant">Complex Constant</a></td>
  292. </tr>
  293. <tr>
  294. <td width="13%">0Ah</td>
  295. <td><a href="vars.html#equation">Equation</a></td>
  296. </tr>
  297. <tr>
  298. <td width="13%">0Ch</td>
  299. <td><a href="vars.html#string">String</a></td>
  300. </tr>
  301. <tr>
  302. <td width="13%">0Dh</td>
  303. <td><a href="vars.html#gdb">Function GDB</a></td>
  304. </tr>
  305. <tr>
  306. <td width="13%">0Eh</td>
  307. <td><a href="vars.html#gdb">Polar GDB</a></td>
  308. </tr>
  309. <tr>
  310. <td width="13%">0Fh</td>
  311. <td><a href="vars.html#gdb">Parametric GDB</a></td>
  312. </tr>
  313. <tr>
  314. <td width="13%">10h</td>
  315. <td><a href="vars.html#gdb">Differential Equation GDB</a></td>
  316. </tr>
  317. <tr>
  318. <td width="13%">11h</td>
  319. <td><a href="vars.html#picture">Picture</a></td>
  320. </tr>
  321. <tr>
  322. <td width="13%">12h</td>
  323. <td><a href="vars.html#program">Program</a></td>
  324. </tr>
  325. <tr>
  326. <td width="13%"><a name="15h"></a>15h</td>
  327. <td>Directory<i> (See note below)</i> - only used when requesting
  328. a directory</td>
  329. </tr>
  330. <tr>
  331. <td width="13%">17h</td>
  332. <td><a href="vars.html#window">Func: Function Window Settings</a><i>
  333. (See note below)</i></td>
  334. </tr>
  335. <tr>
  336. <td width="13%">18h</td>
  337. <td><a href="vars.html#window">Pol: Polar Window Settings</a><i>
  338. (See note below)</i></td>
  339. </tr>
  340. <tr>
  341. <td width="13%">19h</td>
  342. <td><a href="vars.html#window">Param: Parametric Window Settings</a><i>
  343. (See note below)</i></td>
  344. </tr>
  345. <tr>
  346. <td width="13%">1Ah</td>
  347. <td><a href="vars.html#window">DifEq: Differential Equation
  348. Window Settings</a><i> (See note below)</i></td>
  349. </tr>
  350. <tr>
  351. <td width="13%">1Bh</td>
  352. <td><a href="vars.html#window">ZRCL: Saved Window Settings</a><i>
  353. (See note below)</i></td>
  354. </tr>
  355. <tr>
  356. <td width="13%">1Dh</td>
  357. <td>Backup <i>(No meaningful name)</i></td>
  358. </tr>
  359. <tr>
  360. <td width="13%">1Eh</td>
  361. <td>Unknown (only used when requesting variables of unknown type)</td>
  362. </tr>
  363. <tr>
  364. <td width="13%">2Ah</td>
  365. <td><a href="vars.html#equation">Equation</a></td>
  366. </tr>
  367. </tbody>
  368. </table>
  369. <i>Note - If the Type ID is in the range 15h - 1Bh, then the name
  370. length byte has a value of 0 and the name field
  371. consists of a single 0 byte.</i></p>
  372. <p></p>
  373. <h4><a name="backup"></a>Backup Header Format</h4>
  374. <p>If the type ID byte specifies a backup, the variable header takes
  375. the following 9-byte format:</p>
  376. <p>
  377. <table border="1" cellspacing="0" width="92%">
  378. <tbody>
  379. <tr>
  380. <th bgcolor="#008800" width="7%"><font color="#ffffff">Offset</font></th>
  381. <th bgcolor="#008800" width="8%"><font color="#ffffff">Length</font></th>
  382. <th bgcolor="#008800" width="85%"><font color="#ffffff">Description</font></th>
  383. </tr>
  384. <tr>
  385. <td bgcolor="#ffffff" width="7%">0</td>
  386. <td bgcolor="#ffffff" width="8%">2 bytes</td>
  387. <td bgcolor="#ffffff" width="85%">Size of first backup section,
  388. in bytes</td>
  389. </tr>
  390. <tr>
  391. <td bgcolor="#ffffff" width="7%">2</td>
  392. <td bgcolor="#ffffff" width="8%">1 byte</td>
  393. <td bgcolor="#ffffff" width="85%">Type ID Byte (1Dh in this case)</td>
  394. </tr>
  395. <tr>
  396. <td bgcolor="#ffffff" width="7%">3</td>
  397. <td bgcolor="#ffffff" width="8%">2 bytes</td>
  398. <td bgcolor="#ffffff" width="85%">Size of second backup section,
  399. in bytes</td>
  400. </tr>
  401. <tr>
  402. <td bgcolor="#ffffff" width="7%">5</td>
  403. <td bgcolor="#ffffff" width="8%">2 bytes</td>
  404. <td bgcolor="#ffffff" width="85%">Size of third backup section,
  405. in bytes (may be zero if second part is less than 64KB)</td>
  406. </tr>
  407. <tr>
  408. <td bgcolor="#ffffff" width="7%">7</td>
  409. <td bgcolor="#ffffff" width="8%">2 bytes</td>
  410. <td bgcolor="#ffffff" width="85%">Size of fourth backup section,
  411. in bytes</td>
  412. </tr>
  413. </tbody>
  414. </table>
  415. </p>
  416. <p></p>
  417. <p>
  418. <table border="0" cellspacing="0" width="100%">
  419. <tbody>
  420. <tr>
  421. <td width="32%">
  422. <p align="center"><a href="cable.html"><img
  423. src="graphics/prevpage.gif" alt="[previous page]" align="bottom"
  424. border="2" height="32" width="32"><br>
  425. Link Cables</a> </p>
  426. </td>
  427. <td width="34%">
  428. <p align="center"><a href="index.html"><img
  429. src="graphics/home.gif" alt="[home]" align="bottom" border="2"
  430. height="32" width="32"><br>
  431. Table of Contents</a> </p>
  432. </td>
  433. <td width="34%">
  434. <p align="center"><a href="screenshot.html"><img
  435. src="graphics/nextpage.gif" alt="[next page]" align="bottom" border="2"
  436. height="32" width="32"><br>
  437. Screenshots</a> </p>
  438. </td>
  439. </tr>
  440. </tbody>
  441. </table>
  442. </p>
  443. <hr align="center"><i>Site maintained by Romain Li&eacute;vin (</i><a
  444. href="mailto:roms@lpg.ticalc.org"><i>roms@lpg.ticalc.org</i></a><i>)
  445. and Tim Singer (</i><a href="mailto:tsinger@gladstone.uoregon.edu"><i>tsinger@gladstone.uoregon.edu</i></a><i>)</i>
  446. </body>
  447. </html>