150 lines
6.9 KiB
Plaintext
150 lines
6.9 KiB
Plaintext
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.
|
|
|