history.hss 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946
  1. [Main]
  2. Title=History of A68k
  3. [Top]
  4. <B>Note:</B> This section has been added to the documentation by the TIGCC Team. It was in <I>history.txt</I> before.
  5. <BR><BR>
  6. <B>Version 2.71.F3y (Patrick Pelissier, June 27, 2009)</B>
  7. <UL><LI>Improved: the maximum length of a line has been raised from 256 to 65536.</LI></UL>
  8. <UL><LI>Bugfix: don't compile A68k statically, as it fails on multiple platforms in their
  9. out of the box configuration (Lionel Debroux).</LI></UL>
  10. <B>Version 2.71.F3x (Manoel Trapier, December 23, 2008)</B>
  11. <UL><LI>Added: OS X Makefile that generate an Universal Binary version.</LI></UL>
  12. <B>Version 2.71.F3w (Kevin Kofler, July 27, 2006)</B>
  13. <UL><LI>Bugfix: Fixed compilation on *BSD and recent versions of OS X.</LI></UL>
  14. <B>Version 2.71.F3v (Kevin Kofler, July 31, 2005)</B>
  15. <UL><LI>Bugfix: Don't crash on EQUs doing arithmetic with other EQUs which do
  16. arithmetic with undefined symbols, print an error instead.</LI></UL>
  17. <B>Version 2.71.F3u (Kevin Kofler, February 2, 2005)</B>
  18. <UL><LI>Bugfix: Fixed compilation with GCC 3.4.</LI></UL>
  19. <B>Version 2.71.F3t (Kevin Kofler, January 31, 2005)</B>
  20. <UL><LI>Added: NO_UNOPTIMIZABLE_RELOCS compile-time define (disabled by default)
  21. to allow generating AmigaOS-compatible object files again.</LI>
  22. <LI>Improved: Branches explicitly coded as .w are now marked unoptimizable.</LI>
  23. <LI>Improved: Label references explicitly coded as .l are now marked
  24. unoptimizable.</LI>
  25. <LI>Bugfix: Emitting relocations for undefined symbols which are already in
  26. the symbol table due to the forward branch optimization code now
  27. works properly.</LI></UL>
  28. <B>Version 2.71.F3s (Kevin Kofler, September 21, 2004)</B>
  29. <UL><LI>Added: Support for the "unoptimizable reloc" flag, keeping the linker
  30. from corrupting some instructions when optimizing.</LI>
  31. <LI>Improved: All platforms now use the same maximum line length and chunk
  32. sizes.</LI>
  33. <LI>Improved: The line count limit has been raised from 32767 to INT_MAX.</LI></UL>
  34. <B>Version 2.71.F3r (Kevin Kofler, July 19, 2004)</B>
  35. <UL><LI>Bugfix: Fixed label(PC,Rn) addressing when "label" was in a different
  36. section (again) (reported by Julien Moutinho).</LI></UL>
  37. <B>Version 2.71.F3q (Kevin Kofler, December 30, 2003)</B>
  38. <UL><LI>Bugfix: Fixed label1-label2(an) in all-relocs mode (reported by
  39. hwti).</LI>
  40. <LI>Added: (In all-relocs mode,) don't emit an address difference when the 2
  41. labels are actually at the same address (or simply the same). This allows to
  42. keep optimizing label1-label1(an) into (an).</LI>
  43. <LI>Bugfix: Fixed a bug when range-checking branches in all-relocs mode
  44. (reported by hwti).</LI>
  45. <LI>Bugfix: Fixed a bug when range-checking short branches in all-relocs mode or
  46. to a different section (reported by hwti).</LI></UL>
  47. <B>Version 2.71.F3p (Kevin Kofler, December 1, 2003)</B>
  48. <UL><LI>Bugfix: Fixed label(PC,Rn) addressing in all-relocs mode or when "label" was
  49. in a different section (reported by Matthieu Gallet).</LI></UL>
  50. <B>Version 2.71.F3o (Kevin Kofler, October 5, 2003)</B>
  51. <UL><LI>Bugfix: Range checking now works correctly in all-relocs mode. (No more
  52. spurious out-of-range errors.)</LI></UL>
  53. <B>Version 2.71.F3n (Kevin Kofler, September 28, 2003)</B>
  54. <UL><LI>Bugfix: Local labels now work in all-relocs mode.</LI></UL>
  55. <B>Version 2.71.F3m (Kevin Kofler, September 2, 2003)</B>
  56. <UL><LI>Bugfix: PC-relative or indexed references to other sections didn't work.</LI>
  57. <LI>Bugfix: x(PC,Dn) or x(PC,An) didn't work in all-relocs mode.</LI></UL>
  58. <B>Version 2.71.F3l (Kevin Kofler, July 15, 2003)</B>
  59. <UL><LI>Added: The -u switch now also allows unaligned code, which can be useful
  60. when the code will be copied somewhere else anyway.</LI>
  61. <LI>Added: Short branches across hunks or object files are now allowed.</LI>
  62. <LI>Added: -a (All relocs) switch, which tells A68k to emit all relocs, even
  63. PC-relative relocs within a section. It also emits address
  64. differences in a special TIGCC-specific format. This will allow
  65. more aggressive linker-side optimization.</LI></UL>
  66. <B>Version 2.71.F3k (Kevin Kofler, May 17, 2003)</B>
  67. <UL><LI>Bugfix: Increased the forward reference buffer in order to allow
  68. multiple labels at the same location, as used in PedroM.</LI>
  69. <LI>Added: -u (Unaligned) switch, which disables automatic alignment of
  70. DC.W, DC.L, DCB.W, DCB.L, DS.W and DS.L.</LI></UL><BR>
  71. <B>Version 2.71.F3i (Kevin Kofler, February 1, 2002)</B>
  72. <UL><LI>Bugfix: Local labels caused a &quot;Pass 1 / Pass 2 phase error&quot;
  73. when preceded by an include file which
  74. contained labels, but was skipped in pass 2 (such as OS.h).</LI></UL><BR>
  75. <B>Version 2.71.F3h (Kevin Kofler, January 23, 2002)</B>
  76. <UL><LI>Bugfix: The TITLE (or TTL) directive did not work at all.
  77. It now works as it is supposed to.</LI>
  78. <LI>Bugfix: No longer crashes when trying to generate a
  79. listing file with cross-references (using the -x
  80. switch).</LI></UL><BR>
  81. <B>Version 2.71.F3g (Kevin Kofler, January 22, 2002)</B>
  82. <UL><LI>Bugfix: The RORG and PUBLIC directives are now recognized
  83. correctly even if the first letter is not
  84. capitalized. Thanks to Brandon Sterner for
  85. reporting the problem with the RORG directive.</LI></UL><BR>
  86. <B>Version 2.71.F3f (Kevin Kofler, January 8, 2002)</B>
  87. <UL><LI>Now also accepts &quot;;&quot;, and for the -v switch also &quot;=&quot;, as
  88. separator in command line arguments (wherever &quot;,&quot; is
  89. allowed), for compatibility with the &quot;-WA,&quot; switch in
  90. <CODE>tigcc</CODE>.</LI></UL><BR>
  91. <B>Version 2.71.F3e (Kevin Kofler, August 3, 2001)</B>
  92. <UL><LI>Bugfix: The SUB-&gt;LEA optimisation did not change the
  93. sign of the immediate value.</LI></UL><BR>
  94. <B>Version 2.71.F3d (Kevin Kofler, July 28, 2001)</B>
  95. <UL><LI>Bugfix: The ADD(A)/SUB(A)-&gt;LEA and LEA-&gt;ADDQ/SUBQ
  96. optimizations caused &quot;Pass 1 / Pass 2 phase
  97. errors&quot; if an optimization was known to be
  98. possible only in pass 2 (i.e. if using forward
  99. references to labels in the instruction). A68k
  100. will not try to optimize those anymore. Maybe a
  101. future version will provide support for this kind
  102. of optimization, but it is very difficult to
  103. implement.</LI>
  104. <LI>Bugfix: A68k did not compile correctly on Visual C++
  105. because I had done a define in an incorrect way.</LI></UL><BR>
  106. <B>Version 2.71.F3c (Kevin Kofler, July 20, 2001)</B>
  107. <UL><LI>Applied a few patches submitted by Paul Froissart:
  108. <UL><LI>A few more adaptations for compiling with Microsoft
  109. Visual C++. (Note that I still recommend using GCC for
  110. Mingw32.)</LI>
  111. <LI>A new command line switch:
  112. <DL><DT>-v<DD>Allows to set a variable in the command line (like
  113. -d with GCC). The variable will be a SET, not EQU
  114. variable. Syntax: &quot;-v&lt;name&gt;[,&lt;value&gt;]&quot; (without
  115. spaces, and without the quotes). Note that &lt;value&gt;
  116. can only be a NUMBER at the moment. (We might
  117. support symbols as values in a future version.)
  118. The default value of &lt;value&gt; is 1.</DL></LI>
  119. <LI>Improved the optimization:
  120. <UL><LI>made optional the optimization which changes MOVEM
  121. with a single register to MOVE</LI>
  122. <LI>added an optional optimization which changes ADD(A)
  123. and SUB(A) to LEA when applicable</LI>
  124. <LI>added an optional optimization which changes LEA to
  125. ADDQ or SUBQ when applicable</LI>
  126. <LI>added a command line switch which allows you to
  127. selectively disable some optimizations:
  128. <DL><DT>-r<DD>Allows to disable specific optimizations:
  129. <TABLE CLASS="NOBORDER"><TR><TD CLASS="NOBORDER">-rm</TD><TD CLASS="NOBORDER">Disable the MOVEM -&gt; MOVE optimization</TD></TR>
  130. <TR><TD CLASS="NOBORDER">-ra</TD><TD CLASS="NOBORDER">Disable the ADD(A)/SUB(A) -&gt; LEA optimization</TD></TR>
  131. <TR><TD CLASS="NOBORDER">-rl</TD><TD CLASS="NOBORDER">Disable the LEA -&gt; ADDQ/SUBQ optimization</TD></TR></TABLE>
  132. You may use more than one -r switch (as in
  133. &quot;-rm -ra&quot;) or combine them into a single switch
  134. (as in &quot;-rma&quot;).
  135. You can still use -n to disable ALL optimizations
  136. (even those not covered by -r).</DL></LI></UL></LI>
  137. <LI>Added 2 more synonyms:
  138. <UL><LI>SLO = SCS</LI>
  139. <LI>SHS = SCC</LI></UL></LI>
  140. <LI>The END directive is now optional. If you do not use
  141. it, the assembly will automatically end at the end of
  142. your source file.</LI></UL></LI>
  143. <LI>Also fixed a bug found by Paul Froissart involving the
  144. reporting of invalid flags with the SECTION directive.
  145. (Not that anyone would use those flags anyway.)</LI>
  146. <LI>Adapted and applied a very old patch by John Antonishek,
  147. which allows you to define a symbol as XDEF even if it
  148. has been declared as XREF before. This is especially
  149. useful when using a common include file for globals.</LI>
  150. <LI>Moreover, END is not allowed in macros or include files
  151. anymore since that was causing a few bugs because A68k
  152. simply did not expect anyone to use it there. The
  153. quickest remedy is to simply remove the END instruction,
  154. since it is now optional anyway.</LI></UL><BR>
  155. <B>Version 2.71.F3b (Kevin Kofler, July 12, 2001)</B>
  156. <UL><LI>Bugfix: Now raises an error if an undefined local label is
  157. used.</LI>
  158. <LI>Bugfix: Branches coded with an explicit length (.W or .L)
  159. are not optimized (or flagged as optimizable)
  160. anymore.<BR>
  161. (In previous versions, .B or .S was not optimized,
  162. but .W or .L could be optimized to a short branch.
  163. Now, only branches without an explicit length will
  164. be optimized.)</LI>
  165. <LI>Bugfix: Quoted strings can now be passed as macro
  166. arguments without the need for '&lt;' and '&gt;', even
  167. if they contain spaces or separators (',' or ';').
  168. You can still use '&lt;' and '&gt;', for example in
  169. order to pass strings like &lt;129,' version'&gt; (which
  170. will appear as &quot;ß version&quot; on a TI-89/92/92+).</LI></UL><BR>
  171. <B>Version 2.71.F3a (Kevin Kofler, July 9, 2001)</B>
  172. <UL><LI>Win32 port for the TIGCC project, compiled with GCC for
  173. Mingw32.<BR>
  174. Even though we recommend Mingw32, A68k should also compile
  175. with Microsoft Visual C++, thanks to Paul Froissart.
  176. (Please do NOT ask me questions about compiling with
  177. Visual C++. I have just put in Paul Froissart's ifdefs.)
  178. It also compiles with Cygwin, but since the result is
  179. larger than the Mingw32 version, I do not see any benefit
  180. in using it.</LI>
  181. <LI>Bugfix: My Win32 port of v.2.71.F3 did not support labels
  182. or variable names which contain accented
  183. characters.</LI>
  184. <LI>Bugfix: Now detects all errors in include files. All
  185. include files will be treated in pass 2 if an
  186. error is detected.</LI>
  187. <LI>Bugfix by Paul Froissart: fixed a random crash bug due to
  188. a missing initialization</LI>
  189. <LI>Bugfix by Julien Muchembled: allow odd displacements for
  190. words and longwords if the
  191. resulting address might be
  192. even</LI>
  193. <LI>The Win32 version is now less greedy with the memory, so
  194. its limitations are less annoying:
  195. <UL><LI>lines can now be 256 bytes long (Paul Froissart)</LI>
  196. <LI>filenames (with path) can now be 259 bytes long (the
  197. Win32 maximum)</LI>
  198. <LI>the default heap sizes have also been increased (Paul
  199. Froissart)</LI></UL></LI>
  200. <LI>Added the following synonyms:
  201. <UL><LI>BLO = BCS</LI>
  202. <LI>BHS = BCC</LI>
  203. <LI>DBLO = DBCS</LI>
  204. <LI>DBHS = DBCC</LI>
  205. <LI>ROLX = ROXL</LI>
  206. <LI>RORX = ROXR</LI></UL></LI></UL><BR>
  207. <B>Version 2.71.F3 (David Ellsworth, July 11, 2000)</B>
  208. <UL><LI>Fixed a bug introduced by my modifications that prevented
  209. branches from being optimized in Global XRef mode.</LI></UL><BR>
  210. <B>Version 2.71.F2 (David Ellsworth, January 22, 1998)</B>
  211. <UL><LI>Made A68k properly differentiate between PC-relative and
  212. absolute references to external symbols. Allowed branches
  213. to reference external labels in Global XRef (-g parameter)
  214. mode.</LI></UL><BR>
  215. <B>Version 2.71.F1 (David Ellsworth, January 7, 1998)</B>
  216. <UL><LI>Made changes so that combinations of EQU, XREF, and XDEF
  217. directives work better together. These changes were made in
  218. order for Fargo II library linking to be easier to do.</LI>
  219. <LI>The F1 stands for Fargo patchlevel 1.</LI></UL><BR>
  220. <B>Version 2.71 (Charlie Gibbs, April 16, 1991)</B>
  221. <BR><BR>
  222. The following bugs in version 2.62 have been corrected:
  223. <UL><LI>Enforcer checks were being generated if command-line
  224. parameters that took a numeric value had no value or
  225. the value was invalid. CalcValue was attempting to
  226. look up a label in the symbol table, which having not
  227. been allocated yet was causing a null pointer to be
  228. dereferenced. (Patrick Quaid)</LI></UL>
  229. The following enhancements have been added:
  230. <UL><LI>Function prototyping has been added. All function
  231. prototypes are in a new include file, protos.h, which
  232. is included by A68kdef.h. Prototyping can be disabled
  233. (for compilers which do not support it) by defining
  234. the symbol __NOPROTO; in this case old-style function
  235. declarations are generated instead.</LI></UL><BR>
  236. <B>Version 2.70 (Charlie Gibbs, February 25, 1991)</B>
  237. <BR><BR>
  238. The following bugs in version 2.62 have been corrected:
  239. <UL><LI>The definition of tempstr in WriteSymTab (24 bytes)
  240. was being overrun in some cases, causing A68k to hang.
  241. Its length has been increased to MAXLINE.
  242. (Paul Gittings, John Antonishek)</LI>
  243. <LI>If A7 was in a list of registers in the source operand
  244. of a MOVEM instruction, all registers would be moved
  245. (i.e. the mask was set to 0xFFFF). (Risto Kaivola)</LI>
  246. <LI>Octal or binary values that set bit 31 were being
  247. flagged as overflow errors. (Harvey Taylor)</LI>
  248. <LI>ORGs were unnecessarily restricted when the -s flag was
  249. specified. Everything should be absolute when S-records
  250. are generated, and any absolute ORG should be allowed.</LI></UL>
  251. The following enhancements have been added:
  252. <UL><LI>A new INCBIN directive has been added. It takes a
  253. single operand, a file name whose contents are
  254. included as is at the current position in the
  255. object code file. (Julian Gold, Colin Fox)</LI>
  256. <LI>The opcode TTL is now accepted as a synonym for TITLE.</LI>
  257. <LI>The file mode in the creat() call in xopen() has been
  258. changed from 1 to 0644; this provides a reasonable file
  259. mode when compiled on a Unix system. (Paul Gittings)</LI>
  260. <LI>A new command-line keyword (-g) has been added. It
  261. causes all undefined symbols to be treated as XREF.
  262. (Paul Gittings, Steve Hawtin (who provided the code))</LI>
  263. <LI>All initialized fields in opcodes.c have been made global
  264. for compatibilty with more compilers. (Steve Hawtin)</LI>
  265. <LI>The register list in a MOVEM instruction can now be an
  266. immediate operand which specifies the actual mask bits.
  267. (Paul Gittings, who provided the code)</LI>
  268. <LI>The default value for the -q option has been changed
  269. from 10 to 100.</LI></UL><BR>
  270. <B>Version 2.62 (Charlie Gibbs, March 19, 1990)</B>
  271. <BR><BR>
  272. The following enhancements have been added:
  273. <UL><LI>A new command-line keyword (-m) has been added.
  274. It must be immediately followed by a number which
  275. specifies the offset from the beginning of a small
  276. data section to the base register specified in the
  277. NEAR directive (defaulting to A4). If this parameter
  278. is omitted, the offset defaults to 32768 bytes. This
  279. parameter is meaningful only if the NEAR directive
  280. is used. (Colin Fox)</LI></UL><BR>
  281. <B>Version 2.61 (Charlie Gibbs, January 11, 1990)</B>
  282. <BR><BR>
  283. The following bugs in version 2.6 have been corrected:
  284. <UL><LI>ORG and RORG at the beginning of the program were
  285. being processed incorrectly. (Jukka Jarvinen)</LI>
  286. <LI>A branch instruction to its own label, e.g.
  287. <PRE>lab bra lab</PRE>
  288. would cause phase errors; the instruction was
  289. being shortened on pass 2 but not on pass 1.
  290. (Kevin Hoare)</LI></UL>
  291. The following enhancements have been added:
  292. <UL><LI>Labels may begin with '@' if the next character
  293. is not numeric (to avoid confusion with octal
  294. constants). (Colin Fox)</LI>
  295. <LI>Write errors now cause A68k to terminate gracefully
  296. with an appropriate error message.</LI></UL><BR>
  297. <B>Version 2.6 (Charlie Gibbs, November 2, 1989)</B>
  298. <BR><BR>
  299. The following bugs in version 2.5 have been corrected:
  300. <UL><LI>If a space is left between a file keyword and the file name
  301. (e.g. A68k -l foo.lst foo.asm) the source file was scratched.
  302. (E. Lenz)</LI>
  303. <LI>All code using post-increment addressing in references to
  304. toupper() has been reworked to avoid post-increment. Such
  305. code does not work correctly if toupper() is a macro.
  306. (John K. Antonishek)</LI>
  307. <LI>The spelling of the include files A68kdef.h and A68kglb.h
  308. has been made correct as to case. This simplifies porting
  309. to case-sensitive file systems. (John K. Antonishek)</LI>
  310. <LI>If comments immediately follow the operands of an XDEF,
  311. XREF, or PUBLIC statement with no intervening white space
  312. (as in any of the following statements), A68k would hang:
  313. <PRE> XDEF foo;comments
  314. XREF bar;comments
  315. PUBLIC blah;comments</PRE>
  316. (Bruce Dawson)</LI>
  317. <LI>Numeric values (any radix) which do not fit into 32 bits
  318. were not being flagged. (E. Lenz)</LI>
  319. <LI>DC statements with no operands were not being flagged.
  320. (E. Lenz)</LI>
  321. <LI>The -f option was suggesting short branches where the
  322. displacement would be zero, which is illegal. (E. Lenz)</LI>
  323. <LI>Branches outside the current section had the offset
  324. set to zero. (Matt Dillon, who provided a fix)</LI>
  325. <LI>ADDI, ANDI, CMPI, EORI, ORI, and SUBI instructions whose
  326. source operand was not immediate were not being flagged.
  327. (E. Lenz)</LI>
  328. <LI>Unary NOT of a byte or word immediate operand whose value
  329. was negative was being flagged as a size error.
  330. (John Aycock)</LI>
  331. <LI>All forward branches were rejected when the NEAR
  332. directive was active. (Colin Fox)</LI></UL>
  333. The following enhancements have been added:
  334. <UL><LI>Single-byte immediate operands (e.g. MOVE.B #-1,(a0))
  335. are now padded with a high-order byte of zero, rather
  336. than being sign-extended. (E. Lenz)</LI>
  337. <LI>The message &quot;Error in operand format.&quot; has been changed
  338. to &quot;Addressing mode not allowed here.&quot; in places where
  339. the latter message is more appropriate.</LI>
  340. <LI>If the -q option species a value of zero (or no value
  341. is given, defaulting to zero), all console output will
  342. be suppressed except for error messages, if any.
  343. (Matt Dillon)</LI>
  344. <LI>The 128-byte restriction on constant length no longer
  345. applies to the entire code generated by a single DCB
  346. statement; statements such as
  347. <PRE> DCB.L 64,0</PRE>
  348. can now be handled. (Colin Fox)</LI>
  349. <LI>Forward branches are now optimized. The occasional
  350. instruction may be missed due to ripple effects, but
  351. this shouldn't happen frequently. The -f switch
  352. will flag any such instructions.</LI>
  353. <LI>The -d switch can now be followed by an optional
  354. prefix string (with or without a leading !) which
  355. specifies which symbols should or should not be
  356. included in the symbol table dump. (Lionel Hummel)</LI></UL><BR>
  357. <B>Version 2.5 (Charlie Gibbs, June 18, 1989)</B>
  358. <BR><BR>
  359. The following bugs in version 2.42 have been corrected:
  360. <UL><LI>Upon normal termination, A68k occasionally crashed in
  361. quit_cleanup by trying to free the relocation table twice.
  362. (Jeff Lydiatt and D. McClelland, who worked out a fix)</LI>
  363. <LI>MEMF_CHIP and MEMF_FAST bits were being set in the
  364. hunk length, rather than in the hunk type. (Richard Man)</LI>
  365. <LI>BCHG.L, BCLR.L, BSET.L, and BTST.L were causing
  366. phase errors. The test to ignore the .L specification
  367. (added in version 1.21) was being skipped in pass 1
  368. by an optimization added in version 2.4. (David Hankins)</LI>
  369. <LI>PC-relative offset to a label was calculated as two bytes
  370. too great for MOVEM instructions. (Tony Parkhurst)</LI></UL>
  371. The following enhancements have been added:
  372. <UL><LI>If the length code on an opcode is not .B, .W, .L, .S,
  373. or omitted, it will be flagged as an error.</LI>
  374. <LI>JMP.S and JSR.S are flagged as errors. (Jim Butterfield)</LI>
  375. <LI>Operands of the form (xxxx).W and (xxxx).L are now
  376. supported. This enables absolute short or absolute
  377. long addressing to be explicitly specified.</LI>
  378. <LI>All optimization can be disabled by the new -n switch.
  379. (David Hankins)</LI>
  380. <LI>The NEAR directive can now take a single operand, which
  381. can be any address register (or equated symbol) except
  382. A7. If omitted, the register defaults to A4.</LI>
  383. <LI>Instructions of the form BTST Dn,#nn are no longer
  384. flagged. This obscure variant is nonetheless legal.</LI></UL><BR>
  385. <B>Version 2.42 (Charlie Gibbs, January 10, 1989)</B>
  386. <BR><BR>
  387. The following bugs in version 2.41 have been corrected:
  388. <UL><LI>Small code/data conversion was sometimes taking place
  389. when no NEAR directive was active. (Jeff Lydiatt)</LI></UL><BR>
  390. <B>Version 2.41 (Charlie Gibbs, January 6, 1989)</B>
  391. <BR><BR>
  392. The following bugs in version 2.4 have been corrected:
  393. <UL><LI>The second operand of LINK instructions was
  394. being erroneously flagged.</LI>
  395. <LI>If a macro was used before it was defined, it
  396. was being expanded during pass 2 but not during
  397. pass 1, causing severe phase errors. Attempts
  398. to use a macro before it is defined will now
  399. be flagged as invalid opcodes. (Colin Fox)</LI></UL><BR>
  400. <B>Version 2.4 (Charlie Gibbs, January 4, 1989)</B>
  401. <BR><BR>
  402. The following bugs in version 2.31 have been corrected:
  403. <UL><LI>If comments immediately followed the operands of
  404. a DC statement with no intervening white space,
  405. A68k would hang. (Ulf Nordquist)</LI>
  406. <LI>In the following command:
  407. <PRE>a68k -w 15000 myprog.asm</PRE>
  408. the space between the -w and 15000 would cause A68k
  409. to look for a source file called &quot;15000&quot;, and to think
  410. that the object file is to be called &quot;myprog.asm&quot;.
  411. When it can't find &quot;15000&quot; it would display an error
  412. message and scratch &quot;myprog.asm&quot;. (Jeff Lydiatt)</LI>
  413. <LI>If an INCLUDE file that is skipped on pass 2 contains
  414. a macro call, subsequent uses of \@ (macro sequence
  415. number are subsequently flagged. The macro counter
  416. must be bumped along with the line number when
  417. skipping an INCLUDE. (Colin Fox, Harvey Taylor)</LI></UL>
  418. The following enhancements have been added:
  419. <UL><LI>ORG and RORG are now fully implemented.</LI>
  420. <LI>The SET symbols A68k, a68K, and a68k are defined in the
  421. same way as A68K, making it effectively case-insensitive.
  422. (Colin Fox)</LI>
  423. <LI>MOVEM and REG now accept equated register names (EQUR)
  424. in register lists. (Bruce Dawson)</LI>
  425. <LI>INCLUDE files will now be skipped on pass 2 even when
  426. a listing file is requested, if the listing has been
  427. turned off by a NOLIST directive before the INCLUDE,
  428. and is not turned on until after the end of the
  429. INCLUDE file has been reached. (Colin Fox)</LI>
  430. <LI>A new switch (-f) causes forward branches (Bcc, BRA, BSR)
  431. that could be coded as short branches (Bcc.S etc.) to be
  432. flagged. This flag is not considered to be an error.</LI>
  433. <LI>A limited small code / small data model has been provided.
  434. It is activated by a NEAR directive in the source code, and
  435. is de-activated by a FAR directive. External variables
  436. must be declared at the beginning of the program, which
  437. must consist of only two sections (CODE and DATA or BSS).
  438. All forward data references are assumed to be PC-relative
  439. if in the CODE section, A4-relative if in the DATA/BSS
  440. section, and absolute word if absolute values. Any
  441. forward references which cannot be resolved to one of
  442. these three in pass 2 will be flagged as errors, as will
  443. any attempt to define more than two sections. A4 is
  444. assumed to point to the start of the DATA/BSS section
  445. plus 32768 bytes, and must be loaded by a MOVE.L
  446. instruction using immediate mode unless this instruction
  447. is not enclosed within NEAR and FAR directives.</LI>
  448. <LI>Miscellaneous optimizations, for speed, including:
  449. Most of the object code generator in pass 1 is bypassed.
  450. If GetValue gets a single term it takes a short cut.
  451. IsOperator now uses a table look-up.
  452. Instructions now only searches that portion of the
  453. opcode table whose opcodes start with the same letter
  454. as the OpCode being searched for.</LI></UL><BR>
  455. <B>Version 2.31 (Charlie Gibbs, November 30, 1988)</B>
  456. <BR><BR>
  457. The following bugs in version 2.3 have been corrected:
  458. <UL><LI>Even though a macro definition was being skipped
  459. by IFxx/ENDC, its ENDM directive was still being
  460. detected, causing spurious diagnostics. (Harvey Taylor)</LI>
  461. <LI>NOP was not being recognized. When moving all
  462. directives into the opcode table, NOL and NOLIST
  463. were placed after NOP, rather than before. (Colin Fox)</LI>
  464. <LI>Symbols defined in the current module and declared
  465. as PUBLIC were not being written to the object code
  466. file when -d was specified. (Colin Fox)</LI>
  467. <LI>Conversion of 0(An) to (An) (implemented in version
  468. 1.2) was causing errors in the MOVEP instruction,
  469. which requires a displacement even if it is zero.
  470. This conversion is now disabled for MOVEP instructions.</LI>
  471. <LI>User macros containing invalid opcodes caused A68k
  472. to get lost when returning to the outer source file.
  473. (Colin Fox)</LI>
  474. <LI>Large values of -w (over 6000 or so) would cause
  475. a visit from the Guru. The work field in HashIt
  476. was overflowing and going negative. Changing it
  477. to unsigned corrected the problem. (Colin Fox)</LI>
  478. <LI>Although user macros are no longer displayed when
  479. -q is a negative number, the calling file's name
  480. was still being displayed at the end of the macro.</LI></UL><BR>
  481. <B>Version 2.3 (Charlie Gibbs, November 21, 1988)</B>
  482. <BR><BR>
  483. The following enhancements have been added:
  484. <UL><LI>All file I/O has been rewritten to use level 1 I/O
  485. (open, creat, close, read, write, and lseek) instead
  486. of level 2 I/O. A68k now does its own buffering and
  487. unbuffering to reduce system overhead and increase speed.
  488. (Bruce Dawson)</LI>
  489. <LI>All assembler directives have been incorporated into
  490. the opcode table. Since the opcode search now looks
  491. up directives as well, speed is increased.</LI>
  492. <LI>Miscellaneous code optimization for additional speed.</LI></UL><BR>
  493. <B>Version 2.2 (Charlie Gibbs, November 4, 1988)</B>
  494. <BR><BR>
  495. The following bugs in version 2.1 have been corrected:
  496. <UL><LI>Macro definitions within an INCLUDE file were
  497. disabling the test for skipping the file on pass 2.</LI>
  498. <LI>Errors encountered in an INCLUDE file on pass 1
  499. were not disabling the skip of the file on pass 2 -
  500. the pertinent error messages could not appear.</LI>
  501. <LI>XDEF information and optional symbol table dumps were
  502. not being written to the object code file for any
  503. hunks that did not contain relocatable code or data.
  504. (Colin Fox)</LI></UL>
  505. The following enhancements have been added:
  506. <UL><LI>If the -q option is specified as a negative value,
  507. user macros are no longer included in line number
  508. displays, reducing clutter.</LI>
  509. <LI>Some source code has been re-arranged to reduce size.</LI></UL><BR>
  510. <B>Version 2.1 (Charlie Gibbs, November 1, 1988)</B>
  511. <BR><BR>
  512. The following bugs in version 2.00 have been corrected:
  513. <UL><LI>Macro definitions that span two chunks of memory
  514. were causing garbage and probably a crash when
  515. the macro was being expanded. Pointers were not
  516. being handled properly when linking the two chunks.</LI>
  517. <LI>Statements such as EQU and SET were not being flagged
  518. as illegal forward references if referencing a label
  519. defined on the same line, e.g.
  520. <PRE>LABEL SET LABEL+1</PRE></LI>
  521. <LI>The position within macros and INCLUDE files was
  522. sometimes out by one line when reported in error
  523. messages (and the new feature of the -q switch).</LI></UL>
  524. The following enhancements have been added:
  525. <UL><LI>If the -q option is specified as a negative value,
  526. line numbers will be displayed as positions within
  527. the current module (whose name is also displayed),
  528. rather than a total statement count. (Bruce Dawson)</LI>
  529. <LI>INCLUDE files can be skipped on pass 2 even if they
  530. contain SET statements - the values of all symbols
  531. SET in the INCLUDE file are stored (as at the end
  532. of the file) in a separate table and are patched
  533. when the INCLUDE file is skipped. (Bruce Dawson)</LI></UL><BR>
  534. <B>Version 2.00 (Charlie Gibbs, October 26, 1988)</B>
  535. <BR><BR>
  536. The following bugs in version 1.24 have been corrected:
  537. <UL><LI>The last digit of the statement number display
  538. (lengthened in version 1.24) was not being erased
  539. before displaying error messages.</LI>
  540. <LI>A68k would go into a loop if a user macro was
  541. missing an ENDC directive. This error is now
  542. flagged (see below).</LI></UL>
  543. The following enhancements have been added:
  544. <UL><LI>The highest statement number displayed at the end of
  545. each pass is now left on the screen. This means that,
  546. at the end of pass 1, you can always see how many lines
  547. A68k will have to process in pass 2, giving an idea of
  548. how how much longer you have to wait. (Colin Fox)</LI>
  549. <LI>The symbol table is now built using a hashing algorithm.
  550. This eliminates the slowdown that occurs in pass 1 as
  551. the symbol table grows, due to the old insertion process.
  552. (Bruce Dawson)</LI>
  553. <LI>If A68k terminates abnormally for any reason (such as
  554. insufficient memory) the object file is scratched
  555. (unless the -k option is set). (Bruce Dawson)</LI>
  556. <LI>Any INCLUDE files which cannot be found are flagged
  557. as errors in pass 1, and the assembly is aborted
  558. at the end of pass 1. (Bruce Dawson)</LI>
  559. <LI>Missing ENDC directives are flagged in macro expansions.
  560. Also, missing or unpaired ENDC directives in user macros
  561. are flagged.</LI>
  562. <LI>If an INCLUDE file doesn't generate any code and no
  563. listing file is required, it won't be read again in
  564. pass 2. The statement numbers will be bumped to keep
  565. in proper alignment. This can really speed up
  566. assemblies that INCLUDE lots of equates. (Colin Fox)</LI></UL><BR>
  567. <B>Version 1.24 (Charlie Gibbs, October 11, 1988)</B>
  568. <BR><BR>
  569. The following bugs in version 1.23 have been corrected:
  570. <UL><LI>MOVEA to a data register was not being flagged, even
  571. though all other invalid addressing modes were.</LI>
  572. <LI>Attempts to ORG out of the current hunk (including
  573. to an absolute address) were not being flagged. (E. Lenz)</LI>
  574. <LI>If the size of the bottom of the primary heap (symbols
  575. and macro text) exceeded 32K, any further macro
  576. definitions would expand as endless garbage. (Colin Fox)</LI>
  577. <LI>If the size of the bottom of the primary heap (symbols
  578. and macro text) exceeded 64K, any further external
  579. symbols (XDEF) would be flagged as relocatability
  580. errors upon each reference. (Colin Fox)</LI></UL>
  581. The following enhancements have been added:
  582. <UL><LI>Where statement numbers are displayed as fixed-length
  583. fields, their maximum length has been increased
  584. from 4 digits to 5. (Colin Fox)</LI>
  585. <LI>The PUBLIC directive has been implemented.
  586. As with the Aztec assembler, any labels defined as
  587. PUBLIC will be treated as XDEF if defined within
  588. the current module, and XREF otherwise. (Jeff Lydiatt)</LI></UL><BR>
  589. <B>Version 1.23 (Charlie Gibbs, September 20, 1988)</B>
  590. <BR><BR>
  591. The following bugs in version 1.22 have been corrected:
  592. <UL><LI>The test for a third operand was producing erroneous
  593. error messages on instructions whose second operand
  594. was in immediate mode. The '#' was not being taken
  595. into account, since it is not copied to DestOp.</LI></UL><BR>
  596. <B>Version 1.22 (Charlie Gibbs, August 31, 1988)</B>
  597. <BR><BR>
  598. The following bugs in version 1.21 have been corrected:
  599. <UL><LI>Expressions of the form R-A, where R is a relocatable
  600. term or expression and A is an absolute term or
  601. expression, were being flagged as relocation errors.
  602. This was due to a bug in the routine which should
  603. (but did not) flag expressions of the form A-R.
  604. (David Ashley)</LI>
  605. <LI>Instructions with three operands were not being
  606. flagged as errors. This can be caused by an extra
  607. comma being typed in the instruction, as in:
  608. <PRE> BTST #0,state+3,(a5)</PRE>
  609. The second comma should not be present. (David Ashley)</LI></UL>
  610. The following enhancements have been added:
  611. <UL><LI>Excess spacing has been removed from the listing file.
  612. These changes are similar to those already made to the
  613. console output (probably at about version 1.05).</LI>
  614. <LI>If the first statement in the source file is TTL or
  615. PAGE, an empty page is no longer produced at the
  616. start of the listing.</LI></UL><BR>
  617. <B>Version 1.21 (Charlie Gibbs, July 29, 1988)</B>
  618. <BR><BR>
  619. The following bugs in version 1.2 have been corrected:
  620. <UL><LI>The instruction
  621. <PRE> BTST.L #8,D0</PRE>
  622. had a long-word value generated for the bit number.
  623. This bug also applies to BSET, BCLR, and BCHG.
  624. The .L specification is now ignored. (Ulf Nordquist)</LI></UL><BR>
  625. <B>Version 1.2 (Charlie Gibbs, July 19, 1988)</B>
  626. <BR><BR>
  627. The following bugs in version 1.12 have been corrected:
  628. <UL><LI>A reference to the label of the current instruction
  629. was being converted to PC-relative on pass 2 but not
  630. on pass 1. This was causing phase errors. The label
  631. hasn't been added to the symbol table at the time the
  632. instruction is processed. Conversion to PC-relative
  633. addressing will now not be attempted in this case,
  634. although references to * can and will be converted.</LI>
  635. <LI>All string-type DC statements, regardless of length,
  636. were being treated as DC.B. For example, DC.L 'A'
  637. would generate only one byte of object code.
  638. (Gerald Hull)</LI>
  639. <LI>DC.W and DC.B statements were not being checked to
  640. ensure that their values would fit into a word or
  641. a byte respectively.</LI>
  642. <LI>If a comment line had white space preceding the
  643. asterisk, A68k would hang. Actually, it was
  644. interpreting the asterisk as an opcode and trying
  645. to open a macro file called &quot;*&quot;. Since under
  646. AmigaDOS such a file is the console, A68k was
  647. actually waiting for console input.</LI>
  648. <LI>If an instruction with no operands (such as RTS
  649. or NOP) followed MOVE.L #rel,D0 where &quot;rel&quot; was
  650. a relocatable symbol, the RTS (etc.) would have
  651. its nonexistent operands flagged as invalid.</LI>
  652. <LI>SECTION names enclosed in quotes were not being
  653. handled correctly.</LI>
  654. <LI>Source modules that did not generate any code, data,
  655. or BSS areas, but only defined symbols, such as
  656. <PRE>label equ 4
  657. xdef label
  658. end</PRE>
  659. were generating incomplete object modules.</LI></UL>
  660. The following enhancements have been added:
  661. <UL><LI>Jeff's experimental hunk code (prefixing hunk names
  662. with a sequence number before adding to the symbol
  663. table) has been permanently incorporated. It seems
  664. to work better with BLink on programs that have
  665. hunks continued farther on in the source code.
  666. (Jeff Lydiatt)</LI>
  667. <LI>The macro parameter \0, which is replaced by the
  668. size specification in the macro call (B, W, or L,
  669. defaulting to W) is now supported. (Gerald Hull)</LI>
  670. <LI>Operands of the form 0(An) will be treated as (An).
  671. (Bruce Dawson)</LI></UL><BR>
  672. <B>Version 1.12 (Charlie Gibbs, May 25, 1988)</B>
  673. <BR><BR>
  674. The following bugs in version 1.11 have been corrected:
  675. <UL><LI>If an instruction with no operands (e.g. RTS)
  676. followed a MOVE.L #label,D0 the RTS would be
  677. flagged with a relocatability error. Src.Mode
  678. and Dest.Mode were not being cleared. (Colin Fox)</LI></UL><BR>
  679. <B>Version 1.11 (Charlie Gibbs, April 6, 1988)</B>
  680. <BR><BR>
  681. The following bugs in version 1.10 have been corrected:
  682. <UL><LI>A68k would go into a loop while processing the
  683. arguments of a macro call, if these arguments are
  684. followed by comments separated from the arguments
  685. by one or more tab characters, and the -t switch
  686. is specified on the command line. All tests for
  687. blanks have been replaced by calls to isspace().</LI>
  688. <LI>The operand alignment checks added in version 1.06
  689. were erroneously testing the following instructions:
  690. <UL><LI>BCHG</LI>
  691. <LI>BCLR</LI>
  692. <LI>BSET</LI>
  693. <LI>BTST</LI>
  694. <LI>NBCD</LI>
  695. <LI>Scc</LI>
  696. <LI>TAS</LI></UL>
  697. These instructions are now exempt from alignment checking.</LI></UL>
  698. The following enhancements have been added:
  699. <UL><LI>A listing file name can now be specified with the
  700. -x switch; it is no longer necessary to specify
  701. both the -l and -x switches to produce a cross-
  702. reference listing with a name other than the default.</LI>
  703. <LI>DS statements with more than one operand are
  704. flagged and ignored (in case they should be DC).</LI>
  705. <LI>A character string used as a numeric value is
  706. flagged and set to zero if it is more than four
  707. characters long.</LI></UL><BR>
  708. <B>Version 1.10 (Charlie Gibbs, March 20, 1988)</B>
  709. <BR><BR>
  710. The following bugs in version 1.07 have been corrected:
  711. <UL><LI>BSS sections were not being written to the object
  712. code file except for a BSS section at the end of
  713. a program. This is due to a bug in the code added
  714. in version 1.05 to overwrite null sections.</LI>
  715. <LI>If a source module contained a mixture of lengths
  716. (8, 16, or 32 bits) in external references (XREF)
  717. to the same label, all references were being treated
  718. as if they has the length of the first reference.</LI></UL>
  719. The following enhancements have been added:
  720. <UL><LI>DS operands that are either a forward references
  721. or relocatable are now flagged.</LI>
  722. <LI>Short branches (Bcc.S, including BRA and BSR) to
  723. the next instruction (i.e. a displacement of zero)
  724. are illegal - the processor takes the displacement
  725. from the next word. Attempts to generate a short
  726. displacement of zero are now flagged.</LI></UL><BR>
  727. <B>Version 1.07 (Charlie Gibbs, March 11, 1988)</B>
  728. <BR><BR>
  729. The following bugs in version 1.06 have been corrected:
  730. <UL><LI>Instructions that take no operands (such as RTS)
  731. were being flagged if they had comments that were
  732. not preceded by a semicolon.</LI></UL>
  733. The following enhancements have been added:
  734. <UL><LI>The following synonyms have been added:
  735. <PRE>CSEG for CODE (Aztec compatibility)
  736. DSEG for DATA &quot; &quot;
  737. ENDIF for ENDC (Assempro compatibility)
  738. = for EQU &quot; &quot;
  739. | for ! &quot; &quot;</PRE></LI>
  740. <LI>Strings and character values may be delimited by
  741. either apostrophes (') or quotation marks (&quot;).
  742. The character not used as a delimiter can be used
  743. within the string without doubling it. For example,
  744. <PRE> DC.B &quot;This is Charlie's assembler&quot;</PRE>
  745. produces the same code as
  746. <PRE> DC.B 'This is Charlie''s assembler';</PRE></LI>
  747. <LI>The object code file will be scratched if any errors
  748. were found, unless the -k (keep) flag is set.
  749. (Bruce Dawson)</LI>
  750. <LI>The symbol .A68K is automatically defined at the
  751. beginning of each assembly as a SET symbol with an
  752. absolute value of 1. This enables programs to check
  753. whether they're being assembled by this assembler.
  754. (Jeff Lydiatt)</LI>
  755. <LI>The symbol table insertion routine has been
  756. greatly speeded up.</LI></UL><BR>
  757. <B>Version 1.06 (Charlie Gibbs, March 6, 1988)</B>
  758. <BR><BR>
  759. The following bugs in version 1.05 have been corrected:
  760. <UL><LI>Lines skipped by IFxx/ENDC were not being counted
  761. in the line number given in error messages.</LI>
  762. <LI>DATA and BSS sections may be unnamed, or have names
  763. the same as CODE sections. Honest, I thought section
  764. names had to be unique even across types.</LI>
  765. <LI>CHIP and FAST options on the CODE, DATA, and BSS
  766. synonyms for the SECTION directive were not being
  767. handled correctly.</LI>
  768. <LI>XDEF records and symbol table records (if desired)
  769. were not being produced for symbols defined ahead
  770. of the first object-code producing instruction.</LI></UL>
  771. The following enhancements have been added:
  772. <UL><LI>The CNOP instruction can now force alignment
  773. relative to any boundary up to 128 bytes.
  774. The second operand must still be a power of 2.</LI>
  775. <LI>The -q switch has been added to change the frequency
  776. with which progress reports (current line number) are
  777. displayed on the console. The default remains at
  778. every 10 lines (-q10). If you specify -q (no interval)
  779. or -q0 the line number displays will be suppressed.
  780. This will make assemblies run slightly faster due to
  781. reduced console I/O. (Bill Henning)</LI>
  782. <LI>The -t switch has been added to keep any tabs in the
  783. source file when producing the listing file, as well as
  784. generating tabs elsewhere whenever possible. This
  785. speeds up assemblies and gives smaller listing files,
  786. but such listing files cannot be displayed on devices
  787. that do not assume a tab stop in every 8th position.
  788. (Bruce Dawson)</LI>
  789. <LI>Any single-operand instruction with two operands,
  790. and any no-operand instruction with any operands,
  791. will be flagged.</LI>
  792. <LI>Relocatable 8- or 16-bit immediate operands
  793. will be flagged. They blow up BLink.</LI>
  794. <LI>Named local labels are now supported. Their names
  795. are formed in the same way as normal labels, but are
  796. then preceded by a backslash. Their scope is the
  797. same as normal local labels (nnn$). (Colin Fox)</LI>
  798. <LI>An alignment error will be flagged in the following cases:
  799. <UL><LI>Odd displacement on a LINK instruction</LI>
  800. <LI>Bcc or DBcc to an odd address</LI>
  801. <LI>In any word or long-word instruction, any operand
  802. using the following addressing modes:
  803. <UL><LI>Address register indirect with displacement</LI>
  804. <LI>Address register indirect with index and displacement</LI>
  805. <LI>Absolute short</LI>
  806. <LI>Absolute long</LI>
  807. <LI>Program counter indirect with displacement</LI>
  808. <LI>Program counter indirect with index and displacement</LI></UL></LI>
  809. <LI>LEA and PEA instructions are exempt from these tests.</LI></UL></LI>
  810. <LI>If a section is found to contain no data, A68k will
  811. back up to its beginning and overwrite it with the
  812. next section. The result is that null sections
  813. will no longer appear in the object file.</LI></UL><BR>
  814. <B>Version 1.05 (Charlie Gibbs, October 30, 1987)</B>
  815. <BR><BR>
  816. The following bugs in version 1.04 have been corrected:
  817. <UL><LI>If a section was continued later in the program, e.g.
  818. <PRE> SECTION prog,CODE
  819. &lt;code&gt;
  820. SECTION variables,BSS
  821. &lt;DS statements&gt;
  822. SECTION prog,CODE
  823. &lt;more code&gt;</PRE>
  824. bad relocation information was being generated for
  825. the continuation of the SECTION. This bug was left
  826. over from version 1.03.</LI></UL>
  827. The following enhancements have been added:
  828. <UL><LI>All console output except for error messages is now
  829. sent to stderr - this enables stdout to be redirected,
  830. producing an error file.</LI>
  831. <LI>Console (stderr) output has been modified to require
  832. fewer lines on the screen.</LI>
  833. <LI>If an error occurs while expanding a macro or INCLUDE
  834. file, the position of the call in each outer file is
  835. given along with the position in the current (innermost)
  836. file. Tracing continues until the outermost file (i.e.
  837. the original source file) is reached.</LI></UL><BR>
  838. <B>Version 1.04 (Charlie Gibbs, October 21, 1987)</B>
  839. <BR><BR>
  840. The following bugs in version 1.03 have been corrected:
  841. <UL><LI>MOVE was being converted to MOVEQ regardless of
  842. operand size - this conversion is legal only
  843. for longword MOVEs.</LI>
  844. <LI>Modifications to version 1.03 caused bad relocatable
  845. entries to be generated.</LI></UL><BR>
  846. <B>Version 1.03 (Charlie Gibbs, October 14, 1987)</B>
  847. <BR><BR>
  848. The following bugs in version 1.02 have been corrected:
  849. <UL><LI>The following situation was causing phase errors:
  850. <PRE> xdef label
  851. bra label
  852. .
  853. &lt;at least 128 bytes of object code&gt;
  854. .
  855. label:</PRE>
  856. (The XDEF was fooling A68k into thinking that &quot;label&quot;
  857. was defined within 128 bytes of the BRA instruction
  858. on pass 1, although on pass 2 it knew better.</LI>
  859. <LI>If the first operand of an two-operand executable
  860. instruction contained a character term containing a
  861. left or right parenthesis, it would generate error
  862. messages and be incorrectly evaluated.</LI>
  863. <LI>Labels that don't begin in column 1 (denoted by a
  864. trailing colon) caused a Guru Meditation.</LI>
  865. <LI>Certain ADD and SUB instructions using PC-relative
  866. addressing may cause phase errors. If the displacement
  867. is in the range 1 to 8 inclusive, the instruction was
  868. erroneously converted to ADDQ or SUBQ during pass 2.</LI></UL>
  869. The following enhancements have been added:
  870. <UL><LI>The -z option has been added to display the
  871. current source program line on stdout as it
  872. is read, optionally over a given range.
  873. This feature is provided for debugging purposes.</LI>
  874. <LI>Bcc, BSR, and DBcc to labels in other than the current
  875. section is now supported. A 16-bit relocation entry
  876. will be generated for each such reference.</LI>
  877. <LI>PC relative mode will be generated for backward
  878. references to labels within the current CODE section
  879. if legal for the current instruction. Forward
  880. references will not be converted, since there is
  881. no way of telling which section the label is in
  882. during pass 1.</LI>
  883. <LI>The cumulative sizes of all sections by type (i.e.
  884. CODE, DATA, and BSS) will be displayed at the end
  885. of the listing file and the console display.
  886. (Bruce Dawson)</LI>
  887. <LI>In the symbol table dump, section names will no
  888. longer be indicated just as SECTION, but rather
  889. as CODE, DATA, or BSS, depending on type.</LI></UL><BR>
  890. <B>Version 1.02 (Charlie Gibbs, September 9, 1987)</B>
  891. <BR><BR>
  892. The following bugs in version 1.01 have been corrected:
  893. <UL><LI>Duplicate labels were not being flagged.</LI>
  894. <LI>XDEF symbols were not being dumped to the
  895. object code file when the -d option was set.</LI></UL>
  896. The following enhancements have been added:
  897. <UL><LI>A header file is now supported. If the parameter
  898. -h&lt;filespec&gt; is included on the command line, the
  899. specified file will be included as if the source
  900. file's first line was &quot; include &lt;filespec&gt;&quot;.
  901. The file specification may include a path name,
  902. although the include path names given by the
  903. -i parameter (if any) will also be searched.</LI>
  904. <LI>An equate file can now be produced. If the parameter
  905. -e&lt;filespec&gt; is included on the command line, a file
  906. will be written containing EQU statements for any
  907. symbol whose value is absolute. If -e is specified
  908. without &lt;filespec&gt;, the name of the file will be
  909. formed in the same way as the list file, except with
  910. an extension of &quot;.equ&quot;. (Bruce Dawson)</LI></UL>
  911. The following changes have been made to existing logic:
  912. <UL><LI>No symbol table dump will be produced unless the
  913. -x (cross-reference) switch is set. Formerly a
  914. symbol table dump was always produced, with only
  915. the cross-reference portion optional.</LI></UL><BR>
  916. <B>Version 1.01 (Charlie Gibbs, August 20, 1987)</B>
  917. <BR><BR>
  918. The following bugs in version 1.00 have been corrected:
  919. <UL><LI>Long-word constants and storage areas were being
  920. aligned on a double-word boundary. The only place
  921. where double-word alignment is now forced is at a
  922. break between SECTIONs, since the length of an
  923. AmigaDOS hunk must be a multiple of 4 bytes.
  924. (CNOP 0,4 can still be used if double-word
  925. alignment is desired by the programmer.)</LI>
  926. <LI>If a label on an END statement or the first statement
  927. of a SECTION was named in an XDEF statement, it would
  928. not be written to the object code file. The latter
  929. case includes both the label of a SECTION directive
  930. and the label of the first executable instruction in
  931. the absence of any SECTION directives (defaulting to
  932. an unnamed CODE section). In the final case (default
  933. unnamed CODE section), references to XREF symbols
  934. in the first statement would also not be written
  935. to the object code file.</LI>
  936. <LI>If the last statement in the source file was not
  937. terminated with a newline character (premature EOF),
  938. it was being ignored altogether.</LI>
  939. <LI>A register list as the source operand of a MOVE
  940. instruction was not being flagged as an error.
  941. (MOVE to a register list was being flagged, however.)</LI>
  942. <LI>MOVE from USP was generating incorrect code. Also,
  943. MOVE from SR or CCR to an address register was
  944. generating incorrect code rather than being flagged.</LI></UL><BR>
  945. <B>Version 1.00 (Charlie Gibbs, June 18, 1987) - initial release</B>