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.
|
||
|