packet.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  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-73 Link Protocol Guide - Packet formats</title>
  7. </head>
  8. <body bgcolor="#ffffe8">
  9. <p><b>TI-73 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 width="7%" bgcolor="#008800"><font color="#ffffff">Offset</font></th>
  24. <th width="8%" bgcolor="#008800"><font color="#ffffff">Length</font></th>
  25. <th width="85%" bgcolor="#008800"><font color="#ffffff">Description</font></th>
  26. </tr>
  27. <tr>
  28. <td width="7%" bgcolor="#ffffff">0</td>
  29. <td width="8%" bgcolor="#ffffff">1 byte</td>
  30. <td width="85%" bgcolor="#ffffff">Machine ID byte</td>
  31. </tr>
  32. <tr>
  33. <td width="7%" bgcolor="#ffffff">1</td>
  34. <td width="8%" bgcolor="#ffffff">1 byte</td>
  35. <td width="85%" bgcolor="#ffffff">Command ID byte</td>
  36. </tr>
  37. <tr>
  38. <td width="7%" bgcolor="#ffffff">2</td>
  39. <td width="8%" bgcolor="#ffffff">2 bytes</td>
  40. <td width="85%" bgcolor="#ffffff">Length of data (see note below)</td>
  41. </tr>
  42. <tr>
  43. <td width="7%" bgcolor="#ffffff">4</td>
  44. <td width="8%" bgcolor="#ffffff"><i>n</i> bytes</td>
  45. <td width="85%" bgcolor="#ffffff">Data (if attached)</td>
  46. </tr>
  47. <tr>
  48. <td width="7%" bgcolor="#ffffff">4+<i>n</i></td>
  49. <td width="8%" bgcolor="#ffffff">2 bytes</td>
  50. <td width="85%" bgcolor="#ffffff">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 case, the Command ID byte will
  56. indicate that the packet contains no data.</i></p>
  57. <p></p>
  58. <h4>The Machine ID Byte</h4>
  59. <p>The Machine ID byte identifies the machine that is sending the
  60. packet. It can have one of the following values:
  61. <table border="1" cellspacing="0" width="66%">
  62. <tbody>
  63. <tr>
  64. <th width="13%" bgcolor="#dddddd">Value</th>
  65. <th bgcolor="#dddddd">Description</th>
  66. </tr>
  67. <tr>
  68. <td width="13%">07h</td>
  69. <td>Computer sending TI-73 data</td>
  70. </tr>
  71. <tr>
  72. <td width="13%">74h</td>
  73. <td>TI-73</td>
  74. </tr>
  75. </tbody>
  76. </table>
  77. </p>
  78. <p></p>
  79. <h4>The Command ID Byte</h4>
  80. <p>The Command ID byte identifies the request or response that the
  81. machine is sending. It can have one of the following values:</p>
  82. <p>
  83. <table border="1" cellspacing="0" width="66%">
  84. <tbody>
  85. <tr>
  86. <th width="22%" bgcolor="#dddddd">Value</th>
  87. <th width="259" bgcolor="#dddddd">Description</th>
  88. <th bgcolor="#dddddd">Data Included</th>
  89. </tr>
  90. <tr>
  91. <td width="22%">06h</td>
  92. <td width="259">Variable Header (VAR)</td>
  93. <td>A fixed-length, NUL padded <a href="#varheader">variable
  94. header</a></td>
  95. </tr>
  96. <tr>
  97. <td width="22%">09h</td>
  98. <td width="259">Clear to send (CTS)</td>
  99. <td><i>None</i></td>
  100. </tr>
  101. <tr>
  102. <td width="22%">15h</td>
  103. <td width="259">Data packet (DATA)</td>
  104. <td>Screenshot/variable/backup data</td>
  105. </tr>
  106. <tr>
  107. <td width="22%">36h</td>
  108. <td width="259">Skip/Exit (SKIP/EXIT)</td>
  109. <td>A one-byte rejection code (see codes below)</td>
  110. </tr>
  111. <tr>
  112. <td width="22%">56h</td>
  113. <td width="259">Acknowledge (ACK)</td>
  114. <td><i>None</i></td>
  115. </tr>
  116. <tr>
  117. <td width="22%">5Ah</td>
  118. <td width="259">Checksum Error (ERR)<br>
  119. The previous packet must be sent again.</td>
  120. <td><i>None</i></td>
  121. </tr>
  122. <tr>
  123. <td width="22%">68h</td>
  124. <td width="259">Check ready (RDY)</td>
  125. <td><i>None</i></td>
  126. </tr>
  127. <tr>
  128. <td width="22%">6Dh</td>
  129. <td width="259"><i>Silent</i> - Request Screenshot (SCR)</td>
  130. <td><i>None</i></td>
  131. </tr>
  132. <tr>
  133. <td width="22%">92h</td>
  134. <td width="259">End of Transmission (EOT)</td>
  135. <td><i>None</i></td>
  136. </tr>
  137. <tr>
  138. <td width="22%">A2h</td>
  139. <td width="259"><i>Silent</i> - Request Variable (REQ)</td>
  140. <td>A fixed-length, NUL padded <a href="#varheader">variable
  141. header</a></td>
  142. </tr>
  143. <tr>
  144. <td width="22%">C9h</td>
  145. <td width="259"><i>Silent</i> - Request to Send Variable (RTS)</td>
  146. <td>A fixed-length, NUL padded <a href="#varheader">variable
  147. header</a></td>
  148. </tr>
  149. </tbody>
  150. </table>
  151. </p>
  152. <p></p>
  153. <p>Rejection codes (used with Command ID 36h) can have one of the
  154. following values:</p>
  155. <p>
  156. <table border="1" cellspacing="0" width="66%">
  157. <tbody>
  158. <tr>
  159. <th width="13%" bgcolor="#dddddd">Value</th>
  160. <th bgcolor="#dddddd">Description</th>
  161. </tr>
  162. <tr>
  163. <td width="13%">01h</td>
  164. <td>EXIT - The entire transmission has been cancelled.</td>
  165. </tr>
  166. <tr>
  167. <td width="13%">02h</td>
  168. <td>SKIP - The current variable has been skipped.</td>
  169. </tr>
  170. <tr>
  171. <td width="13%">03h</td>
  172. <td>OUT OF MEMORY (silent transmissions only) - The receiving
  173. calculator is out of memory.</td>
  174. </tr>
  175. </tbody>
  176. </table>
  177. </p>
  178. <p></p>
  179. <h4>The Checksum</h4>
  180. <p>The checksum is a 16-bit value used to verify the integrity of the
  181. data in the packet. It only present if data is present.<br>
  182. The checksum is calculated by taking the lower 16 bits of the sum of
  183. the data bytes, as shown below:</p>
  184. <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>
  185. <center>
  186. <h3>
  187. <hr align="center"> <a name="varheader"></a>Variable Headers</h3>
  188. </center>
  189. <p>A Variable header contains information about one variable in the
  190. calculator.<br>
  191. <table border="1" cellspacing="0" width="92%">
  192. <tbody>
  193. <tr>
  194. <th width="7%" bgcolor="#008800"><font color="#ffffff">Offset</font></th>
  195. <th width="8%" bgcolor="#008800"><font color="#ffffff">Length</font></th>
  196. <th width="85%" bgcolor="#008800"><font color="#ffffff">Description</font></th>
  197. </tr>
  198. <tr>
  199. <td width="7%" bgcolor="#ffffff">0</td>
  200. <td width="8%" bgcolor="#ffffff">2 bytes</td>
  201. <td width="85%" bgcolor="#ffffff">Size of actual variable data,
  202. in bytes</td>
  203. </tr>
  204. <tr>
  205. <td width="7%" bgcolor="#ffffff">2</td>
  206. <td width="8%" bgcolor="#ffffff">1 byte</td>
  207. <td width="85%" bgcolor="#ffffff">Type ID Byte (see type ID's
  208. below)</td>
  209. </tr>
  210. <tr>
  211. <td width="7%" bgcolor="#ffffff">3</td>
  212. <td width="8%" bgcolor="#ffffff">8 bytes</td>
  213. <td width="85%" bgcolor="#ffffff">Variable name, padded on the
  214. right with NULL characters (0h). This field is always tokenized.
  215. Not used for ID list.<i></i></td>
  216. </tr>
  217. </tbody>
  218. </table>
  219. <i>Note: These bytes only make up the "data" section of the packet.<br>
  220. </i><i>Note2:<br>
  221. </i><i> - for lists (L1..L6), the first token is a 5D byte followed by
  222. another byte: 01 for L1 to 06 for L6.</i><br>
  223. </p>
  224. <p></p>
  225. <h4><a name="vartypes"></a>The Type ID Byte</h4>
  226. <p>The type ID byte specifies the type of variable that is being
  227. transmitted. It can have one of the following values:</p>
  228. <p>
  229. <table border="1" cellspacing="0" width="66%">
  230. <tbody>
  231. <tr>
  232. <th width="13%" bgcolor="#dddddd">Value</th>
  233. <th bgcolor="#dddddd">Description (click for variable format)</th>
  234. </tr>
  235. <tr>
  236. <td width="13%">00h</td>
  237. <td><a href="vars.html#real">Real Number</a></td>
  238. </tr>
  239. <tr>
  240. <td width="13%">01h</td>
  241. <td><a href="vars.html#list">Real List</a></td>
  242. </tr>
  243. <tr>
  244. <td width="13%">02h</td>
  245. <td><a href="vars.html#equation">Y-Variable</a></td>
  246. </tr>
  247. <tr>
  248. <td width="13%">05h</td>
  249. <td><a href="vars.html#program">Program</a></td>
  250. </tr>
  251. <tr>
  252. <td width="13%">06h</td>
  253. <td>Assembly <a href="vars.html#program">Program</a> ?</td>
  254. </tr>
  255. <tr>
  256. <td width="13%">07h</td>
  257. <td><a href="vars.html#picture">Picture</a></td>
  258. </tr>
  259. <tr>
  260. <td width="13%">0Bh</td>
  261. <td><a href="vars.html#window">Window Settings</a><i> (See note
  262. below)</i></td>
  263. </tr>
  264. <tr>
  265. <td width="13%">0Fh</td>
  266. <td><a href="vars.html#window">Window Settings</a><i> (See note
  267. below)</i></td>
  268. </tr>
  269. <tr>
  270. <td width="13%">11h</td>
  271. <td><a href="vars.html#table">Table Setup</a><i> (See note below)</i></td>
  272. </tr>
  273. <tr>
  274. <td width="13%">13h</td>
  275. <td><a href="backup.html">Backup</a></td>
  276. </tr>
  277. <tr>
  278. <td width="13%">19h</td>
  279. <td><a name="19h"></a><a href="silent.html">Directory</a> <i>(See
  280. note below) </i>- only used when requesting a directory</td>
  281. </tr>
  282. <tr>
  283. <td width="13%">23h</td>
  284. <td><a name="19h"></a><a href="flash.html">FLASH</a> Operating
  285. System</td>
  286. </tr>
  287. <tr>
  288. <td width="13%">24h</td>
  289. <td><a name="19h"></a><a href="flash.html">FLASH</a> Application</td>
  290. </tr>
  291. <tr>
  292. <td width="13%">26h</td>
  293. <td><a name="FLASH"></a><a href="flash.html">ID list</a></td>
  294. </tr>
  295. <tr>
  296. <td width="13%">27h</td>
  297. <td><a name="19h"></a><a href="flash.html">Get Certificate</a></td>
  298. </tr>
  299. </tbody>
  300. </table>
  301. </p>
  302. <p></p>
  303. <h4><a name="backup"></a>Backup Header Format</h4>
  304. <p>If the type ID byte specifies a backup, the variable header takes
  305. the following 9-byte format :</p>
  306. <p>
  307. <table border="1" cellspacing="0" width="92%">
  308. <tbody>
  309. <tr>
  310. <th width="7%" bgcolor="#008800"><font color="#ffffff">Offset</font></th>
  311. <th width="8%" bgcolor="#008800"><font color="#ffffff">Length</font></th>
  312. <th width="85%" bgcolor="#008800"><font color="#ffffff">Description</font></th>
  313. </tr>
  314. <tr>
  315. <td width="7%" bgcolor="#ffffff">0</td>
  316. <td width="8%" bgcolor="#ffffff">2 bytes</td>
  317. <td width="85%" bgcolor="#ffffff">Size of first backup section
  318. (flags area), in bytes</td>
  319. </tr>
  320. <tr>
  321. <td width="7%" bgcolor="#ffffff">2</td>
  322. <td width="8%" bgcolor="#ffffff">1 byte</td>
  323. <td width="85%" bgcolor="#ffffff">Type ID Byte (13h in this
  324. case)</td>
  325. </tr>
  326. <tr>
  327. <td width="7%" bgcolor="#ffffff">3</td>
  328. <td width="8%" bgcolor="#ffffff">2 bytes</td>
  329. <td width="85%" bgcolor="#ffffff">Size of second backup section
  330. (data area), in bytes</td>
  331. </tr>
  332. <tr>
  333. <td width="7%" bgcolor="#ffffff">5</td>
  334. <td width="8%" bgcolor="#ffffff">2 bytes</td>
  335. <td width="85%" bgcolor="#ffffff">Size of third backup section
  336. (symbol area), in bytes</td>
  337. </tr>
  338. <tr>
  339. <td width="7%" bgcolor="#ffffff">7</td>
  340. <td width="8%" bgcolor="#ffffff">2 bytes</td>
  341. <td width="85%" bgcolor="#ffffff">Start User Area Address</td>
  342. </tr>
  343. </tbody>
  344. </table>
  345. </p>
  346. <h4><a name="FLASH"></a>FLASH Header Format<br>
  347. </h4>
  348. <p>If the type ID byte is in the range 22...28h, the variable header
  349. takes the following 10-byte format : </p>
  350. <table border="1" cellspacing="0" width="92%">
  351. <tbody>
  352. <tr>
  353. <th width="7%" bgcolor="#008800"><font color="#ffffff">Offset</font></th>
  354. <th width="8%" bgcolor="#008800"><font color="#ffffff">Length</font></th>
  355. <th width="85%" bgcolor="#008800"><font color="#ffffff">Description</font></th>
  356. </tr>
  357. <tr>
  358. <td width="7%" bgcolor="#ffffff">0</td>
  359. <td width="8%" bgcolor="#ffffff">2 bytes</td>
  360. <td width="85%" bgcolor="#ffffff">Size of actual data, in bytes
  361. (LSB).</td>
  362. </tr>
  363. <tr>
  364. <td width="7%" bgcolor="#ffffff">2</td>
  365. <td width="8%" bgcolor="#ffffff">1 byte</td>
  366. <td width="85%" bgcolor="#ffffff">Type ID Byte (see type ID's
  367. below)</td>
  368. </tr>
  369. <tr>
  370. <td width="7%" bgcolor="#ffffff">3</td>
  371. <td width="8%" bgcolor="#ffffff">2 bytes</td>
  372. <td width="85%" bgcolor="#ffffff">Size of actual data, in bytes
  373. (MSB).</td>
  374. </tr>
  375. <tr>
  376. <td width="7%" bgcolor="#ffffff">5</td>
  377. <td width="8%" bgcolor="#ffffff">1 byte</td>
  378. <td width="85%" bgcolor="#ffffff">Flag - Always has a value of 0h
  379. but bit 7 is set if archived.</td>
  380. </tr>
  381. <tr>
  382. <td width="7%" bgcolor="#ffffff">6</td>
  383. <td width="8%" bgcolor="#ffffff">2 bytes</td>
  384. <td width="85%" bgcolor="#ffffff">FLASH offset</td>
  385. </tr>
  386. <tr>
  387. <td width="7%" bgcolor="#ffffff">8</td>
  388. <td width="8%" bgcolor="#ffffff">2 bytes</td>
  389. <td width="85%" bgcolor="#ffffff">FLASH page</td>
  390. </tr>
  391. </tbody>
  392. </table>
  393. <br>
  394. <p></p>
  395. <p>
  396. <table border="0" cellspacing="0" width="100%">
  397. <tbody>
  398. <tr>
  399. <td width="32%">
  400. <p align="center"><a href="cable.html"><img
  401. src="graphics/prevpage.gif" width="32" height="32" align="bottom"
  402. alt="[previous page]" border="2"><br>
  403. Link Cables</a> </p>
  404. </td>
  405. <td width="34%">
  406. <p align="center"><a href="index.html"><img
  407. src="graphics/home.gif" width="32" height="32" align="bottom"
  408. alt="[home]" border="2"><br>
  409. Table of Contents</a> </p>
  410. </td>
  411. <td width="34%">
  412. <p align="center"><a href="screenshot.html"><img
  413. src="graphics/nextpage.gif" width="32" height="32" align="bottom"
  414. alt="[next page]" border="2"><br>
  415. Screenshots</a> </p>
  416. </td>
  417. </tr>
  418. </tbody>
  419. </table>
  420. </p>
  421. <hr align="center"> <i>Site maintained by Romain Li&eacute;vin (</i><a
  422. href="mailto:roms@lpg.ticalc.org"><i>roms@lpg.ticalc.org</i></a><i>)
  423. and Tim Singer (</i><a href="mailto:tsinger@gladstone.uoregon.edu"><i>tsinger@gladstone.uoregon.edu</i></a><i>)</i>
  424. </body>
  425. </html>