You are on page 1of 4

AFIX conversion tool, V1.

0 February 18, 1990


Copyright 1990 Eric Isaacson. All rights reserved.
Eric Isaacson
416 E. University Ave.
Bloomington, IN 47401-4739
(812)339-1811
The AFIX package consists of this AFIX.DOC file, the program
AFIX.COM, and the set of files with the .FIX extension, that
are fed to the AFIX program.
I consider the legal status of the AFIX package to be the same
as that of the free-distribution parts of my A86 package: I
grant permission for anyone to copy the complete, unmodified
package and use it to try out A86. There is no separate
registration fee for AFIX: if you register for A86, that covers
the usage of AFIX. See the A86 package (V3.22 or later) for
details of my copying permissions/restrictions, including my
reservation of the right to inform specific parties that they
may not distribute some or all of my software.

Overview of AFIX
In an effort to expand the test base for my A86 assembler, I
recently converted 61 assembly-language source files, published
by PC Magazine during the past 3 years. These files were
written for various versions of the inferior but more widely-
distributed MASM assembler by Microsoft. I made the minimum
modifications necessary so that A86 would assemble the source
files directly to COM files that are functionally equivalent to
the files produced by MASM, LINK, and EXE2BIN. I would like to
make the modified files as widely available as the original MASM
files; but simply distributing them would violate their
copyright.
AFIX was written to solve this legal problem. For each modified
source file, I am publishing a special file with the extension
.FIX, that contains the specifications for modifying the
original PC Magazine source file. The FIX files contain
absolutely nothing from the original .ASM files; so they are
entirely mine and I can copyright and distribute them as I
please.
To run AFIX, you must place AFIX.COM, the original .ASM file,
and the corresponding .FIX file into your current directory, and
type AFIX followed by the file name to the DOS prompt. AFIX
will verify that the .ASM file has the same size and 16-bit
checksum as the file I have. If it does, AFIX will produce an
A86-compatible file, with the extension .8. A comment line is
inserted at the top of the file, giving the A86 invocation line
that will assemble the program. If the original file was more
than 64K in size, the output will be split into multiple files,
with names ending in _1, _2, etc.
You do not need to run AFIX for each individual source file:
AFIX will accept wildcards in the program name. In fact, if you
simply type AFIX to the DOS prompt, with no arguments, then
*.FIX is assumed, and AFIX will convert all programs for which a
.FIX file and the correct .ASM file both exist. If you do this,
you might want to redirect standard output to a disk file, so
that you can review the status messages at the end:
AFIX >AFIX.LOG
If you get AFIX from a disk you have purchased from me or from a
shareware distribution house, the disk will not contain the .ASM
files you need-- they are copyrighted and cannot be sold.
You'll need to download them from a BBS, or from the utilities
forum of PCMagnet.

What AFIX Doesn't Do


AFIX is not a general-purpose MASM-to-A86 translation tool-- you
**cannot** apply it to files you have created. AFIX is merely a
tool that allows me to communicate, in a machine-readable
format, the changes that I manually made to the copyrighted
source files. It works only with the .FIX files that I have
supplied. I do hope to write a MASM-to-A86 tool that will
assist you in converting any program; but there are other
improvements I would like to make to A86 first. Meanwhile, this
present effort makes over 2 megabytes of A86 source code
publicly available. That should be enough to keep you busy for
awhile!

Some Comments About the Converted Programs


This conversion effort has substantially improved both the
reliability and compatibility of A86. I made several dozen
changes for the V3.22 release, to minimize the changes needed
for the successful conversion. I added a new switch, +L8, that
changes assumptions made about untyped forward references,
reducing the number of B and W type-specifiers needed. The +D
switch already made the syntax of numeric constants MASM-
compatible. Thus, for maximum compatibility, the converted
files are assembled with the +DL8 switch setting.
Chapter 12 of the A86 manual goes into detail about what needs
to be done to convert files from MASM to A86. All 61 source
files assemble to complete .COM programs. The changes made to
these files fell into five categories:
1. Most of the changes comprised the addition of explicit
segment-override operators to memory references. MASM
inserts such overrides behind the programmer's back, as
controlled by the confusing and misunderstood ASSUME
directive. These overrides appear primarily in the
handlers for interrupts taken over by memory-resident
(TSR) programs. For simple, non-resident COM programs,
all segment registers point to the program segment,
so that overrides aren't needed.
2. Two of the 61 source files contained macros. A86's
macro definition syntax is different, so the definitions
had to be converted. These were the only two files
that did not retain MASM-compatibility after conversion.
3. There were some forward-reference symbols whose type
needed to be specified, usually with the OFFSET operator.
4. There were a few expressions involving forward references
that A86 couldn't handle. The expressions were moved into
EQU directives placed below the symbols referenced.
5. There were a couple of built-in mnemonics, such as WAIT, that
doubled as user symbols. MASM allows this; A86 doesn't. The
symbols were modified by appending an underscore character.
I verified the correctness of the converted files by generating a
proprietary version of A86 that mimicked as closely as possible
the (mostly inferior) code generation of MASM. This reduced the
number of discrepancies in the resulting .COM files to a small
enough number that I could manually verify their functional
equivalency. I did not attempt to test the execution of the
programs themselves.
The total size of changes was minuscule in proportion to the
total size of the source files. In fact, the one-line comments
appended to the top of each program totalled more bytes than the
code changes made! Without those comments, the total changes
(moved bytes plus inserted bytes plus deleted bytes) for the 59
non-macro files were 3363 out of 2231783 bytes. I can thus
claim that for COM programs not containing macros, A86 is 99.83%
MASM-compatible. Twenty of the files required no changes
whatever.

You might also like