Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  2.     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  6. <meta name="generator" content="AsciiDoc 8.5.3" />
  7. <link rel="stylesheet" href="./xhtml11.css" type="text/css" />
  8. <link rel="stylesheet" href="./xhtml11-quirks.css" type="text/css" />
  9. <link rel="stylesheet" href="./layout1.css" type="text/css" />
  10. <script type="text/javascript">
  11. /*<![CDATA[*/
  12. window.onload = function(){asciidoc.footnotes();}
  13. /*]]>*/
  14. </script>
  15. <script type="text/javascript" src="./asciidoc-xhtml11.js"></script>
  16. <title>AVRA ChangeLog</title>
  17. </head>
  18. <body>
  19. <div id="layout-banner">
  20.   <div id="layout-title">AVRA</div>
  21.   <div id="layout-description">Assember for the Atmel AVR microcontroller family</div>
  22. </div>
  23. <table>
  24. <tr valign="top">
  25. <td id="layout-menu">
  26.   <div>&#187;<a href="index.html">Home</a></div>
  27.   <div>&#187;<a href="README.html">Readme</a></div>
  28.   <div>&#187;<a href="downloads.html">Downloads</a></div>
  29.   <div>&#187;<a href="ChangeLog.html">ChangeLog</a></div>
  30.   <div>&#187;<a href="http://sourceforge.net/projects/avra">Sourceforge</a></div>
  31.   <div id="page-source">&#187;<a href="ChangeLog.txt">Page&nbsp;Source</a></div>
  32. </td>
  33. <td>
  34. <div id="layout-content">
  35. <div id="header">
  36. <h1>AVRA ChangeLog</h1>
  37. </div>
  38. <div id="content">
  39. <h2 id="_version_1_3_0_20100628">Version 1.3.0 (20100628)</h2>
  40. <div class="sectionbody">
  41. <div class="paragraph"><p>by Jerry Jacobs</p></div>
  42. <div class="ulist"><div class="title">Additions and changes</div><ul>
  43. <li>
  44. <p>
  45. Added new targets, ATtiny13A, ATtiny24/A, ATtiny44/A, ATtiny84, ATtiny2313A,
  46.   ATtiny4313, ATmega328P
  47. </p>
  48. </li>
  49. <li>
  50. <p>
  51. Added mingw32 support for building windows binairies from linux host
  52. </p>
  53. </li>
  54. <li>
  55. <p>
  56. Removed obsolete Dev-C++ for windows building
  57. </p>
  58. </li>
  59. <li>
  60. <p>
  61. Updated documentation and rewritten in asciidoc markup language
  62. </p>
  63. </li>
  64. </ul></div>
  65. <div class="ulist"><div class="title">Bug fixes</div><ul>
  66. <li>
  67. <p>
  68. <strong>FIXED</strong>: 1934647: Handle also <em>#</em> directives because include files don&#8217;t use <em>.</em> directives.
  69. </p>
  70. </li>
  71. <li>
  72. <p>
  73. <strong>FIXED</strong>: 1970530: Make whitespace character possible between function name and open bracket.
  74. </p>
  75. </li>
  76. <li>
  77. <p>
  78. <strong>FIXED</strong>: 1970630: Make line continuation possible with backslash as the last character of a line.
  79. </p>
  80. </li>
  81. <li>
  82. <p>
  83. <strong>FIXED</strong>: 2929406: Change incorrect argument --includedir to includepath.
  84. </p>
  85. </li>
  86. </ul></div>
  87. </div>
  88. <h2 id="_version_1_2_3_20071115">Version 1.2.3 (20071115)</h2>
  89. <div class="sectionbody">
  90. <div class="paragraph"><p>by Burkhard Arenfeld</p></div>
  91. <div class="ulist"><ul>
  92. <li>
  93. <p>
  94. Fix bug 1697037 (Error with single character <em>;</em>)
  95. </p>
  96. </li>
  97. <li>
  98. <p>
  99. Better check for line termination. Now a single CR or a FF generates an warning message. Code with bad CR
  100.   termination could appear, if you edit CR-LF terminated files (WIN/DOS) with linux (LF only) editors.
  101. </p>
  102. </li>
  103. <li>
  104. <p>
  105. Add patch 1604128 from Jim Galbraith (New devices ATtiny25/45/85, small fix for ATmega8 (no jmp, call instruction))
  106. </p>
  107. </li>
  108. <li>
  109. <p>
  110. Fix bug in handling of special tags (%HOUR% &#8230;). A % without a special tag was replaced by previous tag value.
  111. </p>
  112. </li>
  113. <li>
  114. <p>
  115. Use a global timestamp for all functions which needs a time (pi&#8594;time).
  116. </p>
  117. </li>
  118. <li>
  119. <p>
  120. Fix bug in handling of unknown args (E.g.: avra --abc &#8594; Segfault).
  121. </p>
  122. </li>
  123. <li>
  124. <p>
  125. Fix segfault if .error directive without parameter is used.
  126. </p>
  127. </li>
  128. <li>
  129. <p>
  130. Add a warning, if characters with code &gt; 127 are used in .db strings and fix listing output.
  131. </p>
  132. </li>
  133. <li>
  134. <p>
  135. Take a look at Testcode_avra-1_2_3.asm, which demonstrate some differences between 1.2.3 and previous releases
  136. </p>
  137. </li>
  138. <li>
  139. <p>
  140. AVR000.zip contains some header files for different devices.
  141. </p>
  142. </li>
  143. <li>
  144. <p>
  145. Included avra binary was created with ubuntu 7.10 linux
  146. </p>
  147. </li>
  148. </ul></div>
  149. <div class="ulist"><div class="title">Bug fixes</div><ul>
  150. <li>
  151. <p>
  152. <strong>FIXED</strong>: 1462900: Segfault, if error in -D parameter.
  153. </p>
  154. </li>
  155. <li>
  156. <p>
  157. <strong>FIXED</strong>: 1742436: Error in .dseg size check.
  158. </p>
  159. </li>
  160. <li>
  161. <p>
  162. <strong>FIXED</strong>: 1742437: Error in EEPROM presence check
  163. </p>
  164. </li>
  165. </ul></div>
  166. </div>
  167. <h2 id="_version_1_2_2_20070511">Version 1.2.2 (20070511)</h2>
  168. <div class="sectionbody">
  169. <div class="paragraph"><p>by Burkhard Arenfeld</p></div>
  170. <div class="ulist"><ul>
  171. <li>
  172. <p>
  173. Check in print_msg() if filename is NULL. Avoid printing a NULL-Pointer.
  174. </p>
  175. </li>
  176. <li>
  177. <p>
  178. Warning, if no .DEVICE was found, because address range check doesn&#8217;t work without it
  179. </p>
  180. </li>
  181. <li>
  182. <p>
  183. Error, if more than one .DEVICE was found.
  184. </p>
  185. </li>
  186. <li>
  187. <p>
  188. Error, if .DEVICE is after any assembled code or .ORG directive, because .DEVICE resets the address
  189.   counters and the assembler builds wrong code.
  190. </p>
  191. </li>
  192. <li>
  193. <p>
  194. Create a list of program segments (see orglist). Every .ORG, .DEVICE, .?SEG is stored, so the
  195.   assembler now can check for overlapping segments. Now overlapped segments in Flash, Data or EEPROM memory
  196.   are detected. Very usefull, if .ORG is used to build tables or bootloader code at specific addresses.
  197. </p>
  198. </li>
  199. <li>
  200. <p>
  201. Better check for exceeding device space in RAM, Flash or EEPROM memory. Now not the total count of
  202.   assembled memory is used, instead every assembled address range is checked.
  203. </p>
  204. </li>
  205. <li>
  206. <p>
  207. .DSEG and .ESEG now generates an error, if device has no RAM / EEPROM.
  208. </p>
  209. </li>
  210. <li>
  211. <p>
  212. Now a warning appears, if a .DEF name is already used as constant or label. Atmel assembler generates this
  213.   warning, too.
  214. </p>
  215. </li>
  216. <li>
  217. <p>
  218. Fix a small bug in the example program.
  219. </p>
  220. </li>
  221. </ul></div>
  222. </div>
  223. <h2 id="_version_1_2_1_20061117">Version 1.2.1 (20061117)</h2>
  224. <div class="sectionbody">
  225. <div class="paragraph"><p>by Roland Riegel</p></div>
  226. <div class="ulist"><ul>
  227. <li>
  228. <p>
  229. Some of the high end AVRs use the SRAM adress range from 0x60 to 0x100 for IO extension.
  230.   Avra so far used to start with SRAM Usage at 0x60. This is now set from case by case.
  231. </p>
  232. </li>
  233. </ul></div>
  234. </div>
  235. <h2 id="_version_1_2_0_20061015">Version 1.2.0 (20061015)</h2>
  236. <div class="sectionbody">
  237. <div class="paragraph"><p>by Burkhard Arenfeld</p></div>
  238. <div class="ulist"><ul>
  239. <li>
  240. <p>
  241. Patch segfault, if .error is given without parameter
  242. </p>
  243. </li>
  244. <li>
  245. <p>
  246. Patch segfault, if .device is given with an invalid parameter
  247. </p>
  248. </li>
  249. <li>
  250. <p>
  251. Check in predef_dev() if symbol is already defined. Can happens, if someone
  252.   tries to define the symbol with the -D parameter. E.g.: <em>avra -D <em>ATMEGA8</em> Test.asm</em>
  253.   now generate error message, because <em>ATMEGA8</em> is reserved
  254. </p>
  255. </li>
  256. <li>
  257. <p>
  258. Add .elseif directive. It&#8217;s the same like .elif. (Original Atmel assembler use .elseif
  259.   and not .elif)
  260. </p>
  261. </li>
  262. <li>
  263. <p>
  264. In .db lines strings can now contain <em>,</em> and <em>;</em> characters.
  265. </p>
  266. </li>
  267. <li>
  268. <p>
  269. Allow forward declaration of constants (.equ) except for .ifdef and .ifndef.
  270.   Invalid forward declarations are checked now. (In the first pass undefined Symbols in
  271.   .ifdef and .ifndef parameters are stored in a <em>blacklist</em> and checked in the second pass)
  272. </p>
  273. </li>
  274. <li>
  275. <p>
  276. Extend the .message directive for better debugging. Now it accept not only a String.
  277.   You can use a list of expressions like in a .db directive as parameter.
  278. </p>
  279. </li>
  280. <li>
  281. <p>
  282. The assembler <em>pass</em> variable moved into the pi struct. I deleted the pass variable from
  283.   a lot of functions.
  284. </p>
  285. </li>
  286. <li>
  287. <p>
  288. New functions in avra.c. It was easier for me, to understand the code without the
  289.   for(label = first; &#8230;)-loops. Replaced a lot of for(label = &#8230;) -loops by one of this
  290.   functions.
  291. </p>
  292. </li>
  293. </ul></div>
  294. </div>
  295. <h2 id="_version_1_1_1_20060906">Version 1.1.1 (20060906)</h2>
  296. <div class="sectionbody">
  297. <div class="ulist"><ul>
  298. <li>
  299. <p>
  300. right shift operator bug
  301. </p>
  302. </li>
  303. <li>
  304. <p>
  305. LPM is supported on ATtiny26 but avra say it isn&#8217;t
  306. </p>
  307. </li>
  308. <li>
  309. <p>
  310. bugfix for jmp/call opcode
  311. </p>
  312. </li>
  313. <li>
  314. <p>
  315. crash due to a strcmp with null pointer when parsing the cmd line args
  316. </p>
  317. </li>
  318. </ul></div>
  319. </div>
  320. <h2 id="_version_1_1_0_20051227">Version 1.1.0 (20051227)</h2>
  321. <div class="sectionbody">
  322. <div class="paragraph"><p>by Tobias Weber</p></div>
  323. <div class="ulist"><ul>
  324. <li>
  325. <p>
  326. .DW defines were missing in the listfile.
  327. </p>
  328. </li>
  329. <li>
  330. <p>
  331. Support for mega8515.
  332. </p>
  333. </li>
  334. <li>
  335. <p>
  336. Fix for generic register names and extended macro syntax.
  337. </p>
  338. </li>
  339. <li>
  340. <p>
  341. Makefile for lcc-win32 Compiler.
  342. </p>
  343. </li>
  344. <li>
  345. <p>
  346. Changed "global" keyword to ".global".
  347. </p>
  348. </li>
  349. <li>
  350. <p>
  351. Added .includepath directive that allows setting include path.
  352. </p>
  353. </li>
  354. <li>
  355. <p>
  356. segfault when not passing any sourcefiles.
  357. </p>
  358. </li>
  359. <li>
  360. <p>
  361. --define FOO=2 does not work as claimed by the documentation.
  362. </p>
  363. </li>
  364. <li>
  365. <p>
  366. Added return value, indicating whether avra failed or succeded.
  367. </p>
  368. </li>
  369. <li>
  370. <p>
  371. Added support for automake utilities. See manual for more info.
  372. </p>
  373. </li>
  374. <li>
  375. <p>
  376. if no code is present, eeprom hex file will be written anyway.
  377. </p>
  378. </li>
  379. <li>
  380. <p>
  381. added -W NoRegDef for suppressing Register assignment warnings.
  382. </p>
  383. </li>
  384. <li>
  385. <p>
  386. .db values were sometimes wrong printed in lst file with 6 leading F.
  387. </p>
  388. </li>
  389. <li>
  390. <p>
  391. Added BYTE1() function equivalent to LOW().
  392. </p>
  393. </li>
  394. <li>
  395. <p>
  396. The character " (pharentesis) could not be use as single character like <em>"</em>
  397. </p>
  398. </li>
  399. </ul></div>
  400. </div>
  401. <h2 id="_version_1_0_1_20040610">Version 1.0.1 (20040610)</h2>
  402. <div class="sectionbody">
  403. <div class="paragraph"><p>by Tobias Weber</p></div>
  404. <div class="ulist"><ul>
  405. <li>
  406. <p>
  407. Added meta tags for time and date.
  408. </p>
  409. </li>
  410. <li>
  411. <p>
  412. Expression of .elif was cutted off in list file - fixed.
  413. </p>
  414. </li>
  415. <li>
  416. <p>
  417. .equ, .org, .defines added to list file output.
  418. </p>
  419. </li>
  420. <li>
  421. <p>
  422. Values and expressions of .db assignemts are now listed in listfile.
  423. </p>
  424. </li>
  425. <li>
  426. <p>
  427. Added Support for ATmega48, ATmega88 and ATmega168.
  428. </p>
  429. </li>
  430. <li>
  431. <p>
  432. Added .include error file name print out.
  433. </p>
  434. </li>
  435. <li>
  436. <p>
  437. Fixed seg fault that could happen while using .LIST directive with no
  438.   listfile switched on.
  439. </p>
  440. </li>
  441. <li>
  442. <p>
  443. Error when using comments within macros that made use of sign @ fixed.
  444. </p>
  445. </li>
  446. <li>
  447. <p>
  448. Listfile lines are now prefixed with the current segment C,D,E for
  449.   code, data and eeprom.
  450. </p>
  451. </li>
  452. </ul></div>
  453. </div>
  454. <h2 id="_version_1_0_0_20040214">Version 1.0.0 (20040214)</h2>
  455. <div class="sectionbody">
  456. <div class="paragraph"><p>by Tobias Weber</p></div>
  457. <div class="ulist"><ul>
  458. <li>
  459. <p>
  460. Added support for ATtiny13 and ATtiny2313
  461. </p>
  462. </li>
  463. <li>
  464. <p>
  465. List file command line syntax now AVRASM compatible
  466. </p>
  467. </li>
  468. <li>
  469. <p>
  470. Map file command line syntax now  AVRASM compatible
  471. </p>
  472. </li>
  473. <li>
  474. <p>
  475. Fixed problem with limited macro label running numbers
  476. </p>
  477. </li>
  478. <li>
  479. <p>
  480. Now multiple labels can be used within macros
  481. </p>
  482. </li>
  483. <li>
  484. <p>
  485. Fixed error output line number for included files
  486. </p>
  487. </li>
  488. <li>
  489. <p>
  490. code cleaned up
  491. </p>
  492. </li>
  493. </ul></div>
  494. </div>
  495. <h2 id="_version_0_9_1_20030602">Version 0.9.1 (20030602)</h2>
  496. <div class="sectionbody">
  497. <div class="paragraph"><p>by Tobias Weber</p></div>
  498. <div class="ulist"><ul>
  499. <li>
  500. <p>
  501. fixed code for Linux compiler
  502. </p>
  503. </li>
  504. <li>
  505. <p>
  506. fixed nested macro labels
  507. </p>
  508. </li>
  509. <li>
  510. <p>
  511. code cleaned up
  512. </p>
  513. </li>
  514. </ul></div>
  515. </div>
  516. <h2 id="_version_0_9_20030523">Version 0.9 (20030523)</h2>
  517. <div class="sectionbody">
  518. <div class="paragraph"><p>by Tobias Weber</p></div>
  519. <div class="ulist"><ul>
  520. <li>
  521. <p>
  522. Added labels to macros
  523. </p>
  524. </li>
  525. <li>
  526. <p>
  527. Added special codes <em>dst</em> and <em>src</em>
  528. </p>
  529. </li>
  530. <li>
  531. <p>
  532. Added directive .endmacro, only .endm was allowed so far
  533. </p>
  534. </li>
  535. <li>
  536. <p>
  537. Added a return(0); at the end of main() to quiet the Borland C++ 5.5
  538.   compiler (Jim Galbraith)
  539. </p>
  540. </li>
  541. <li>
  542. <p>
  543. Fixed wrong flash size calculation (Jim Galbraith)
  544. </p>
  545. </li>
  546. <li>
  547. <p>
  548. In device.c, added ATtiny26 to struct device device_list[] (Jim Galbraith)
  549. </p>
  550. </li>
  551. </ul></div>
  552. </div>
  553. <h2 id="_version_0_8_20030307">Version 0.8 (20030307)</h2>
  554. <div class="sectionbody">
  555. <div class="paragraph"><p>by Tobias Weber</p></div>
  556. <div class="ulist"><ul>
  557. <li>
  558. <p>
  559. Added new macro assembler coding facilities
  560. </p>
  561. </li>
  562. <li>
  563. <p>
  564. Added error description for .include directives
  565. </p>
  566. </li>
  567. </ul></div>
  568. </div>
  569. <h2 id="_version_0_7_20000217">Version 0.7 (20000217)</h2>
  570. <div class="sectionbody">
  571. <div class="ulist"><ul>
  572. <li>
  573. <p>
  574. Added supported() function to check in a .if if a instruction is
  575.   supported (From Lesha Bogdanow &lt;<a href="mailto:boga@inbox.ru">boga@inbox.ru</a>&gt;).
  576. </p>
  577. </li>
  578. <li>
  579. <p>
  580. Added checking of which mnemonic that work on the different AVRs
  581.   (From Lesha Bogdanow &lt;<a href="mailto:boga@inbox.ru">boga@inbox.ru</a>&gt;).
  582. </p>
  583. </li>
  584. <li>
  585. <p>
  586. Added constants <em>DEVICE</em>, <em>FLASH_SIZE</em>, <em>RAM_SIZE</em> and
  587.   <em>EEPROM_SIZE</em> (From Lesha Bogdanow &lt;<a href="mailto:boga@inbox.ru">boga@inbox.ru</a>&gt;).
  588. </p>
  589. </li>
  590. <li>
  591. <p>
  592. Added tiny devices (From Lesha Bogdanow &lt;<a href="mailto:boga@inbox.ru">boga@inbox.ru</a>&gt;).
  593. </p>
  594. </li>
  595. <li>
  596. <p>
  597. Changed error on constant out of range into a warning.
  598. </p>
  599. </li>
  600. <li>
  601. <p>
  602. Added support for instructions: (E)LPM Rd,Z(+), SPM, ESPM, BREAK,
  603.   MOVW, MULS, MULSU, FMUL, FMULS, FMULSU
  604. </p>
  605. </li>
  606. <li>
  607. <p>
  608. Added support for new devices: ATmega8, ATmega16, ATmega32,
  609.   ATmega128, ATmega162, ATmega163, ATmega323, AT94K
  610. </p>
  611. </li>
  612. <li>
  613. <p>
  614. Added --devices switch to list all supported devices.
  615. </p>
  616. </li>
  617. <li>
  618. <p>
  619. Fixed bug in map file name when the name had more than one . (dot)
  620. </p>
  621. </li>
  622. <li>
  623. <p>
  624. Added option --includedirs to add additional include dirs in
  625.   search path.
  626. </p>
  627. </li>
  628. <li>
  629. <p>
  630. Added support for creation of intel hex 32 files to be able to
  631.   address memory above 64KB. Uses 02 records for addresses up to 1MB
  632.   and 04 record for addresses above 1MB.
  633. </p>
  634. </li>
  635. </ul></div>
  636. </div>
  637. <h2 id="_version_0_6_20000124">Version 0.6 (20000124)</h2>
  638. <div class="sectionbody">
  639. <div class="ulist"><ul>
  640. <li>
  641. <p>
  642. Added COFF support from Bob Harris &lt;<a href="mailto:rth@McLean.Sparta.Com">rth@McLean.Sparta.Com</a>&gt;
  643. </p>
  644. </li>
  645. </ul></div>
  646. </div>
  647. <h2 id="_version_0_5_19990331">Version 0.5 (19990331)</h2>
  648. <div class="sectionbody">
  649. <div class="ulist"><ul>
  650. <li>
  651. <p>
  652. Bugfix: a inline string copy did not terminate string.
  653. </p>
  654. </li>
  655. <li>
  656. <p>
  657. Fixed bug causing --define symbol=value not to work.
  658. </p>
  659. </li>
  660. <li>
  661. <p>
  662. Added output of memory usage.
  663. </p>
  664. </li>
  665. <li>
  666. <p>
  667. Fixed bug when there was a { in a comment.
  668. </p>
  669. </li>
  670. <li>
  671. <p>
  672. Fixed count for data segment.
  673. </p>
  674. </li>
  675. <li>
  676. <p>
  677. Fix to make a forward referenced label in .db/.dw work.
  678. </p>
  679. </li>
  680. <li>
  681. <p>
  682. Added ATmega161 and ATtiny15 in list.
  683. </p>
  684. </li>
  685. <li>
  686. <p>
  687. rjmp and rcall now wraps around with 4k word devices.
  688. </p>
  689. </li>
  690. <li>
  691. <p>
  692. Fixed bug when branching backwards with BRBS or BRBC
  693. </p>
  694. </li>
  695. </ul></div>
  696. </div>
  697. <h2 id="_version_0_4_19990202">Version 0.4 (19990202)</h2>
  698. <div class="sectionbody">
  699. <div class="ulist"><ul>
  700. <li>
  701. <p>
  702. Added support for global keyword to use on labels in macros.
  703. </p>
  704. </li>
  705. <li>
  706. <p>
  707. Fixed get_next_token to handle commas inside ' '
  708. </p>
  709. </li>
  710. <li>
  711. <p>
  712. Fixed bug when searching for correct macro_call, so recursive
  713.   and nested macros will work.
  714. </p>
  715. </li>
  716. <li>
  717. <p>
  718. Now handles commas in strings.
  719. </p>
  720. </li>
  721. <li>
  722. <p>
  723. Added fix to handle semi colon in a string.
  724. </p>
  725. </li>
  726. <li>
  727. <p>
  728. Improved mnemonic parsing for ld and st
  729. </p>
  730. </li>
  731. </ul></div>
  732. </div>
  733. </div>
  734. <div id="footnotes"><hr /></div>
  735. <div id="footer">
  736. <div id="footer-text">
  737. Version 1.3.0<br />
  738. Last updated 2010-06-28 16:04:24 CEST
  739. </div>
  740. <div id="footer-badges">
  741. <a href="http://validator.w3.org/check?uri=referer">
  742.   <img style="border:0;width:88px;height:31px"
  743.     src="http://www.w3.org/Icons/valid-xhtml11-blue"
  744.     alt="Valid XHTML 1.1" height="31" width="88" />
  745. </a>
  746. <a href="http://jigsaw.w3.org/css-validator/">
  747.   <img style="border:0;width:88px;height:31px"
  748.     src="http://jigsaw.w3.org/css-validator/images/vcss-blue"
  749.     alt="Valid CSS!" />
  750. </a>
  751. <a href="http://www.mozilla.org/products/firefox/">
  752.   <img style="border:none; width:110px; height:32px;"
  753.        src="http://www.spreadfirefox.com/community/images/affiliates/Buttons/110x32/safer.gif"
  754.        alt="Get Firefox!" />
  755. </a>
  756. </div>
  757. </div>
  758. </div>
  759. </td>
  760. </tr>
  761. </table>
  762. </body>
  763. </html>
  764.