Files
86-DOS-0.11/CPM Tools/README.md
T
2026-02-06 23:05:05 +10:00

188 lines
7.2 KiB
Markdown

# CP/M Building Tools
This folder contains some of the Z80 tools required for building and deploying
86-DOS 0.11 under CP/M (or Cromemco CDOS, the operating system
[@TimPaterson](https://github.com/TimPaterson) used). You will need these if
you wish to create a working copy of 86-DOS 0.11 from pure source code.
> [!WARNING]
> These tools have only been tested under Cromemco CDOS 2.x. There is no
guarantee that they will work under the official CP/M operating system or
other CP/M-like operating systems. The source files are to be assembled using
Cromemco's CDOS Z80 assembler, and you must have a Z80 CPU to run the binaries.
## ASM86
This is a reconstruction of the SCP Z80/8086 Cross Assembler
[@TimPaterson](https://github.com/TimPaterson) used to develop 86-DOS. Original
copies of this cross assembler are long gone, and the only thing we have now is
[a manual](https://bitsavers.org/pdf/seattleComputer/Z80_8086_Cross_Assembler_Preliminary.pdf)
for it. Given that the 86-DOS `ASM` assembler is essentially an 8086
translation of this assembler, I wrote a utility that does the exact opposite
of `TRANS` (named CIS) to translate 86-DOS 0.11's assembler back to Z80. After
making some minor tweaks to the output, I was able to make it work, so here it
is.
> [!TIP]
> The Z80 source of the assembler is actually easier to read than the 8086
source because this assembler was originally written in the Z80 assembly
language. When it was translated to 8086, a lot of boilerplate code were added,
which made the code slightly difficult to follow. Now that it has been
translated back to Z80, those boilerplate code have been removed.
ASM86 takes the following parameters: `[x:]ASM86 [y:]name[.ijk] [S]`
where
<table>
<colgroup>
<col style="width: 15%;">
<col style="width: 85%;">
</colgroup>
<tbody>
<tr>
<td>x</td>
<td>
is an optional disk drive specifier indicating the location of
the <code>ASM86.COM</code> file. This parameter is required
only if the COM file is <u>NOT</u> located on either drive A or
the current drive. Legal values are A, B, C, and D.
</td>
</tr>
<tr>
<td>y</td>
<td>
is an optional disk drive specifier indicating the location of
the source file. This paramter may be omitted if the source
file is on the current drive.
</td>
</tr>
<tr>
<td>name</td>
<td>
is the name of the 8086 assembly language source file, without
the 3-letter extension. The extension <code>A86</code> is
always assumed and may not be overriden.
</td>
</tr>
<tr>
<td>ijk</td>
<td>
is an optional 3-letter drive assigment parameter. The first
letter is the name of the drive on which the source file will
be found. This overrides a disk specifier which precedes the
file name. The second letter is the name of the drive to which
the hex object file will be written, or <code>Z</code> if no
object file is desired. The third letter is the name of the
drive to which the listing file will be written, or
<code>X</code> to send the listing to the console, or
<code>Z</code> if no listing file is desired. Assembling with
no listing is much faster since the source file will not be
read from disk a second time.
</td>
</tr>
<tr>
<td><code>S</code></td>
<td>
is an optional switch indicating that a symbol table is to be
placed at the end of the listing.
</td>
</tr>
</tbody>
</table>
This assembler can only produce Intel HEX files for object code, therefore you
must convert them to binary before they can be executed on the 8086. Under
CP/M, this can be done using the `LOAD` command. If you are using CDOS, which
does not have `LOAD`, you will have to use `DEBUG` to load the .HEX file to
memory and `SAVE` to save the loaded pages as a disk file.
## TRANS86
This is a reconstruction of the SCP Z80 to 8086 Translator shipped together
with ASM86. Like ASM86, original copies are long gone and this is the 8086
version from 86-DOS 0.11 translated back to Z80.
TRANS86 takes the following parameters: `[x:]TRANS86 [y:]name.ext`
where
<table>
<colgroup>
<col style="width: 15%;">
<col style="width: 85%;">
</colgroup>
<tbody>
<tr>
<td>x</td>
<td>
is an optional disk drive specifier indicating the location of
the <code>TRANS86.COM</code> file. This parameter is required
only if the COM file is <u>NOT</u> located on either drive A or
the current drive. Legal values are A, B, C, and D.
</td>
</tr>
<tr>
<td>y</td>
<td>
is an optional disk drive specifier indicating the location of
the Z80 source file. This paramter may be omitted if the source
file is on the current drive.
</td>
</tr>
<tr>
<td>name.ext</td>
<td>
is the name of the Z80 assembly language source file, with the
3-letter extension.
</td>
</tr>
</tbody>
</table>
The output 8086 source file will have the same name as the Z80 source file, but
with the extension .A86.
## DOSGEN
This is a tool I wrote to copy 86-DOS system files to the system area of IBM 8"
SSSD floppies. It works in a similar way to CP/M's `SYSGEN` utility.
DOSGEN takes the following parameters: `[x:]DOSGEN y: [N]`
where
<table>
<colgroup>
<col style="width: 15%;">
<col style="width: 85%;">
</colgroup>
<tbody>
<tr>
<td>x</td>
<td>
is an optional disk drive specifier indicating the location of
the <code>DOSGEN.COM</code> file. This parameter is required
only if the COM file is <u>NOT</u> located on either drive A or
the current drive. Legal values are A, B, C, and D.
</td>
</tr>
<tr>
<td>y</td>
<td>
is a disk drive specifier indicating the disk upon which the
86-DOS system is to be written.
</td>
</tr>
<tr>
<td><code>N</code></td>
<td>
is an optional switch indicating that a new file system is to
be put on the destination disk. If this switch is specified, a
file system with the files <code>COMMAND.COM</code> and
<code>RDCPM.COM</code> will be written alongside the system.
</td>
</tr>
</tbody>
</table>
To copy 86-DOS to a new floppy disk, you must have the files `BOOT.COM`,
`DOSIO.COM` and `86DOS.COM` on the current drive. If a new file system is to
be created, `COMMAND.COM` and `RDCPM.COM` must also exist.