12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277 |
- A 6 8 K M A I N T E N A N C E H I S T O R Y
- Version 2.71.F3z (Lionel Debroux, July 29, 2009)
- Bugfix: Fix moveq #$FFFFFFFE,dn on 64-bit platforms.
- Version 2.71.F3y (Patrick Pelissier, June 27, 2009)
- Improved: The maximum length of a line has been raised from 256 to 65536.
- Bugfix: Don't compile A68k statically, as it fails on multiple platforms in
- their out of the box configuration.
- Version 2.71.F3x (Manoel Trapier, December 23, 2008)
- Added: OS X Makefile that generate an Universal Binary version.
- Version 2.71.F3w (Kevin Kofler, July 27, 2006)
- Bugfix: Fixed compilation on *BSD and recent versions of OS X.
- Version 2.71.F3v (Kevin Kofler, July 31, 2005)
- Bugfix: Don't crash on EQUs doing arithmetic with other EQUs which do
- arithmetic with undefined symbols, print an error instead.
- Version 2.71.F3u (Kevin Kofler, February 2, 2005)
- Bugfix: Fixed compilation with GCC 3.4.
- Version 2.71.F3t (Kevin Kofler, January 31, 2005)
- Added: NO_UNOPTIMIZABLE_RELOCS compile-time define (disabled by default)
- to allow generating AmigaOS-compatible object files again.
- Improved: Branches explicitly coded as .w are now marked unoptimizable.
- Improved: Label references explicitly coded as .l are now marked
- unoptimizable.
- Bugfix: Emitting relocations for undefined symbols which are already in
- the symbol table due to the forward branch optimization code now
- works properly.
- Version 2.71.F3s (Kevin Kofler, September 21, 2004)
- Added: Support for the "unoptimizable reloc" flag, keeping the linker
- from corrupting some instructions when optimizing.
- Improved: All platforms now use the same maximum line length and chunk
- sizes.
- Improved: The line count limit has been raised from 32767 to INT_MAX.
- Version 2.71.F3r (Kevin Kofler, July 19, 2004)
- Bugfix: Fixed label(PC,Rn) when "label" was in a different section
- (again) (reported by Julien Moutinho).
- Version 2.71.F3q (Kevin Kofler, December 30, 2003)
- Bugfix: Fixed label1-label2(an) in all-relocs mode (reported by hwti).
- Added: (In all-relocs mode,) don't emit an address difference when the 2
- labels are actually at the same address (or simply the same).
- This allows to keep optimizing label1-label1(an) into (an).
- Bugfix: Fixed a bug when range-checking branches in all-relocs mode
- (reported by hwti).
- Bugfix: Fixed a bug when range-checking short branches in all-relocs
- mode or to a different section (reported by hwti).
- Version 2.71.F3p (Kevin Kofler, December 1, 2003)
- Bugfix: Fixed label(PC,Rn) addressing in all-relocs mode or when "label"
- was in a different section (reported by Matthieu Gallet).
- Version 2.71.F3o (Kevin Kofler, October 5, 2003)
- Bugfix: Range checking now works correctly in all-relocs mode. (No more
- spurious out-of-range errors.)
- Version 2.71.F3n (Kevin Kofler, September 28, 2003)
- Bugfix: Local labels now work in all-relocs mode.
- Version 2.71.F3m (Kevin Kofler, September 2, 2003)
- Bugfix: PC-relative or indexed references to other sections didn't work.
- Bugfix: x(PC,Dn) or x(PC,An) didn't work in all-relocs mode.
- Version 2.71.F3l (Kevin Kofler, July 15, 2003)
- Added: The -u switch now also allows unaligned code, which can be useful
- when the code will be copied somewhere else anyway.
- Added: Short branches across hunks or object files are now allowed.
- Added: -a (All relocs) switch, which tells A68k to emit all relocs, even
- PC-relative relocs within a section. It also emits address
- differences in a special TIGCC-specific format. This will allow
- more aggressive linker-side optimization.
- Version 2.71.F3k (Kevin Kofler, May 17, 2003)
- Bugfix: Increased the forward reference buffer in order to allow
- multiple labels at the same location, as used in PedroM.
- Added: -u (Unaligned) switch, which disables automatic alignment of
- DC.W, DC.L, DCB.W, DCB.L, DS.W and DS.L.
- Version 2.71.F3j (Kevin Kofler, November 15, 2002)
- Bugfix: A68k was miscompiled on Darwin / OS X because of an invalid
- implicit declaration for lseek. Now including <unistd.h> instead
- of declaring lseek implicitly on Darwin / OS X. (Bug reported by
- Christian Walther.)
- Version 2.71.F3i (Kevin Kofler, February 1, 2002)
- Bugfix: Local labels caused a "Pass 1 / Pass 2 phase
- error" when preceded by an include file which
- contained labels, but was skipped in pass 2
- (such as OS.h).
- Version 2.71.F3h (Kevin Kofler, January 23, 2002)
- Bugfix: The TITLE (or TTL) directive did not work at all.
- It now works as it is supposed to.
- Bugfix: No longer crashes when trying to generate a
- listing file with cross-references (using the -x
- switch).
- Version 2.71.F3g (Kevin Kofler, January 22, 2002)
- Bugfix: The RORG and PUBLIC directives are now recognized
- correctly even if the first letter is not
- capitalized. Thanks to Brandon Sterner for
- reporting the problem with the RORG directive.
- Version 2.71.F3f (Kevin Kofler, January 8, 2002)
- Now also accepts ";", and for the -v switch also "=", as
- separator in command line arguments (wherever "," is
- allowed), for compatibility with the "-WA," switch in
- TIGCC.EXE.
- Version 2.71.F3e (Kevin Kofler, August 3, 2001)
- Bugfix: The SUB->LEA optimization did not change the
- sign of the immediate value.
- Version 2.71.F3d (Kevin Kofler, July 28, 2001)
- Bugfix: The ADD(A)/SUB(A)->LEA and LEA->ADDQ/SUBQ
- optimizations caused "Pass 1 / Pass 2 phase
- errors" if an optimization was known to be
- possible only in pass 2 (i.e. if using forward
- references to labels in the instruction). A68k
- will not try to optimize those anymore. Maybe a
- future version will provide support for this kind
- of optimization, but it is very difficult to
- implement.
- Bugfix: A68k did not compile correctly on Visual C++
- because I had done a define in an incorrect way.
- Version 2.71.F3c (Kevin Kofler, July 20, 2001)
- Applied a few patches submitted by Paul Froissart:
- * A few more adaptations for compiling with Microsoft
- Visual C++. (Note that I still recommend using GCC for
- Mingw32.)
- * A new command line switch:
- -v Allows to set a variable in the command line (like
- -d with GCC). The variable will be a SET, not EQU
- variable. Syntax: "-v<name>[,<value>]" (without
- spaces, and without the quotes). Note that <value>
- can only be a NUMBER at the moment. (We might
- support symbols as values in a future version.)
- The default value of <value> is 1.
- * Improved the optimization:
- - made optional the optimization which changes MOVEM
- with a single register to MOVE
- - added an optional optimization which changes ADD(A)
- and SUB(A) to LEA when applicable
- - added an optional optimization which changes LEA to
- ADDQ or SUBQ when applicable
- - added a command line switch which allows you to
- selectively disable some optimizations:
- -r Allows to disable specific optimizations:
- -rm Disable the MOVEM -> MOVE optimization
- -ra Disable the ADD(A)/SUB(A) -> LEA optimization
- -rl Disable the LEA -> ADDQ/SUBQ optimization
- You might use more than one -r switch (as in
- "-rm -ra") or combine them into a single switch
- (as in "-rma").
- You can still use -n to disable ALL optimizations
- (even those not covered by -r).
- * Added 2 more synonyms:
- SLO = SCS
- SHS = SCC
- * The END directive is now optional. If you do not use
- it, the assembly will automatically end at the end of
- your source file.
- Also fixed a bug found by Paul Froissart involving the
- reporting of invalid flags with the SECTION directive.
- (Not that anyone would use those flags anyway.)
- Adapted and applied a very old patch by John Antonishek,
- which allows you to define a symbol as XDEF even if it
- has been declared as XREF before. This is especially
- useful when using a common include file for globals.
- Moreover, END is not allowed in macros or include files
- anymore since that was causing a few bugs because A68k
- simply did not expect anyone to use it there. The
- quickest remedy is to simply remove the END instruction,
- since it is now optional anyway.
- Version 2.71.F3b (Kevin Kofler, July 12, 2001)
- Bugfix: Now raises an error if an undefined local label is
- used.
- Bugfix: Branches coded with an explicit length (.W or .L)
- are not optimized (or flagged as optimizable)
- anymore.
- (In previous versions, .B or .S was not optimized,
- but .W or .L could be optimized to a short branch.
- Now, only branches without an explicit length will
- be optimized.)
- Bugfix: Quoted strings can now be passed as macro
- arguments without the need for '<' and '>', even
- if they contain spaces or separators (',' or ';').
- You can still use '<' and '>', for example in
- order to pass strings like <129,' version'> (which
- will appear as "ß version" on a TI-89/92/92+).
- Version 2.71.F3a (Kevin Kofler, July 9, 2001)
- Win32 port for the TIGCC project, compiled with GCC for
- Mingw32.
- Even though we recommend Mingw32, A68k should also compile
- with Microsoft Visual C++, thanks to Paul Froissart.
- (Please do NOT ask me questions about compiling with
- Visual C++. I have just put in Paul Froissart's ifdefs.)
- It also compiles with Cygwin, but since the result is
- larger than the Mingw32 version, I do not see any benefit
- in using it.
- Bugfix: My Win32 port of v.2.71.F3 did not support labels
- or variable names which contain accented
- characters.
- Bugfix: Now detects all errors in include files. All
- include files will be treated in pass 2 if an
- error is detected.
- Bugfix by Paul Froissart: fixed a random crash bug due to
- a missing initialization
- Bugfix by Julien Muchembled: allow odd displacements for
- words and longwords if the
- resulting address might be
- even
- The Win32 version is now less greedy with the memory, so
- its limitations are less annoying:
- * lines can now be 256 bytes long (Paul Froissart)
- * filenames (with path) can now be 259 bytes long (the
- Win32 maximum)
- * the default heap sizes have also been increased (Paul
- Froissart)
- Added the following synonyms:
- BLO = BCS
- BHS = BCC
- DBLO = DBCS
- DBHS = DBCC
- ROLX = ROXL
- RORX = ROXR
- Version 2.71.F3 (David Ellsworth, July 11, 2000)
- Fixed a bug introduced by my modifications that prevented
- branches from being optimized in Global XRef mode.
- Version 2.71.F2 (David Ellsworth, January 22, 1998)
- Made A68k properly differentiate between PC-relative and
- absolute references to external symbols. Allowed branches
- to reference external labels in Global XRef (-g parameter)
- mode.
- Version 2.71.F1 (David Ellsworth, January 7, 1998)
- Made changes so that combinations of EQU, XREF, and XDEF
- directives work better together. These changes were made in
- order for Fargo II library linking to be easier to do.
- The F1 stands for Fargo patchlevel 1.
- Version 2.71 (Charlie Gibbs, April 16, 1991)
- The following bugs in version 2.62 have been corrected:
- - Enforcer checks were being generated if command-line
- parameters that took a numeric value had no value or
- the value was invalid. CalcValue was attempting to
- look up a label in the symbol table, which having not
- been allocated yet was causing a null pointer to be
- dereferenced. (Patrick Quaid)
- The following enhancements have been added:
- - Function prototyping has been added. All function
- prototypes are in a new include file, protos.h, which
- is included by A68kdef.h. Prototyping can be disabled
- (for compilers which do not support it) by defining
- the symbol __NOPROTO; in this case old-style function
- declarations are generated instead.
- Version 2.70 (Charlie Gibbs, February 25, 1991)
- The following bugs in version 2.62 have been corrected:
- - The definition of tempstr in WriteSymTab (24 bytes)
- was being overrun in some cases, causing A68k to hang.
- Its length has been increased to MAXLINE.
- (Paul Gittings, John Antonishek)
- - If A7 was in a list of registers in the source operand
- of a MOVEM instruction, all registers would be moved
- (i.e. the mask was set to 0xFFFF). (Risto Kaivola)
- - Octal or binary values that set bit 31 were being
- flagged as overflow errors. (Harvey Taylor)
- - ORGs were unnecessarily restricted when the -s flag was
- specified. Everything should be absolute when S-records
- are generated, and any absolute ORG should be allowed.
- The following enhancements have been added:
- - A new INCBIN directive has been added. It takes a
- single operand, a file name whose contents are
- included as is at the current position in the
- object code file. (Julian Gold, Colin Fox)
- - The opcode TTL is now accepted as a synonym for TITLE.
- - The file mode in the creat() call in xopen() has been
- changed from 1 to 0644; this provides a reasonable file
- mode when compiled on a Unix system. (Paul Gittings)
- - A new command-line keyword (-g) has been added. It
- causes all undefined symbols to be treated as XREF.
- (Paul Gittings, Steve Hawtin (who provided the code))
- - All initialized fields in opcodes.c have been made global
- for compatibilty with more compilers. (Steve Hawtin)
- - The register list in a MOVEM instruction can now be an
- immediate operand which specifies the actual mask bits.
- (Paul Gittings, who provided the code)
- - The default value for the -q option has been changed
- from 10 to 100.
- Version 2.62 (Charlie Gibbs, March 19, 1990)
- The following enhancements have been added:
- - A new command-line keyword (-m) has been added.
- It must be immediately followed by a number which
- specifies the offset from the beginning of a small
- data section to the base register specified in the
- NEAR directive (defaulting to A4). If this parameter
- is omitted, the offset defaults to 32768 bytes. This
- parameter is meaningful only if the NEAR directive
- is used. (Colin Fox)
- Version 2.61 (Charlie Gibbs, January 11, 1990)
- The following bugs in version 2.6 have been corrected:
- - ORG and RORG at the beginning of the program were
- being processed incorrectly. (Jukka Jarvinen)
- - A branch instruction to its own label, e.g.
- lab bra lab
- would cause phase errors; the instruction was
- being shortened on pass 2 but not on pass 1.
- (Kevin Hoare)
- The following enhancements have been added:
- - Labels may begin with '@' if the next character
- is not numeric (to avoid confusion with octal
- constants). (Colin Fox)
- - Write errors now cause A68k to terminate gracefully
- with an appropriate error message.
- Version 2.6 (Charlie Gibbs, November 2, 1989)
- The following bugs in version 2.5 have been corrected:
- - If a space is left between a file keyword and the file name
- (e.g. A68k -l foo.lst foo.asm) the source file was scratched.
- (E. Lenz)
- - All code using post-increment addressing in references to
- toupper() has been reworked to avoid post-increment. Such
- code does not work correctly if toupper() is a macro.
- (John K. Antonishek)
- - The spelling of the include files A68kdef.h and A68kglb.h
- has been made correct as to case. This simplifies porting
- to case-sensitive file systems. (John K. Antonishek)
- - If comments immediately follow the operands of an XDEF,
- XREF, or PUBLIC statement with no intervening white space
- (as in any of the following statements), A68k would hang:
- XDEF foo;comments
- XREF bar;comments
- PUBLIC blah;comments
- (Bruce Dawson)
- - Numeric values (any radix) which do not fit into 32 bits
- were not being flagged. (E. Lenz)
- - DC statements with no operands were not being flagged.
- (E. Lenz)
- - The -f option was suggesting short branches where the
- displacement would be zero, which is illegal. (E. Lenz)
- - Branches outside the current section had the offset
- set to zero. (Matt Dillon, who provided a fix)
- - ADDI, ANDI, CMPI, EORI, ORI, and SUBI instructions whose
- source operand was not immediate were not being flagged.
- (E. Lenz)
- - Unary NOT of a byte or word immediate operand whose value
- was negative was being flagged as a size error.
- (John Aycock)
- - All forward branches were rejected when the NEAR
- directive was active. (Colin Fox)
- The following enhancements have been added:
- - Single-byte immediate operands (e.g. MOVE.B #-1,(a0))
- are now padded with a high-order byte of zero, rather
- than being sign-extended. (E. Lenz)
- - The message "Error in operand format." has been changed
- to "Addressing mode not allowed here." in places where
- the latter message is more appropriate.
- - If the -q option species a value of zero (or no value
- is given, defaulting to zero), all console output will
- be suppressed except for error messages, if any.
- (Matt Dillon)
- - The 128-byte restriction on constant length no longer
- applies to the entire code generated by a single DCB
- statement; statements such as
- DCB.L 64,0
- can now be handled. (Colin Fox)
- - Forward branches are now optimized. The occasional
- instruction may be missed due to ripple effects, but
- this shouldn't happen frequently. The -f switch
- will flag any such instructions.
- - The -d switch can now be followed by an optional
- prefix string (with or without a leading !) which
- specifies which symbols should or should not be
- included in the symbol table dump. (Lionel Hummel)
- Version 2.5 (Charlie Gibbs, June 18, 1989)
- The following bugs in version 2.42 have been corrected:
- - Upon normal termination, A68k occasionally crashed in
- quit_cleanup by trying to free the relocation table twice.
- (Jeff Lydiatt and D. McClelland, who worked out a fix)
- - MEMF_CHIP and MEMF_FAST bits were being set in the
- hunk length, rather than in the hunk type. (Richard Man)
- - BCHG.L, BCLR.L, BSET.L, and BTST.L were causing
- phase errors. The test to ignore the .L specification
- (added in version 1.21) was being skipped in pass 1
- by an optimization added in version 2.4. (David Hankins)
- - PC-relative offset to a label was calculated as two bytes
- too great for MOVEM instructions. (Tony Parkhurst)
- The following enhancements have been added:
- - If the length code on an opcode is not .B, .W, .L, .S,
- or omitted, it will be flagged as an error.
- - JMP.S and JSR.S are flagged as errors. (Jim Butterfield)
- - Operands of the form (xxxx).W and (xxxx).L are now
- supported. This enables absolute short or absolute
- long addressing to be explicitly specified.
- - All optimization can be disabled by the new -n switch.
- (David Hankins)
- - The NEAR directive can now take a single operand, which
- can be any address register (or equated symbol) except
- A7. If omitted, the register defaults to A4.
- - Instructions of the form BTST Dn,#nn are no longer
- flagged. This obscure variant is nonetheless legal.
- Version 2.42 (Charlie Gibbs, January 10, 1989)
- The following bugs in version 2.41 have been corrected:
- - Small code/data conversion was sometimes taking place
- when no NEAR directive was active. (Jeff Lydiatt)
- Version 2.41 (Charlie Gibbs, January 6, 1989)
- The following bugs in version 2.4 have been corrected:
- - The second operand of LINK instructions was
- being erroneously flagged.
- - If a macro was used before it was defined, it
- was being expanded during pass 2 but not during
- pass 1, causing severe phase errors. Attempts
- to use a macro before it is defined will now
- be flagged as invalid opcodes. (Colin Fox)
- Version 2.4 (Charlie Gibbs, January 4, 1989)
- The following bugs in version 2.31 have been corrected:
- - If comments immediately followed the operands of
- a DC statement with no intervening white space,
- A68k would hang. (Ulf Nordquist)
- - In the following command:
- a68k -w 15000 myprog.asm
- the space between the -w and 15000 would cause A68k
- to look for a source file called "15000", and to think
- that the object file is to be called "myprog.asm".
- When it can't find "15000" it would display an error
- message and scratch "myprog.asm". (Jeff Lydiatt)
- - If an INCLUDE file that is skipped on pass 2 contains
- a macro call, subsequent uses of \@ (macro sequence
- number are subsequently flagged. The macro counter
- must be bumped along with the line number when
- skipping an INCLUDE. (Colin Fox, Harvey Taylor)
- The following enhancements have been added:
- - ORG and RORG are now fully implemented.
- - The SET symbols A68k, a68K, and a68k are defined in the
- same way as A68K, making it effectively case-insensitive.
- (Colin Fox)
- - MOVEM and REG now accept equated register names (EQUR)
- in register lists. (Bruce Dawson)
- - INCLUDE files will now be skipped on pass 2 even when
- a listing file is requested, if the listing has been
- turned off by a NOLIST directive before the INCLUDE,
- and is not turned on until after the end of the
- INCLUDE file has been reached. (Colin Fox)
- - A new switch (-f) causes forward branches (Bcc, BRA, BSR)
- that could be coded as short branches (Bcc.S etc.) to be
- flagged. This flag is not considered to be an error.
- - A limited small code / small data model has been provided.
- It is activated by a NEAR directive in the source code, and
- is de-activated by a FAR directive. External variables
- must be declared at the beginning of the program, which
- must consist of only two sections (CODE and DATA or BSS).
- All forward data references are assumed to be PC-relative
- if in the CODE section, A4-relative if in the DATA/BSS
- section, and absolute word if absolute values. Any
- forward references which cannot be resolved to one of
- these three in pass 2 will be flagged as errors, as will
- any attempt to define more than two sections. A4 is
- assumed to point to the start of the DATA/BSS section
- plus 32768 bytes, and must be loaded by a MOVE.L
- instruction using immediate mode unless this instruction
- is not enclosed within NEAR and FAR directives.
- - Miscellaneous optimizations, for speed, including:
- Most of the object code generator in pass 1 is bypassed.
- If GetValue gets a single term it takes a short cut.
- IsOperator now uses a table look-up.
- Instructions now only searches that portion of the
- opcode table whose opcodes start with the same letter
- as the OpCode being searched for.
- Version 2.31 (Charlie Gibbs, November 30, 1988)
- The following bugs in version 2.3 have been corrected:
- - Even though a macro definition was being skipped
- by IFxx/ENDC, its ENDM directive was still being
- detected, causing spurious diagnostics. (Harvey Taylor)
- - NOP was not being recognized. When moving all
- directives into the opcode table, NOL and NOLIST
- were placed after NOP, rather than before. (Colin Fox)
- - Symbols defined in the current module and declared
- as PUBLIC were not being written to the object code
- file when -d was specified. (Colin Fox)
- - Conversion of 0(An) to (An) (implemented in version
- 1.2) was causing errors in the MOVEP instruction,
- which requires a displacement even if it is zero.
- This conversion is now disabled for MOVEP instructions.
- - User macros containing invalid opcodes caused A68k
- to get lost when returning to the outer source file.
- (Colin Fox)
- - Large values of -w (over 6000 or so) would cause
- a visit from the Guru. The work field in HashIt
- was overflowing and going negative. Changing it
- to unsigned corrected the problem. (Colin Fox)
- - Although user macros are no longer displayed when
- -q is a negative number, the calling file's name
- was still being displayed at the end of the macro.
- Version 2.3 (Charlie Gibbs, November 21, 1988)
- The following enhancements have been added:
- - All file I/O has been rewritten to use level 1 I/O
- (open, creat, close, read, write, and lseek) instead
- of level 2 I/O. A68k now does its own buffering and
- unbuffering to reduce system overhead and increase speed.
- (Bruce Dawson)
- - All assembler directives have been incorporated into
- the opcode table. Since the opcode search now looks
- up directives as well, speed is increased.
- - Miscellaneous code optimization for additional speed.
- Version 2.2 (Charlie Gibbs, November 4, 1988)
- The following bugs in version 2.1 have been corrected:
- - Macro definitions within an INCLUDE file were
- disabling the test for skipping the file on pass 2.
- - Errors encountered in an INCLUDE file on pass 1
- were not disabling the skip of the file on pass 2 -
- the pertinent error messages could not appear.
- - XDEF information and optional symbol table dumps were
- not being written to the object code file for any
- hunks that did not contain relocatable code or data.
- (Colin Fox)
- The following enhancements have been added:
- - If the -q option is specified as a negative value,
- user macros are no longer included in line number
- displays, reducing clutter.
- - Some source code has been re-arranged to reduce size.
- Version 2.1 (Charlie Gibbs, November 1, 1988)
- The following bugs in version 2.00 have been corrected:
- - Macro definitions that span two chunks of memory
- were causing garbage and probably a crash when
- the macro was being expanded. Pointers were not
- being handled properly when linking the two chunks.
- - Statements such as EQU and SET were not being flagged
- as illegal forward references if referencing a label
- defined on the same line, e.g.
- LABEL SET LABEL+1
- - The position within macros and INCLUDE files was
- sometimes out by one line when reported in error
- messages (and the new feature of the -q switch).
- The following enhancements have been added:
- - If the -q option is specified as a negative value,
- line numbers will be displayed as positions within
- the current module (whose name is also displayed),
- rather than a total statement count. (Bruce Dawson)
- - INCLUDE files can be skipped on pass 2 even if they
- contain SET statements - the values of all symbols
- SET in the INCLUDE file are stored (as at the end
- of the file) in a separate table and are patched
- when the INCLUDE file is skipped. (Bruce Dawson)
- Version 2.00 (Charlie Gibbs, October 26, 1988)
- The following bugs in version 1.24 have been corrected:
- - The last digit of the statement number display
- (lengthened in version 1.24) was not being erased
- before displaying error messages.
- - A68k would go into a loop if a user macro was
- missing an ENDC directive. This error is now
- flagged (see below).
- The following enhancements have been added:
- - The highest statement number displayed at the end of
- each pass is now left on the screen. This means that,
- at the end of pass 1, you can always see how many lines
- A68k will have to process in pass 2, giving an idea of
- how how much longer you have to wait. (Colin Fox)
- - The symbol table is now built using a hashing algorithm.
- This eliminates the slowdown that occurs in pass 1 as
- the symbol table grows, due to the old insertion process.
- (Bruce Dawson)
- - If A68k terminates abnormally for any reason (such as
- insufficient memory) the object file is scratched
- (unless the -k option is set). (Bruce Dawson)
- - Any INCLUDE files which cannot be found are flagged
- as errors in pass 1, and the assembly is aborted
- at the end of pass 1. (Bruce Dawson)
- - Missing ENDC directives are flagged in macro expansions.
- Also, missing or unpaired ENDC directives in user macros
- are flagged.
- - If an INCLUDE file doesn't generate any code and no
- listing file is required, it won't be read again in
- pass 2. The statement numbers will be bumped to keep
- in proper alignment. This can really speed up
- assemblies that INCLUDE lots of equates. (Colin Fox)
- Version 1.24 (Charlie Gibbs, October 11, 1988)
- The following bugs in version 1.23 have been corrected:
- - MOVEA to a data register was not being flagged, even
- though all other invalid addressing modes were.
- - Attempts to ORG out of the current hunk (including
- to an absolute address) were not being flagged. (E. Lenz)
- - If the size of the bottom of the primary heap (symbols
- and macro text) exceeded 32K, any further macro
- definitions would expand as endless garbage. (Colin Fox)
- - If the size of the bottom of the primary heap (symbols
- and macro text) exceeded 64K, any further external
- symbols (XDEF) would be flagged as relocatability
- errors upon each reference. (Colin Fox)
- The following enhancements have been added:
- - Where statement numbers are displayed as fixed-length
- fields, their maximum length has been increased
- from 4 digits to 5. (Colin Fox)
- - The PUBLIC directive has been implemented.
- As with the Aztec assembler, any labels defined as
- PUBLIC will be treated as XDEF if defined within
- the current module, and XREF otherwise. (Jeff Lydiatt)
- Version 1.23 (Charlie Gibbs, September 20, 1988)
- The following bugs in version 1.22 have been corrected:
- - The test for a third operand was producing erroneous
- error messages on instructions whose second operand
- was in immediate mode. The '#' was not being taken
- into account, since it is not copied to DestOp.
- Version 1.22 (Charlie Gibbs, August 31, 1988)
- The following bugs in version 1.21 have been corrected:
- - Expressions of the form R-A, where R is a relocatable
- term or expression and A is an absolute term or
- expression, were being flagged as relocation errors.
- This was due to a bug in the routine which should
- (but did not) flag expressions of the form A-R.
- (David Ashley)
- - Instructions with three operands were not being
- flagged as errors. This can be caused by an extra
- comma being typed in the instruction, as in:
- BTST #0,state+3,(a5)
- The second comma should not be present. (David Ashley)
- The following enhancements have been added:
- - Excess spacing has been removed from the listing file.
- These changes are similar to those already made to the
- console output (probably at about version 1.05).
- - If the first statement in the source file is TTL or
- PAGE, an empty page is no longer produced at the
- start of the listing.
- Version 1.21 (Charlie Gibbs, July 29, 1988)
- The following bugs in version 1.2 have been corrected:
- - The instruction
- BTST.L #8,D0
- had a long-word value generated for the bit number.
- This bug also applies to BSET, BCLR, and BCHG.
- The .L specification is now ignored. (Ulf Nordquist)
- Version 1.2 (Charlie Gibbs, July 19, 1988)
- The following bugs in version 1.12 have been corrected:
- - A reference to the label of the current instruction
- was being converted to PC-relative on pass 2 but not
- on pass 1. This was causing phase errors. The label
- hasn't been added to the symbol table at the time the
- instruction is processed. Conversion to PC-relative
- addressing will now not be attempted in this case,
- although references to * can and will be converted.
- - All string-type DC statements, regardless of length,
- were being treated as DC.B. For example, DC.L 'A'
- would generate only one byte of object code.
- (Gerald Hull)
- - DC.W and DC.B statements were not being checked to
- ensure that their values would fit into a word or
- a byte respectively.
- - If a comment line had white space preceding the
- asterisk, A68k would hang. Actually, it was
- interpreting the asterisk as an opcode and trying
- to open a macro file called "*". Since under
- AmigaDOS such a file is the console, A68k was
- actually waiting for console input.
- - If an instruction with no operands (such as RTS
- or NOP) followed MOVE.L #rel,D0 where "rel" was
- a relocatable symbol, the RTS (etc.) would have
- its nonexistent operands flagged as invalid.
- - SECTION names enclosed in quotes were not being
- handled correctly.
- - Source modules that did not generate any code, data,
- or BSS areas, but only defined symbols, such as
- label equ 4
- xdef label
- end
- were generating incomplete object modules.
- The following enhancements have been added:
- - Jeff's experimental hunk code (prefixing hunk names
- with a sequence number before adding to the symbol
- table) has been permanently incorporated. It seems
- to work better with BLink on programs that have
- hunks continued farther on in the source code.
- (Jeff Lydiatt)
- - The macro parameter \0, which is replaced by the
- size specification in the macro call (B, W, or L,
- defaulting to W) is now supported. (Gerald Hull)
- - Operands of the form 0(An) will be treated as (An).
- (Bruce Dawson)
- Version 1.12 (Charlie Gibbs, May 25, 1988)
- The following bugs in version 1.11 have been corrected:
- - If an instruction with no operands (e.g. RTS)
- followed a MOVE.L #label,D0 the RTS would be
- flagged with a relocatability error. Src.Mode
- and Dest.Mode were not being cleared. (Colin Fox)
- Version 1.11 (Charlie Gibbs, April 6, 1988)
- The following bugs in version 1.10 have been corrected:
- - A68k would go into a loop while processing the
- arguments of a macro call, if these arguments are
- followed by comments separated from the arguments
- by one or more tab characters, and the -t switch
- is specified on the command line. All tests for
- blanks have been replaced by calls to isspace().
- - The operand alignment checks added in version 1.06
- were erroneously testing the following instructions:
- BCHG
- BCLR
- BSET
- BTST
- NBCD
- Scc
- TAS
- These instructions are now exempt from alignment checking.
- The following enhancements have been added:
- - A listing file name can now be specified with the
- -x switch; it is no longer necessary to specify
- both the -l and -x switches to produce a cross-
- reference listing with a name other than the default.
- - DS statements with more than one operand are
- flagged and ignored (in case they should be DC).
- - A character string used as a numeric value is
- flagged and set to zero if it is more than four
- characters long.
- Version 1.10 (Charlie Gibbs, March 20, 1988)
- The following bugs in version 1.07 have been corrected:
- - BSS sections were not being written to the object
- code file except for a BSS section at the end of
- a program. This is due to a bug in the code added
- in version 1.05 to overwrite null sections.
- - If a source module contained a mixture of lengths
- (8, 16, or 32 bits) in external references (XREF)
- to the same label, all references were being treated
- as if they has the length of the first reference.
- The following enhancements have been added:
- - DS operands that are either a forward references
- or relocatable are now flagged.
- - Short branches (Bcc.S, including BRA and BSR) to
- the next instruction (i.e. a displacement of zero)
- are illegal - the processor takes the displacement
- from the next word. Attempts to generate a short
- displacement of zero are now flagged.
- Version 1.07 (Charlie Gibbs, March 11, 1988)
- The following bugs in version 1.06 have been corrected:
- - Instructions that take no operands (such as RTS)
- were being flagged if they had comments that were
- not preceded by a semicolon.
- The following enhancements have been added:
- - The following synonyms have been added:
- CSEG for CODE (Aztec compatibility)
- DSEG for DATA " "
- ENDIF for ENDC (Assempro compatibility)
- = for EQU " "
- | for ! " "
- - Strings and character values may be delimited by
- either apostrophes (') or quotation marks (").
- The character not used as a delimiter can be used
- within the string without doubling it. For example,
- DC.B "This is Charlie's assembler"
- produces the same code as
- DC.B 'This is Charlie''s assembler"
- - The object code file will be scratched if any errors
- were found, unless the -k (keep) flag is set.
- (Bruce Dawson)
- - The symbol .A68K is automatically defined at the
- beginning of each assembly as a SET symbol with an
- absolute value of 1. This enables programs to check
- whether they're being assembled by this assembler.
- (Jeff Lydiatt)
- - The symbol table insertion routine has been
- greatly speeded up.
- Version 1.06 (Charlie Gibbs, March 6, 1988)
- The following bugs in version 1.05 have been corrected:
- - Lines skipped by IFxx/ENDC were not being counted
- in the line number given in error messages.
- - DATA and BSS sections may be unnamed, or have names
- the same as CODE sections. Honest, I thought section
- names had to be unique even across types.
- - CHIP and FAST options on the CODE, DATA, and BSS
- synonyms for the SECTION directive were not being
- handled correctly.
- - XDEF records and symbol table records (if desired)
- were not being produced for symbols defined ahead
- of the first object-code producing instruction.
- The following enhancements have been added:
- - The CNOP instruction can now force alignment
- relative to any boundary up to 128 bytes.
- The second operand must still be a power of 2.
- - The -q switch has been added to change the frequency
- with which progress reports (current line number) are
- displayed on the console. The default remains at
- every 10 lines (-q10). If you specify -q (no interval)
- or -q0 the line number displays will be suppressed.
- This will make assemblies run slightly faster due to
- reduced console I/O. (Bill Henning)
- - The -t switch has been added to keep any tabs in the
- source file when producing the listing file, as well as
- generating tabs elsewhere whenever possible. This
- speeds up assemblies and gives smaller listing files,
- but such listing files cannot be displayed on devices
- that do not assume a tab stop in every 8th position.
- (Bruce Dawson)
- - Any single-operand instruction with two operands,
- and any no-operand instruction with any operands,
- will be flagged.
- - Relocatable 8- or 16-bit immediate operands
- will be flagged. They blow up BLink.
- - Named local labels are now supported. Their names
- are formed in the same way as normal labels, but are
- then preceded by a backslash. Their scope is the
- same as normal local labels (nnn$). (Colin Fox)
- - An alignment error will be flagged in the following cases:
- Odd displacement on a LINK instruction
- Bcc or DBcc to an odd address
- In any word or long-word instruction, any operand
- using the following addressing modes:
- Address register indirect with displacement
- Address register indirect with index and displacement
- Absolute short
- Absolute long
- Program counter indirect with displacement
- Program counter indirect with index and displacement
- LEA and PEA instructions are exempt from these tests.
- - If a section is found to contain no data, A68k will
- back up to its beginning and overwrite it with the
- next section. The result is that null sections
- will no longer appear in the object file.
- Version 1.05 (Charlie Gibbs, October 30, 1987)
- The following bugs in version 1.04 have been corrected:
- - If a section was continued later in the program, e.g.
- SECTION prog,CODE
- <code>
- SECTION variables,BSS
- <DS statements>
- SECTION prog,CODE
- <more code>
- bad relocation information was being generated for
- the continuation of the SECTION. This bug was left
- over from version 1.03.
- The following enhancements have been added:
- - All console output except for error messages is now
- sent to stderr - this enables stdout to be redirected,
- producing an error file.
- - Console (stderr) output has been modified to require
- fewer lines on the screen.
- - If an error occurs while expanding a macro or INCLUDE
- file, the position of the call in each outer file is
- given along with the position in the current (innermost)
- file. Tracing continues until the outermost file (i.e.
- the original source file) is reached.
- Version 1.04 (Charlie Gibbs, October 21, 1987)
- The following bugs in version 1.03 have been corrected:
- - MOVE was being converted to MOVEQ regardless of
- operand size - this conversion is legal only
- for longword MOVEs.
- - Modifications to version 1.03 caused bad relocatable
- entries to be generated.
- Version 1.03 (Charlie Gibbs, October 14, 1987)
- The following bugs in version 1.02 have been corrected:
- - The following situation was causing phase errors:
- xdef label
- bra label
- .
- <at least 128 bytes of object code>
- .
- label:
- (The XDEF was fooling A68k into thinking that "label"
- was defined within 128 bytes of the BRA instruction
- on pass 1, although on pass 2 it knew better.
- - If the first operand of an two-operand executable
- instruction contained a character term containing a
- left or right parenthesis, it would generate error
- messages and be incorrectly evaluated.
- - Labels that don't begin in column 1 (denoted by a
- trailing colon) caused a Guru Meditation.
- - Certain ADD and SUB instructions using PC-relative
- addressing may cause phase errors. If the displacement
- is in the range 1 to 8 inclusive, the instruction was
- erroneously converted to ADDQ or SUBQ during pass 2.
- The following enhancements have been added:
- - The -z option has been added to display the
- current source program line on stdout as it
- is read, optionally over a given range.
- This feature is provided for debugging purposes.
- - Bcc, BSR, and DBcc to labels in other than the current
- section is now supported. A 16-bit relocation entry
- will be generated for each such reference.
- - PC relative mode will be generated for backward
- references to labels within the current CODE section
- if legal for the current instruction. Forward
- references will not be converted, since there is
- no way of telling which section the label is in
- during pass 1.
- - The cumulative sizes of all sections by type (i.e.
- CODE, DATA, and BSS) will be displayed at the end
- of the listing file and the console display.
- (Bruce Dawson)
- - In the symbol table dump, section names will no
- longer be indicated just as SECTION, but rather
- as CODE, DATA, or BSS, depending on type.
- Version 1.02 (Charlie Gibbs, September 9, 1987)
- The following bugs in version 1.01 have been corrected:
- - Duplicate labels were not being flagged.
- - XDEF symbols were not being dumped to the
- object code file when the -d option was set.
- The following enhancements have been added:
- - A header file is now supported. If the parameter
- -h<filespec> is included on the command line, the
- specified file will be included as if the source
- file's first line was " include <filespec>".
- The file specification may include a path name,
- although the include path names given by the
- -i parameter (if any) will also be searched.
- - An equate file can now be produced. If the parameter
- -e<filespec> is included on the command line, a file
- will be written containing EQU statements for any
- symbol whose value is absolute. If -e is specified
- without <filespec>, the name of the file will be
- formed in the same way as the list file, except with
- an extension of ".equ". (Bruce Dawson)
- The following changes have been made to existing logic:
- - No symbol table dump will be produced unless the
- -x (cross-reference) switch is set. Formerly a
- symbol table dump was always produced, with only
- the cross-reference portion optional.
- Version 1.01 (Charlie Gibbs, August 20, 1987)
- The following bugs in version 1.00 have been corrected:
- - Long-word constants and storage areas were being
- aligned on a double-word boundary. The only place
- where double-word alignment is now forced is at a
- break between SECTIONs, since the length of an
- AmigaDOS hunk must be a multiple of 4 bytes.
- (CNOP 0,4 can still be used if double-word
- alignment is desired by the programmer.)
- - If a label on an END statement or the first statement
- of a SECTION was named in an XDEF statement, it would
- not be written to the object code file. The latter
- case includes both the label of a SECTION directive
- and the label of the first executable instruction in
- the absence of any SECTION directives (defaulting to
- an unnamed CODE section). In the final case (default
- unnamed CODE section), references to XREF symbols
- in the first statement would also not be written
- to the object code file.
- - If the last statement in the source file was not
- terminated with a newline character (premature EOF),
- it was being ignored altogether.
- - A register list as the source operand of a MOVE
- instruction was not being flagged as an error.
- (MOVE to a register list was being flagged, however.)
- - MOVE from USP was generating incorrect code. Also,
- MOVE from SR or CCR to an address register was
- generating incorrect code rather than being flagged.
- Version 1.00 (Charlie Gibbs, June 18, 1987) - initial release
|