Files
Digital-Research-Source-Code/CPM OPERATING SYSTEMS/CPM.Z80.DE/PERSONAL/PCPM-86/BDOS 4.1/readme.txt
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

83 lines
3.4 KiB
Plaintext

BDOS 4.1 source tree
====================
This file contains disassembled source code and a build system for the
CP/M-86 BDOS, version 4.1. This is the version that is included in
Personal CP/M-86 2.x and also DOS Plus 1.2.
How to build
============
In order to use the build system, you will need:
* The Digital Research assembler and linker: RASM86 and LINKEXE.
* Pacific C, to build the C tools EXE2CMD and DPGEN.
* GNU Make.
You should just be able to type 'make' and a new system file (new.sys)
will be generated containing the newly-built BDOS.
Note, however, that certain structures need to be paragraph-aligned, and
the A86 files do not enforce this. Therefore if you add or remove
code or variables, you will need to check for bits marked PADDING and ensure
they do pad out the correct number of bytes.
Notes on the source
===================
The source code was disassembled using the IDA disassembler. It has been
split up into modules named after their counterparts in Concurrent CP/M
(SUP, RTM etc.) plus a few extras.
Rather than use LINKCMD to generate a CMD file, I was forced to use
LINKEXE to generate an EXE, and then write a custom EXE2CMD program to
convert the one to the other. This is because LINKCMD starts the data
segment at offset 100h, but to build the BDOS you need it at 0. The
'official' DRI way of doing this involves a patched linker (LINK0.CMD) but
there's no DOS version and it didn't seem to like running in a CP/M emulator,
so I was forced to adopt other tactics.
There are two variables which, despite being in the BDOS data segment, refer
to addresses in the XIOS. These are:
freemem: The address of the first segment available for programs. This
is left as an unresolved external symbol in the provided
source code, and is populated by DPGEN.
bdos_sysflags: The address of the system flag table in the XIOS. The only
way I found of making that come out right was to store its
value as an EQU directive in SYSTEM.A86. When I was writing
my modified XIOS for DOS Plus, I came across the same problem
from the other direction; the modified XIOS initialises this
variable at startup time so that the value in the BDOS is no
longer relevant.
Support for multiple versions
=============================
The build system is currently configured to build Personal CP/M v2.04e. If
you want to build other versions:
1. Get hold of the .SYS file for the version you want to build.
2. Use DPSPLIT (not supplied) to break it into BDOS.CMD, XIOS.CMD and CCP.CMD.
Delete BDOS.CMD but hang on to the other two.
3. Copy the correct SYS*.A86 to SYSTEM.A86, and the correct SER*.A86 to
SERIAL.A86:
System Version Language Files to copy
==========================================================================
PCP/M 2.02 German SER202D.A86 / SYS202D.A86
PCP/M 2.02 English SER202E.A86 / SYS202E.A86
PCP/M 2.04 German SER204D.A86 / SYS204D.A86
PCP/M 2.04 English SER204E.A86 / SYS204E.A86
PCP/M 2.11 German SER211D.A86 / SYS211D.A86
PCP/M 2.11 English SER211E.A86 / SYS211E.A86
DOS Plus 1.2 English SERDOSP.A86 / SYSDOSP.A86
4. Rerun the build.
From the point of view of the BDOS, the changes are mostly trivial:
differences are mostly caused by such things as a different serial number,
alternative screen dimensions etc. One exception is that DOS Plus omits a
few BDOS patches which are present in all known PCP/M-86 2.x versions.