A86 assembler package V3.05 June 5, 1987 D86 debugger package V2.24 June 5, 1987 Both entire packages are Copyright (C)1986-1987 Eric Isaacson. All rights reserved. This NEW305.ARC package is for those who have already downloaded one of the complete packages V3.00 through V3.04 of A86, and want to make the minor upgrade to V3.05. The terms and conditions found in Chapter 1 of the full A86 package apply to this package as well. This document tells you what you need to know about V3.05. The package also includes D86 V2.24, for those who have the entire V2.22 or V2.23 packages. New Features I changed the display of source file names from 5-per-line to 4-per-line, to accommodate the longer path names derived from A86.LIB libraries. I've added recognition of SEGMENT AT in non-OMF mode, for MASM- compatibility. The directive "segname SEGMENT AT atvalue" is interpreted as if it were the directives "segname EQU atvalue" followed by "STRUC". I've also added a couple of switches, at a user's request: +C causes the assembler to be sensitive to upper- vs. lower-case for all symbols, so that routines with lower-case names can be created for linking to C programs. WARNING: I provide only limited support for this right now. In particular, if you use this option, you MUST give all built-in symbol names in ALL CAPS. And D86 doesn't recognize this yet-- although D86 will correctly disassemble symbols containing lower-case letters, you won't be able to refer to such symbols in D86 commands, because D86 will convert your references to all- upper-case. -C causes A86 to ignore upper- vs. lower-case in all symbol names. +S suppresses the creation of the symbol-table (.SYM) file in normal (no errors) assembly. This is overridden if you give an explicit symbols-file name in the invocation line. -S causes the symbol-table file to be created in all cases. Bug fixes There have also been the inevitable bugs discovered just after a major release. Bugs fixed are: 1. In V3.00 only, not in earlier versions, an erroneous source file was renamed to no extension, instead of a .OLD or .ERR extension as the assembler claimed. A benign but highly embarrassing bug! 2. If a macro parameter occurred at the beginning of a line, then any following blanks were completely eliminated from the macro definition. The definition should (and now does) reduce a sequence of blanks to one blank, not none. 3. The BOUND, Shift-rotate, and many 87 instructions did not accept size-specifiers in relocatable and/or forward-reference operands. 4. Near JMPs and CALLs between logical segments in OBJ mode were not supported in all cases. 5. If there were = or # operands in the invocation, and there were undefined symbols in subsequent source file names, then A86 got the file names wrong in the undefined symbols listing. A86 also got the listing wrong for undefined symbols from library files. 6. Segment-override operators in 3-operand MOV instructions produced unexpected results. I now outlaw this. 7. INC FOO,2 where FOO is relocatable or undefined didn't produce the correct code. I've outlawed this as well: you probably want ADD FOO,2 anyway. 8. JMP $+5 is now MASM-compatible. 9. MOV B[1+BX],0 now assembles successfully. 10. There was a serious bug in versions 3.00 and 3.01, that caused fixup records not to be generated under certain conditions when modules had more than one segment being assembled. This has been corrected. 11. There was a bug in Versions 3.00 through 3.02, in which MASM directive beginning with a period that should be ignored by A86 were instead flagged with an error. An embarrassing side-effect was that all subsequent new symbols caused an error also. 12. XREF 3.00 did not recognize double-quoted strings, and processed their contents as symbol references. 13. If a forward reference to a label had an indexing register, the register became part of the label's definition. 14. _TEXT declared in a GROUP directive misbehaved. 15. Certain classes of forward references to different segments in OBJ mode did not assemble correctly. New D86 features D86 V2.24 now supports the Sanyo 500 and 555 and the Tandy 2000 computers. There is also an embellishment to the memory window command: if you key in a digit and the cursor moves to an existing memory window that you didn't intend to reset, you can hit the ESC key. The existing window will be saved.