CHAPTER 1   INTRODUCTION AND LEGAL TERMS


Introduction

A86 is the finest assembler available, at any cost under any
terms, for the 86-family of microprocessors (IBM-PC, compatibles,
and not-so-compatibles).  In contrast to software firms who
attempt to restrict the distribution of their products via
protection-schemes, I encourage free distribution, and trust that
those who use my products will pay for them.

Please keep in mind the fundamental good spirit of
free-distribution software as you endure the following barrage of
legalities.  Then evaluate the outstanding value that the A86
package offers you.  I assure you that you will not be
disappointed.


Legal Terms and Conditions

This package is provided to you under the following conditions:

1. You may copy the A86Vxxx.ZIP and D86Vxxx.ZIP files, and give
   them to anyone who accepts these terms.  The copies you
   distribute must be complete and unmodified.  You do not have
   to be registered to distribute this package.

2. Even if you have not yet obtained full execution rights, you
   may execute the programs in this package, in order to evaluate
   them.  If you decide that any of this package is of use to
   you, you must become a registered user by sending $50 US ($52
   if you are outside North America) to:

      Eric Isaacson
      416 E. University Ave.
      Bloomington, IN 47401-4739

   For your convenience, I now accept Visa and MasterCard, by
   telephone.  My number is (812)339-1811.

   For the convenience of users in Great Britain, I have
   authorized the firm Shareware Marketing to collect
   registrations for me.  We'll try to keep the prices about the
   same whether you register through me or through them; it's
   your choice.  Their address is 87 High Street, Tonbridge, Kent
   TN9 1RX; telephone 0732 771344.  They'll send me a list of
   registered users at the end of every month, and I'll send an
   acknowledgement to each user when I get the list.  So if you
   haven't heard from me by the end of the month following your
   registration with them, please let me know.
                                                              1-2

   Your registration includes a single update diskette (5.25
   inch, double density), that also includes the A86LIB tool
   available to registered users only.  You may order further
   updates for $10 US, or $12 US if you are overseas.  Once you
   register for this package, you are registered for all future
   versions-- you have permanent rights to execute A86 on one
   computer.  As long as I'm in business, you can get the latest
   version for just the update fee.

   I have a combination offer for the A86 and D86 packages.
   Instead of $50 + $50 = $100, I charge $80 ($82 overseas) for
   both.

   I also offer a printed version of this manual, covering both
   A86 and D86. The manual is printed on sheets 8.5 inches high
   and 7 inches wide, with a plastic ring-style binding so the
   book can lay flat.  If you order with your registration the
   manual is an extra $10 to the U.S., $15 overseas. If you've
   already registered and now want the manual, add another $10
   ($12 overseas) for the update disk that the manual is bundled
   with.  There is a limit of one manual per computer registered
   (except you may reorder when there is a substantial revision
   to the manual).

   Indiana residents need to add sales tax.  At the current rate
   of 5%, the prices for Indiana residents are $52.50 for one
   product, $63 one product with manual, $84 both products,
   $94.50 both products with manual, $21 manual if already
   registered.

   Educational institutions and training facilities MUST be
   registered in order to use A86 in courses.  Contact me for
   special terms.

   Companies and government agencies MUST be registered in order
   to use A86 for their work.  Again, contact me for special
   terms.

3. This package may not be sold to anyone.  If the package is
   distributed this package on a diskette, any fees collected
   must be specified as materials/handling, and may not exceed
   $10 for the diskette.

4. The user is completely responsible for determining the fitness
   or usability of this package.  I will not be liable for any
   damages, of any kind, arising from any failure of any programs
   in this package to perform as expected.

5. Only permanent registered users can sell or distribute any
   programs that you have written or modified using this
   assembler.  If you do sell or distribute such programs, you
   must insure that your registered name (company or individual)
   will always be distributed with the program, so that I can
   verify your registration.  Any individual or company found to
   be violating these terms will be liable for triple
   registration fees for every machine they own capable of
   running my assembler (plus any legal and court costs).
                                                              1-3

   NOTE that the only computers that need to be registered are
   those executing the program A86.COM.  The programs produced by
   A86 are entirely yours-- there are no "run-time royalties".

6. A86 takes advantage of situations in which more than one set
   of opcodes can be generated for the same instruction.  (For
   example, MOV AX,BX can be generated using either an 89 or 8B
   opcode, by reversing fields in the following ModRM byte.  Both
   forms are absolutely identical in functionality and execution
   speed.)  A86 adopts an unusual mix of choices in such
   situations.  This creates a code-generation "footprint" that
   occupies no space in your program file, but will enable me to
   tell, and to demonstrate in a court of law, if a non-trivial
   object file has been produced by A86. The specification for
   this "footprint" is sufficiently obscure and complicated that
   it would be impossible to duplicate by accident.  I claim
   exclusive rights to the particular "footprint" I have chosen,
   and prohibit anyone from duplicating it.  This has at least
   two specific implications:

   a. Any assembler that duplicates the "footprint" is mine.  If
      it is not identified as mine and issued under these terms,
      then those who sell or distribute the assembler will be
      subject to prosecution.

   b. Any program marked with the "footprint" has been produced
      by my assembler.  It is subject to condition 5 above.


Registration Benefits

Thank you for enduring the legalities.  They are there to protect
me, and also to convince you that this is my business, from which
I expect to make a living.  I'll now return to a softer sell, to
try to make you want to register for my products.

There is a certain amount of ambiguity about when you're still
evaluating A86, and when you're really using A86 and should
register for it.  Some cases are clear (e.g., you're a school
using A86 to teach a course); but many are not.  In practical
reality, it up to you to decide: you are "on your honor". Also in
practical reality, most users who ought to register haven't, yet.
For most, it's not dishonesty but merely procrastination.  So I
have provided some incentives, to prod you into registering.

One incentive is the printed manual, which only registered users
can purchase. I haven't left anything out of the disk version of
the manual, but the printed version is formatted and bound much
more nicely than if you print it yourself.

Another incentive is the tool A86LIB.COM, that lets you create
libraries of source files, to be automatically searched by A86
whenever your program has undefined symbols.  This means you can
effectively add procedures of arbitrary power and complexity to
A86's language.
                                                              1-4

Also, when you register you're on my mailing list.  I'll
occasionally send you notices about what I've added to A86 and
D86 since the last notice.  When I bring out new products, you'll
hear about them.  (I'm working on a library of source files for
A86, and also a 386 assembler-debugger package.)

Finally, there are the intangible incentives.  You know you've
done the right thing.  You're letting me know that you appreciate
what I've done.  You're letting the world know that quality
software can succeed when distributed as shareware.


Overview of A86

A86 accepts assembly language source files, and transforms them
directly into either: (1) .COM files executable under MS-DOS,
starting at offset 0100 within a code segment; (2) .OBJ files
suitable for feeding to a linker; or (3) object files starting at
offset 0, suitable for copying to ROMs.  A86 is a full featured,
professional quality program. I designed A86 to be as closely
compatible to the standard Intel/IBM assembly language as
possible, given that I insisted upon making design and language
enhancements necessary to make A86 the best possible assembler.
Some of A86's most notable features are:

* A86 is blazingly fast-- 4 times as fast as MASM V5.1. In the
  best conditions (large program, 8MHz AT,  RAM drive) A86
  assembles at a rate of over a thousand lines per second.
  That's per second.  NOT per minute, per second.

* A86 is simple to use.  You can feed it a program containing
  just machine instructions, without the red tape (NAME, ASSUME,
  SEGMENT PARA PUBLIC, PROC, ENDP, END, PUBLIC, EXTRN, etc. etc.)
  necessary with other assemblers.  The output of A86 can be a
  .COM file, ready to execute immediately.  You don't have to go
  through a linker.  Or, if you want to go through a linker, A86
  will produce a correct .OBJ file even if no red tape directives
  are given-- the default settings are compatible with most
  high-level languages.  (If you have programs written for that
  other assembler containing the red tape directives, you may
  leave them in: A86 knows about them, and is programmed to act
  upon them when assembling .OBJ files, and ignore them if
  assembling .COM files.)

* In spite of its simplicity, A86 encourages modular programming,
  even in its .COM mode, with separately-developed source files.
  This is because A86 assembles multiple source files in its
  invocation line; and because A86 assembles source files faster
  than other people's linkers can link their object files.  You
  get all the advantages of relocation/linkage systems (building
  up libraries of reliable program modules that you can piece
  together), without the disadvantages (excessive,
  time-and-source-code-wasting, confusing red tape).
                                                              1-5

* A86 has ample capacity for really large programming projects.
  Its symbol table capacity is approximately 1500 10-letter
  symbols, plus room for 8K bytes of compressed macro definition
  text.  (10 letters is an average symbol length; A86 recognizes
  up to 127 letters in a symbol.) Plus, A86's generic local label
  facility effectively doubles your symbol table capacity.

* A86 has language extension features that, once you start using,
  you'll never want to do without.  These include multiple
  operands to PUSH and POP; conditional returns; MOV from one
  segment register to another; assembly time assertion checking;
  based structures; and IF (flag) (statement).

* A86's macro processor is the best, achieving an optimal balance
  between ease of use and raw power.  Its looping and text
  concatenation abilities let you define sophisticated macros,
  whose calls look just like the machine instructions that
  surround them; without the clumsy invocation syntax required by
  other macro processors of A86's power.

* A86 provides clear, English error messages, given right at the
  point in the source code where A86 detected the error.  The
  messages are actually inserted into your source file, where you
  can read them and correct your code at the same time.  You can
  remove the messages yourself, or A86 will remove them for you
  when it reassembles the file.  (Fear not: your original source
  is preserved in x.OLD if you want it.  Or you can disable this
  feature and send error messages to a .ERR file.)

* A86 provides a full complement of assembly time expression
  arithmetic operators, compatible with Intel/IBM assemblers. A86
  also provides 4-function floating point arithmetic in assembly
  time expressions used for floating point initializations (an
  A86-exclusive feature).

* A86 assembles the floating point instruction set of the
  8087/287/387/IIT coprocessors, and the extended instruction set
  of the 186/286/NEC series, including the NEC-unique
  instructions.

* A86 has a built-in source file library feature.  Any undefined
  symbols in your program are automatically searched for in a
  special library file A86.LIB, and the associated source files
  are automatically assembled.  This makes access to library
  routines as effortless as it is in the "C" programming
  language.  A sample A86.LIB file is included in the shareware
  version of the package.  Only registered users should have the
  tool A86LIB, with which you can create your own library files.

* A86 works with an associated symbolic debugger, D86, to make
  the finest development environment available for the PC.  See
  the D86 package for the details of its features.
                                                              1-6

About the Author

I am a full-time shareware author.  I have worked with Intel
microprocessors since the early days of the 8080.  As an employee
of Intel, I was a part of the two-man team that implemented the
first ASM86 assembler. Having worked with all the processors of
the 86 family from the beginning, I know as much as anyone about
their machine-language architecture.  I have written a book, The
80386/387 Architecture, by Morse, Isaacson, and Albert, published
by Wiley and Sons, ISBN 0-471-85352-6.  Look for it in your
bookstore (or I'll send you a copy for $20, which is $4.95 off
the list price.)

A86 and D86 themselves are extremely mature, solid programs.
They have been in existence since 1984, running first under my
own, proprietary operating system; then later under the Xenix
operating system on Altos computers, used by myself and my
clients.  I have been making a decent living from A86 and D86 for
some time now, and with your much-appreciated support, I will
continue to improve my products, and enhance them with new,
related offerings.


How to Contact Me

I have no plans to move from my present location at least through
the millennium.  So you can write to:

    Eric Isaacson Software
    416 East University Ave.
    Bloomington, IN 47401-4739

or call (812)339-1811.

Sorry, I can't guarantee to return everybody's long distance
calls.  If you'd like to be SURE I'll get back to you, please
invite me to call you back collect, or tell me to charge the cost
of the call to your credit card.

I also accept BBS mail at PC-Link Central, (812)855-7252, which I
try to check into daily.  Type J 3 when you get on that system,
to reach my conference.  Another BBS which I check into about
twice a week is Indiana On-Line, at (812)332-7227-- type J A86 to
reach my conference on that BBS.  I also check into Compuserve
every 10 days or so-- my ID number there is 71520,74.

PLEASE contact me if you find bugs in my programs; I'll fix them!
I accept bug reports from anyone, registered or non-registered,
no questions asked.  It's very frustrating to hear about people
telling each other about bugs, and not telling me.  I still await
Greg Wettstein's bug list.

