mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-26 09:54:20 +00:00
Upload
Digital Research
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user