Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

CP/M for x86 distrib. with full source

727 views
Skip to first unread message

Matthias Thumann

unread,
May 31, 2004, 5:03:03 PM5/31/04
to
Hi,
is there any CP/M for x86 distribution provided with _full_ source code both
for the kernel and the other binaries, which can be recompiled/ reassembled
to a working os? And is it possible to redistribute the modified source code
or may I only modify the source for a "private distribution"?

Thanks,
Matthias


Bettykate

unread,
May 31, 2004, 5:34:33 PM5/31/04
to

Dunno about full source, look around www.cpm.z80.de ...

For CP/M-80 I know there is full source to v3.1 ...

I'd like to create a clone of CP/M, to have full source for such an OS. XD

-uso.

Matthias Thumann

unread,
Jun 1, 2004, 6:12:14 AM6/1/04
to
"Bettykate" <Bett...@dosius.com> wrote:
> Dunno about full source, look around www.cpm.z80.de ...
>
> For CP/M-80 I know there is full source to v3.1 ...
>
> I'd like to create a clone of CP/M, to have full source for such an OS. XD

Thanks for your answer. I've just downloaded the source for CCP/M 3.1 and
it seems to be complete. Has anyone here ever tried to reassemble
the source? And is it possible to boot this os from hdd? Another question:
Is the licence for the CP/M sources on the page
http://www.cpm.z80.de/license.html still valid?

cu
Matthias


Randy McLaughlin

unread,
Jun 1, 2004, 5:10:14 PM6/1/04
to
"Matthias Thumann" <No_MatthiasThu...@gmx.de> wrote in message
news:c9hkp5$gsl$00$1...@news.t-online.com...

I donated the CCP/M source to Gaby's site. I intend to make a working tree
but my plate is too full right now working on eZ80 & the SuperIO.

Everyone would be happy if you took a look at compiling it.

It is setup for half to be done on a PC using ASM86 & the other half to be
compiled on a VAX using PLM.

The PLM compiler used is lost (the PLM compiler on Gaby's site is the wrong
one).

There is another PLM compiler that should work that I sent to Genes site
(http://www.retroarchive.org/dos/lang/index.html).

If you take up the torch keep us informed.


Randy


Steve Dubrovich

unread,
Jun 1, 2004, 11:39:10 PM6/1/04
to
"Matthias Thumann" <No_MatthiasThu...@gmx.de> wrote in message news:<c9hkp5$gsl$00$1...@news.t-online.com>...
In addition to what Randy mentioned, you also need the Intel tools:

http://leonardo.caltech.edu/~ee5x/tools/exe/

even the obsure ones, loc86, oh86. You might as well get Intel C-
ic86 while there.

I rebuilt gencmd as an exercise and it worked, but it is involved.
Inside most of the utility src files are the commands to build them on
the Vax, I used these as a build guide, or there are external files
with the build instructions. The parameters to PLM86, ASM86 LOC86
OH86 are the same. The destination syntax is modified for the PC. I
built it on a win95 system using batch files and Shortcuts. You can
create a shortcut to, say, plm86 - then rightclick the shortcut to
edit the launch command line to add the filename of what you are
compiling, for example. Anyway, the second to last step uses oh86 to
form an Intel Hex object. I then used gencmd.cmd thru the cpm86.exe
emulator to finish the object to a .cmd file. I ran this new version
under the emulator on a test file to verify that it built correctly.
That is just a utility build.

As to the OS, the OS components are built separately, such as sup.con
rtm.con etc., and combined into a final executable using a program
called genccpm.

The version of genccpm in the 3.1 src is at least written in DRI C, so
it should be able to be built. Perhaps the genccpm from v2 will work?
...

Matthias Thumann

unread,
Jun 2, 2004, 11:26:40 AM6/2/04
to
"Steve Dubrovich" <s_dub...@yahoo.com> wrote:
[building ccp/m 3.1]
At first, thanks for your answers! It seems that the Intel ASM86 Assembler
is not the right one, because there are several errors during compilation.
Here's a list file generated by asm86:
-----------------------8<-----------------------
8086/87/88/186 MACRO ASSEMBLER ANONYMOUS
17:01:31 06/02/:4 PAGE 1


DOS 5.0 (038-N) 8086/87/88/186 MACRO ASSEMBLER V3.1 ASSEMBLY OF MODULE
ANONYMOUS
OBJECT MODULE PLACED IN BDOS.OBJ
ASSEMBLER INVOKED BY: C:\D1\ASM86.EXE BDOS.A86

LOC OBJ LINE SOURCE

1
2
3
4 include cpyright.def
*** _______________________________________________^
*** ERROR #1 IN 4, SYNTAX ERROR
5
6
;*****************************************************
7 ;*
8 ;* BDOS - Basic Disk Operating
System
9 ;*
10
;*****************************************************
11 ;
12 ; generation of BDOS.CON file
13 ;
14 ; RASM86 bdos
15 ; LINK86 bdos.con = bdos
[data[origin[0]]]
16 ;
17
;*****************************************************
18
19 eject ! include equ.bdo ;
symbol definitions
*** _____________________________________________^
*** ERROR #31 IN 19, ILLEGAL CHARACTER
*** _______________________________________________^
*** ERROR #1 IN 19, SYNTAX ERROR
[...]
-----------------------8<-----------------------
Any ideas, which assembler to use? Or maybe I could write a perl program to
convert the source ...

cu
Matthias

Randy McLaughlin

unread,
Jun 2, 2004, 12:44:15 PM6/2/04
to
"Matthias Thumann" <NoSpam_Matthia...@gmx.de> wrote in message
news:c9krih$5ib$02$1...@news.t-online.com...

Looking at line 14 & 15 it looks like it needs DRI's RASM86.

I have both the CP/M-86 & the DOS version. If it is not on either Gaby's or
Gene's site I can send you a copy.

If you need a copy just send me an email to randy482 at hotmail dot com.


Matthias Thumann

unread,
Jun 2, 2004, 3:12:51 PM6/2/04
to
"Randy McLaughlin" <rand...@nospam.com> wrote:
> I have both the CP/M-86 & the DOS version. If it is not on either Gaby's
or
> Gene's site I can send you a copy.
>
> If you need a copy just send me an email to randy482 at hotmail dot com.
>

OK, I've sent you a mail. Is there any linker supplied with RASM86 or can
the Intel linker be used?

Randy McLaughlin

unread,
Jun 2, 2004, 3:53:10 PM6/2/04
to
"Matthias Thumann" <NoSpam_Matthia...@gmx.de> wrote in message
news:c9l8rn$ihk$02$1...@news.t-online.com...

I have not recieved your email. In order to reduce SPAM my hotmail accout
is setup to ignore spoofed email addresses. If that is the problem then you
either need to make sure your email is setup to send your real email address
when you email me.

I tried to email you at NoSpam_Matthia...@gmx.de with the NoSpam_
removed. It bounced back as being an invalid address.

I sent copies to Gene's site and he may post them.

It includes the CP/M-86 and DOS versions including RASM86, linker,
librarian, as well as a text file containing instructions.


Randy


Anonymous Guy

unread,
Jun 2, 2004, 5:25:49 PM6/2/04
to

On 2004-06-02 rand...@nospam.com said:

> [ snip ]


>
> Looking at line 14 & 15 it looks like it needs DRI's RASM86.
>
> I have both the CP/M-86 & the DOS version. If it is not on
> either Gaby's or Gene's site I can send you a copy.
>
> If you need a copy just send me an email to randy482 at hotmail
> dot com.

The RASM86/LINK86 package for CP/M-86 is included in
the CP/M-86 DRI 'C' archive.

Available for download from Gaby Chaudry's web site:

http://www.cpm.z80.de/download/drc86111.zip

Randy McLaughlin

unread,
Jun 2, 2004, 5:43:21 PM6/2/04
to
"Anonymous Guy" <anon...@bogus-address.com> wrote in message
news:c9lgkr$ai5$2...@nsnmpen2-gest.nuria.telefonica-data.net...


It looks like the DOS version is at:

http://www.cpm.z80.de/download/cb86toys.zip


Randy


Bettykate

unread,
Jun 2, 2004, 6:37:29 PM6/2/04
to

I have a linkcmd here somewhere, but the obj format is the same as what
(e.g.) the 16-bit Borland compilers used.

-uso.

Holger Petersen

unread,
Jun 3, 2004, 1:46:28 AM6/3/04
to
"Randy McLaughlin" <rand...@nospam.com> writes:


>I have not recieved your email. In order to reduce SPAM

... many people reject all mail from any

> hotmail accout

So do I.

Yours, Holger


Steve Dubrovich

unread,
Jun 3, 2004, 7:08:57 AM6/3/04
to
"Matthias Thumann" <NoSpam_Matthia...@gmx.de> wrote in message news:<c9krih$5ib$02$1...@news.t-online.com>...

> "Steve Dubrovich" <s_dub...@yahoo.com> wrote:
> [building ccp/m 3.1]
> At first, thanks for your answers! It seems that the Intel ASM86 Assembler
> is not the right one, because there are several errors during compilation.
> Here's a list file generated by asm86:

These sources were cross compiled on the Vax, so we have to adjust our
thinking to rebuild. The error you list is a compiler directive, so
for I-asm86 edit that statement. The I-asm86 takes its directives
starting with '$' at the leftmost line column. Try:

$include(cpyright.def)

The reason I suggest using the Intel tools is because Intels' PLM86
handles the source PL/M syntax correctly, at least it'll compile it.

And the I-asm86 will compile the asm stuff, at least it handled
SCD.a86 correctly.


> -----------------------8<-----------------------
> 8086/87/88/186 MACRO ASSEMBLER ANONYMOUS
> 17:01:31 06/02/:4 PAGE 1
>
>
> DOS 5.0 (038-N) 8086/87/88/186 MACRO ASSEMBLER V3.1 ASSEMBLY OF MODULE
> ANONYMOUS
> OBJECT MODULE PLACED IN BDOS.OBJ
> ASSEMBLER INVOKED BY: C:\D1\ASM86.EXE BDOS.A86
>
>
>
> LOC OBJ LINE SOURCE
>
> 1
> 2
> 3
> 4 include cpyright.def
> *** _______________________________________________^
> *** ERROR #1 IN 4, SYNTAX ERROR

snip

Randy McLaughlin

unread,
Jun 3, 2004, 2:41:59 AM6/3/04
to
"Holger Petersen" <h...@kbbs.org> wrote in message
news:c9mdvk$3fl$1...@kbbs.org...

You reversed the meaning of my post, but I agree. I hate SPAM, I use
hotmail when I need to publicly post an email address. I have a "real"
email address that is private. Knock on wood I don't get any SPAM on my
real address.

To use hotmail I have to set it to ignore email that appears spoofed
otherwise it fills (hotmail has a 2mb limit) a couple of times a day.

SPAM continues simply because people do buy what is being sold. It only
takes a couple of idiots buying something that makes it profitable to
generate all the SPAM the world gets.

It really gets me that most SPAM generated in the US is done by three
people. You would think that Micro$loth and others would track their IP
addresses and block them.

As a matter of fact it seams like it would be possible for ISP's to filter
email, spotting when one source IP is sending email to a large number of
users.

It would be simple to build a list of "safe" IP's that represent known
ISP's. The source IP could be compared to the return address and the
subject line could be modified to show the message as possible SPAM which
would be easy to filter out.

Spammers try to hack into systems on the net and get them to send out the
SPAM for them. The return address usually does not match the senders IP
address making it relatively easy to spot.

If the individual the US would force the banks that pay the spammers to
withhold payment SPAM would stop. These spammers ask the people that buy
their items to pay via credit cards. Since it is all based on criminal acts
the credit card payers (banks) could be forced not to forward payment to the
crooks (spammers).


Randy


Randy McLaughlin

unread,
Jun 3, 2004, 1:34:19 PM6/3/04
to
"Steve Dubrovich" <s_dub...@yahoo.com> wrote in message
news:3fddc08d.04060...@posting.google.com...

In this case the part you snipped included comments specifying that DRI's
RASM86 was to be used.

Only the PLM code was cross compiled on a VAX not the ASM code.


Randy


Steve Dubrovich

unread,
Jun 3, 2004, 10:39:04 PM6/3/04
to
"Randy McLaughlin" <rand...@nospam.com> wrote in message news:<IaJvc.3509$Iu6...@bignews5.bellsouth.net>...

>
> In this case the part you snipped included comments specifying that DRI's
> RASM86 was to be used.
>
> Only the PLM code was cross compiled on a VAX not the ASM code.
>
>
> Randy

Oops! My apologies. So ccp/m-86 ought to assemble with the DRI tools.

Randy McLaughlin

unread,
Jun 4, 2004, 1:50:45 AM6/4/04
to
"Steve Dubrovich" <s_dub...@yahoo.com> wrote in message
news:3fddc08d.04060...@posting.google.com...

No, it still needs to have the PLM code compiled and DRI never released a
PLM compiler, which is strange considering who wrote the original Intel PLM
compiler.


Randy


Steve Dubrovich

unread,
Jun 6, 2004, 6:59:17 PM6/6/04
to
"Randy McLaughlin" <rand...@nospam.com> wrote in message news:<5%Tvc.19545$BH2....@bignews3.bellsouth.net>...

In the ccpm8620.zip, which is ccpm v2, there is a folder of commands
which looks like is for setting up the compiling on the vax. Also,
ome of the v2 sources have their listing file, and for those we can
see what tool produced the listing, for ex. for PIP;

PL/M-86 COMPILER PERIPHERAL INTERCHANGE PROGRAM
2/9/83 PAGE 1


ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE PIPMOD
OBJECT MODULE PLACED IN PIP.OBJ
COMPILER INVOKED BY: :F0: PIP.PLM XREF OPTIMIZE(3) DEBUG DATE(2/9/83)

$title('PERIPHERAL INTERCHANGE PROGRAM')
1 PIPMOD:
DO;
/* P E R I P H E R A L I N T E R C H A N G E P R O G R
A M

COPYRIGHT (C) 1976, 1977, 1978, 1979, 1980,
1981, 1982, 1983
DIGITAL RESEARCH
BOX 579
PACIFIC GROVE, CA
93950

Revised:
17 Jan 80 by Thomas Rolander (MP/M 1.1)
05 Oct 81 by Ray Pedrizetti (MP/M-86 2.0)
18 Dec 81 by Ray Pedrizetti (CP/M-86 1.1)
29 Jun 82 by Ray Pedrizetti (CCP/M-86
3.0) */

/* Command lines used for CMD file generation
*/

/* (on VAX)
asm86 scd1.a86
asm86 inpout.a86
plm86 pip.plm debug xref optimize(3)
link86 scd1.obj,inpout.obj,pip.obj, to pip.lnk
loc86 pip.lnk od(sm(code,dats,data,const,stack)) -
ad(sm(code(0), dats(10000h)))
ss(stack(+32)) to pip.
h86 pip

(on a micro)
vax pip.h86 $fans
gencmd pip data[b1000 m280 xfff]
[snip]

**no surprise that the Intel PLM86 is used, but also ASM86 of scd1.a86
produces scd1.obj, so this is the Intel ASM86 in use as well, actually
the "ISIS-II MCS-86 MACRO ASSEMBLER V2.1 ASSEMBLY OF MODULE SCD1".
Also in the folder of commands is oldplm.com[mands] and
newplm.com[mands], these are ascii files of vax directives:

$ ! set up environs for PLM work: use old compiler
$ assign drb1:[CCPM86.VAXTOOLS] sys$mds

$ PLM86 :== $SYS$MDS:OPLM86
$ ASM86 :== $SYS$MDS:OASM86
$ LINK86 :== $SYS$MDS:OLINK86
$ LOC86 :== $SYS$MDS:OLOC86
$ ! $ LIB86 :== $SYS$MDS:LIB86
$ ! $ I2E :== $SYS$MDS:I2E
$ ! $ E2I :== $SYS$MDS:E2I
$ H86 :== $SYS$MDS:OH86
$ ASS SYS$INPUT: CI:
$ ASS SYS$OUTPUT: CO:
$ ASS 'COMON' F1:
$ ASS 'COMON' F2:
$ ASS 'COMON' F3:
$ ASS 'COMON' F4:
$ ASS 'COMON' F5:
$ ASS SYS$ERROR: FOR007

** proxy assignments for the intel tools is my guess...

$ ! set up environs for PLM work: use NEW compiler
$! Concurrent CP/M-86 v2.0 10/15/82 whf
$ v='f$verify(0)
$ set noverify
$ comon :== _DRB1:[CCPM86.COMMON]
$ assign drb1:[CCPM86.VAXTOOLS] SYS$BETA

$ NEWPLM86 :== "$ SYS$BETA:nplm86 PLM86 "
$ NEWLINK86 :== "$ SYS$BETA:nlink86 LINK86 "
$ NEWLOC86 :== "$ SYS$BETA:nloc86 LOC86 "
$ NEWASM86 :== "$ SYS$BETA:nasm86 ASM86 "
$ NHEX86 :== "$ SYS$BETA:nhex86"
$ AS86 :== @ sys$beta:NAS86
$ PL86 :== @ sys$beta:NPL86
$ LO86 :== @ sys$beta:NLO86
$ LI86 :== @ sys$beta:NLI86
$ NEWH86 :== @ sys$beta:NEWH86
$ REFMT :== @ sys$beta:NREFMT
$ PCLEAN :== @ com:PCLEAN
$ ! NEWLIB86:=="$SYS$BETA:LIB86 LIB86 "
$ ! NEWREL2:=="$SYS$BETA:REL2 REL2 "
$ ! ASS SYS$BETA:PLM86.LIB NEWLIB
$ ! ASS SYS$BETA: PLM$UDI
$ ASS SYS$INPUT: CI:
$ ASS SYS$OUTPUT: CO:
$ ASS 'COMON' F1:
$ ASS 'COMON' F2:
$ ASS 'COMON' F3:
$ ASS 'COMON' F4:
$ ASS 'COMON' F5:
$ ASS SYS$ERROR: FOR007

$ if v then $ set verify

**maybe this sheds some light on some of the convolution.

Matthias Thumann

unread,
Jun 13, 2004, 5:00:14 PM6/13/04
to
"Randy McLaughlin" <rand...@nospam.com> wrote:
> I have not recieved your email.

Seems it got lost somewhere or your spam filter deleted it ...

>In order to reduce SPAM my hotmail accout
> is setup to ignore spoofed email addresses. If that is the problem then
>you
> either need to make sure your email is setup to send your real email
>address
> when you email me.
>
> I tried to email you at NoSpam_Matthia...@gmx.de with the
>NoSpam_
> removed. It bounced back as being an invalid address.

You have to remove _Mails, too ;-) I've changed this now, it's a
bit misleading...

>
> I sent copies to Gene's site and he may post them.
>
> It includes the CP/M-86 and DOS versions including RASM86, linker,
> librarian, as well as a text file containing instructions.

OK, I'll look on his site.

cu
Matthias


Randy McLaughlin

unread,
Jun 13, 2004, 5:30:44 PM6/13/04
to
"Matthias Thumann" <NoSpamMails_M...@gmx.de> wrote in message
news:caif7l$jg3$03$1...@news.t-online.com...

I wasn't sure of your "real" email address, it is a shame that the world is
so bad that everyone has to mask their email address from spammers.

I found the files on Gaby's site. You can download them directly at:

http://www.cpm.z80.de/download/cb86toys.zip

I posted this about a week and a half ago.

I am setting up my own website (www.s100-manuals.com) but since Gaby's site
already has so many mirrors I do not intend to post files found there. I
have included links to her site and may add links to specific files where
appropriate. I have just started setting up my site (I purchased a 3gb
site) I have yet to put up any personal files yet I've posted over 1.2gb
from other sites. Some of the files from the sites I have mirrored are
contributions from me.


Have fun,

Randy


Bill Gates

unread,
Jun 15, 2004, 7:20:58 AM6/15/04
to
> I am setting up my own website (www.s100-manuals.com)

Congratulations, Randy!

I wish I had enough time and money to have one, too.

I had a quick look at your site. If you want it to remain
small, my advice is to drop Acrobat Reader and stay
with the "standard" of CP/M: WordStar.

I am using the last release, WS4, under CP/M 2.2,
CP/M Plus, and MS-DOS (unfortunately, no copies
of WS4 for CP/M-86 has been found so far).

I have been using it for more than 20 years, so
I think that it is quite well debugged and reliable...

Yours Sincerely,
"French Luser"

CBFalconer

unread,
Jun 15, 2004, 10:16:56 AM6/15/04
to
Bill Gates wrote:
>
... snip ...

>
> I had a quick look at your site. If you want it to remain
> small, my advice is to drop Acrobat Reader and stay
> with the "standard" of CP/M: WordStar.

WS cannot handle graphics. For pure textfiles it is best to stick
to text. WS is neither fish nor fowl today, unless in pure text
mode, and then there are better editors available.

For CP/M the best text editor is probably VEDIT.

--
A: Because it fouls the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?

Holger Petersen

unread,
Jun 15, 2004, 10:35:05 AM6/15/04
to
"Bill Gates" <Bill....@Microsoft.com> writes:
^^^^^^^^^^
Hmmm...


>I wish I had enough time and money to have one, too.

You do not need any money to have your 'own website'
But with that funny name, you ought to have enough...

Why don't you use any free website-service and any of
all those free email-Services which are very well usable
from any Cybercafe in the wourld, even from france?

Yours, Holger

Randy McLaughlin

unread,
Jun 15, 2004, 2:14:28 PM6/15/04
to
"Bill Gates" <Bill....@Microsoft.com> wrote in message
news:camocv$gd$1...@news-reader2.wanadoo.fr...

The total cost to me is around $50.00/yr for 3gb of web space and should be
affordable to most anyone living in an industrialized nation.

I do not intend to have a small site. The only thing I am trying to keep
small is the page load time. The manuals will me the larges files, I will
also me storing disk images and program packages.

I want to make it quick to navigate so people can find what they need with
as little effort as possible. Once they find what they need it will then
take however much time as it takes to download the files.

Hopefully people will appreciate my thinking but in any case I have files
especially related to Cromemco CDOS that don't really fit other sites and I
will be hosting them. Anyone that would like to take them and host them
somewhere else are welcome to do so with the exception of the mirrored
sections and people should check with the original sites owners.

As far as WordStar goes I have been using it from v0.96a and I still use
v4.0 on my CP/M system. I also like it but I have better thing to do with
my time than to try and re-type the manuals when I can scan them so quickly.
I am not trying to help people with 300 baud access I expect people to have
at least a 56K dialup account.

With a 56K dialup account the larges manual I am hosting right now could
take an hour to download. Whiile an hour spent downloading onw file may
seem like a long time it isn't if it is what you need.


Randy


Jason King

unread,
Jun 16, 2004, 5:58:50 AM6/16/04
to
I've downloaded the pl/m and intel tools as well. I'd suggest since
there seem to be about 3 of us interested in this that we pick one ccp/m
version (I'd say 3.1, but I'm not a fanatic) and divvy up getting the
pieces to complile.

Bill Gates

unread,
Jun 16, 2004, 7:40:52 AM6/16/04
to
Hello, Charles!

> WS cannot handle graphics. For pure textfiles it is best to stick
> to text. WS is neither fish nor fowl today, unless in pure text
> mode, and then there are better editors available.

Re graphics: WS itself cannot handle graphics, but, 10 years ago,
I was producing graphics mixed with text printed by WS4.
How? By using one of the first laser printer made. It had
(among other things) a 68000 processor. I had found how
to produce ASCII "strings" that directed it to produce graphics
when WS4 was printing its "documents"...

(The only real portable graphics system I know is GSX,
which happens to run under CP/M-80, CP/M-86,
and MS-DOS... This way, people still interested
in CP/M could produce graphics at home.)

Re pure text files: I guess that, by "text", you mean ASCII?
As you may know, I am quite knowledgeable about ASCII,
since my BASIC interpreter (Mallard BASIC) can save
in ASCII (as demonstrated by the BASIC programs that
I have published in the comp.os.cpm Newsgroup).

Unfortunately, several peoples of this Newsgroup have
asked me to produce 64 colmuns wide messages
(my standard is 78 columns wide). So, I am obliged
to reformat my messages and, for this, there is no way
out of a real word-processor.

Re better editors: The advantage with WS4 is that there
is only ONE editor, which does everything. "All-in-TPA"
editors are nice at the beginning (especially if you have a
floppy-only system), but when you need to handle bigger
file sizes (like me), the only really standard solution is WS4.

> For CP/M the best text editor is probably VEDIT.

I don't know. Despite my several askings over the
last 5 years, no doc or CP/M-86 version of VEDIT
is available. (I am afraid that this means that nobody
is using it under CP/M-86.)

(After a few months using ED under CP/M-86 Plus,
I transferred my personal CP/M Plus "All-in-TPA"
editor, then ran it under Z80.CMD. It was faster on
a floppy, for files less than 64K, than 16-bit WS 3.30.
Since I was developing, rather than dealing with big
files generated by disassemblies, it was perfect.

Before making my own personal editor, I was using VDE.
I still use its MS-DOS version, from time to time, to
write short messages to the comp.os.cpm Newsgroup.
When I write long texts, or feel that, one day, the text
could be worth enough to be put on a server, I use WS4,
since I wrote a WS4-to-HTML file converter.

(I also produced, many years ago, a "Journal" made
entirely with WS4. I hope to put it online, one day.
If there was something that WS4 could not made,
I was not using it. This Journal was built around WS4.)
(I made 10 issues of 60 pages of 60 lines by 78 columns.)
(In france, we use 12" paper, not 11". So, we have 72
lines per pages.)

Yours Sincerely,
"French Luser"

Bill Gates

unread,
Jun 16, 2004, 7:53:05 AM6/16/04
to
Hello, Randy!

> With a 56K dialup account the larges manual I am hosting right now could
> take an hour to download. Whiile an hour spent downloading onw file may
> seem like a long time it isn't if it is what you need.

"My 2 cents" (as the Americans say):

Recently, I heard about one interesting PhD Thesis put online
by its author. I went to my usual cybercafe (here) to download it
(it is a 13MB PDF file).

This cybercafe was the first of the city with ADSL. It was then
claimed that it was 10 times faster than 56K.

After watching 2 or 3 minutes a blank screen, I went to another
cybercafe, near the telephone company (we have only one,
a National, in France) "autocommutateur". It is the fastest
cybercafe I know in the area.

At 512KB ADSL, it took it several minutes to download
the 13MB PDF file. Since the cybercafe was closing,
I told them to print the file during the night (the owner
was thinking that its color printer was able to print 10
pages per minutes... It turned to be 4 pages per minutes...)

When I came back, I had to pay 82 Euros (roughly
the same prize in Dollars) for the downloading and
printing of this PhD Thesis. The American professor
had refused to have it printed by its University
reprographic department: he was thinking that
everybody in the world had access to Internet2
and 512MB ADSL, and fast color printers...

Just an experience from "the trailing edge of computing"!

Yours Sincerely,
"French Luser"

Matthias Thumann

unread,
Jun 17, 2004, 12:03:49 PM6/17/04
to
Jason King wrote:

This is a good idea, perhaps there will be even more people interested in
getting this piece compiled.
I've tried to compile the kernel parts with the DRI rasm86 assembler, but
there are a lot of errors (BTW: this assembler doesn't work with WinXP due
to missing or incomplete FCB emulation, so I used one of my old Win95
boxes). Here's the listing of the command 'c:\work\rasm\rasm86 sup':

========SNIP========
--------------------------------------------------
RASM-86 Relocating Assembler Version 1.3
Serial No. 3156-0000-000937 All Rights Reserved
Copyright (C) 1982-1984 Digital Research, Inc.
--------------------------------------------------

END OF PASS 1
END OF PASS 2
** ERROR NO: 10 ** NEAR: "OWNER_8087" UNDEFINED ELEMENT OF EXPRESSION
=0080 909090909090 mov owner_8087,ax
** ERROR NO: 10 ** NEAR: "UD_PARAM" UNDEFINED ELEMENT OF EXPRESSION
=01A7 909090909090 mov ud_param,dx
** ERROR NO: 8 ILLEGAL INSTRUCTION OPERANDS
=021B 9090909090 callf dword ptr .netmod
RASM-86 1.3 SOURCE: SUP.A86
PAGE 36


** ERROR NO: 8 ILLEGAL INSTRUCTION OPERANDS
** ERROR NO: 11 ILLEGAL PSEUDO OPERAND
= org ((offset $)+1) AND 0fffeh
;Word Boundary
** ERROR NO: 10 ** NEAR: "CLIERR" UNDEFINED ELEMENT OF EXPRESSION
=042F 909090909090 mov clierr,0
** ERROR NO: 10 ** NEAR: "CLIERR" UNDEFINED ELEMENT OF EXPRESSION
=047B 909090909090 mov clierr,cx
** ERROR NO: 10 ** NEAR: "CLIERR" UNDEFINED ELEMENT OF EXPRESSION

[...]

CODE 01578
DATA 00C0D
EXTRA 0015E

END OF ASSEMBLY. NUMBER OF ERRORS: 20. USE FACTOR: 50%
========SNIP========

Either the buggy parts have to be changed manually, another version of the
DRI assembler is needed or the sources are incomplete. Perhaps the cpm
version of the assembler works?
cu
Matthias

Jason King

unread,
Jun 17, 2004, 1:03:04 PM6/17/04
to
I'm trying to build asm86 from source in the ccp/m31 source tree.
Having tried the asm pieces in both DRI rasm86 and Intel asm86 it
appears the Intel version is closer. I get about 6-7 errors from rasm86
and only one from Intel asm86.
My thought has been to try userland tools first and not try the kernel
parts until I've had some smaller successes.

Matthias Thumann wrote:
>
>
> This is a good idea, perhaps there will be even more people interested in
> getting this piece compiled.
> I've tried to compile the kernel parts with the DRI rasm86 assembler, but
> there are a lot of errors (BTW: this assembler doesn't work with WinXP due
> to missing or incomplete FCB emulation, so I used one of my old Win95
> boxes). Here's the listing of the command 'c:\work\rasm\rasm86 sup':
>
>

Matthias Thumann

unread,
Jun 18, 2004, 1:44:03 PM6/18/04
to
Jason King wrote:

> I'm trying to build asm86 from source in the ccp/m31 source tree.
> Having tried the asm pieces in both DRI rasm86 and Intel asm86 it
> appears the Intel version is closer. I get about 6-7 errors from rasm86
> and only one from Intel asm86.
> My thought has been to try userland tools first and not try the kernel
> parts until I've had some smaller successes.

I've written some makefiles to compile the utilities (still not complete).
They can be downloaded here: http://mitglied.lycos.de/Matthias_Thumann/cpm

Regards,
Matthias

Steve Dubrovich

unread,
Jun 18, 2004, 11:08:14 PM6/18/04
to
Jason King <jhk...@airmail.net> wrote in message news:<10d3jfj...@corp.supernews.com>...

> I'm trying to build asm86 from source in the ccp/m31 source tree.

Here's my approach on a win95 box.
Based on: ASM86.CPM command file:
$ !
$ ! Here (vaxmake.com) is the command file for building all of
$ ! DRI's ASM86 on the VAX. This file is set up to be SUBMITed.
$ !
$ set def [.cmsasm86]
$ assign nl: sys$print
$
$! Assign the Intel disk names and old crosscompiler tool names.
$ @oldintel
$!
$ oplm86 mainp.plm debug optimize(2) xref
$ oplm86 brexpr.plm debug optimize(2) xref
$ oplm86 cm.plm debug optimize(2) xref
$ oplm86 cm2.plm debug optimize(2) xref
$ oplm86 cmac1.plm debug optimize(2) xref
$ oplm86 cmac2.plm debug optimize(2) xref
$ oplm86 cmac3.plm debug optimize(2) xref
$ oplm86 cmac4.plm debug optimize(2) xref
$ oplm86 cmac5.plm debug optimize(2) xref
$ oplm86 cmsubr.plm debug optimize(2) xref
$ oplm86 dline.plm debug optimize(2) xref
$ oplm86 ermod.plm debug optimize(2) xref
$ oplm86 expr.plm debug optimize(2) xref
$ oplm86 files.plm debug optimize(2) xref
$ oplm86 global.plm debug optimize(2) xref
$ oplm86 instr.plm debug optimize(2) xref
$ oplm86 io.plm debug optimize(2) xref
$ oplm86 mnem1.plm debug optimize(2) xref
$ oplm86 mnem2.plm debug optimize(2) xref
$ oplm86 mnem3.plm debug optimize(2) xref
$ oplm86 mnem4.plm debug optimize(2) xref
$ oplm86 outp.plm debug optimize(2) xref
$ oplm86 predef.plm debug optimize(2) xref
$ oplm86 print.plm debug optimize(2) xref
$ oplm86 pseud1.plm debug optimize(2) xref
$ oplm86 pseud2.plm debug optimize(2) xref
$ oplm86 scan.plm debug optimize(2) xref
$ oplm86 subr1.plm debug optimize(2) xref
$ oplm86 subr2.plm debug optimize(2) xref
$ oplm86 symb.plm debug optimize(2) xref
$ oplm86 text.plm debug optimize(2) xref
$
$ oasm86 c86lnk.asm debug
$ !
$ olink86 cmac1.obj,cmac2.obj,cmac3.obj,cmac4.obj,cmac5.obj to f11.mod
$ olink86 mnem1.obj,mnem2.obj,mnem3.obj,mnem4.obj,symb.obj to f12.mod
$ olink86 io.obj,subr1.obj,subr2.obj,files.obj,scan.obj to f13.mod
$ olink86 print.obj,predef.obj,ermod.obj,text.obj,outp.obj to f14.mod
$ olink86 expr.obj,brexpr.obj,pseud1.obj,pseud2.obj,cmsubr.obj to
f15.mod
$ olink86 instr.obj,dline.obj,global.obj,cm.obj,cm2.obj to f16.mod
$ olink86 f11.mod,f12.mod,f13.mod to f21.mod
$ olink86 f14.mod,f15.mod,f16.mod to f22.mod
$ olink86 c86lnk.obj,mainp.obj,f21.mod,f22.mod,plm86.lib to asm86.mod
$ oloc86 asm86.mod to asm86.abs ad(sm(code(0)))
od(sm(code,const,stack))
$ oh86 asm86.abs
$!
$! search for the starts of the CONST and MEMORY segments...
$ search asm86.mp2 "G CONST","G MEMORY"
$!
$! Do the rest on CP/M:
$!
$! Determine BBB, MMM and NNN from asm86.mp2 (from the output from
$! the search command):
$! BBB = start of const segment / 16
$! MMM = start of memory segment / 16
$! Then NNN = (MMM - BBB) + 100h
$! (100h leaves 4K bytes of space for the symbol table)
$! gencmd asm86 data[bBBB,mNNN,xFFF]
$! An example:
$! gencmd asm86 data[b4AD,m44E,xFFF]

My conversion of the above using intel tools and batch files:

buildor1.bat -
plm86 mainp.plm debug optimize(2) xref
plm86 brexpr.plm debug optimize(2) xref
plm86 cm.plm debug optimize(2) xref
plm86 cm2.plm debug optimize(2) xref
plm86 cmac1.plm debug optimize(2) xref
plm86 cmac2.plm debug optimize(2) xref
plm86 cmac3.plm debug optimize(2) xref
plm86 cmac4.plm debug optimize(2) xref
plm86 cmac5.plm debug optimize(2) xref
plm86 cmsubr.plm debug optimize(2) xref
plm86 dline.plm debug optimize(2) xref
plm86 ermod.plm debug optimize(2) xref
plm86 expr.plm debug optimize(2) xref
plm86 files.plm debug optimize(2) xref
plm86 global.plm debug optimize(2) xref
plm86 instr.plm debug optimize(2) xref
plm86 io.plm debug optimize(2) xref
plm86 mnem1.plm debug optimize(2) xref
plm86 mnem2.plm debug optimize(2) xref
plm86 mnem3.plm debug optimize(2) xref
plm86 mnem4.plm debug optimize(2) xref
plm86 outp.plm debug optimize(2) xref
plm86 predef.plm debug optimize(2) xref
plm86 print.plm debug optimize(2) xref
plm86 pseud1.plm debug optimize(2) xref
plm86 pseud2.plm debug optimize(2) xref
plm86 scan.plm debug optimize(2) xref
plm86 subr1.plm debug optimize(2) xref
plm86 subr2.plm debug optimize(2) xref
plm86 symb.plm debug optimize(2) xref
plm86 text.plm debug optimize(2) xref

buildor2.bat -
asm86 c86lnk.asm debug

buildor3.bat -
link86 cmac1.obj,cmac2.obj,cmac3.obj,cmac4.obj,cmac5.obj to f11.mod
link86 mnem1.obj,mnem2.obj,mnem3.obj,mnem4.obj,symb.obj to f12.mod
link86 io.obj,subr1.obj,subr2.obj,files.obj,scan.obj to f13.mod
link86 print.obj,predef.obj,ermod.obj,text.obj,outp.obj to f14.mod
link86 expr.obj,brexpr.obj,pseud1.obj,pseud2.obj,cmsubr.obj to f15.mod
link86 instr.obj,dline.obj,global.obj,cm.obj,cm2.obj to f16.mod

buildor4.bat -
link86 f11.mod,f12.mod,f13.mod to f21.mod
link86 f14.mod,f15.mod,f16.mod to f22.mod

buildor5.bat -
rem link86 c86lnk.obj,mainp.obj,f21.mod,f22.mod,plm86.lib to asm86.mod
link86 c86lnk.obj,mainp.obj,f21.mod,f22.mod to asm86.mod

buildor6.bat -
loc86 asm86.mod to asm86.abs ad(sm(code(0))) od(sm(code,const,stack))

buildor7.bat -
oh86 asm86.abs ;;produces asm86.h86, I moved this to the BUILDIT
subdir

-shortcut to CPM86 emulator-
G:\CCPM2DEV\BUILDIT\CPM.EXE gencmd asm86 data[b490,m450,xFFF]
;; I renamed asm86.cmd to asm86t.cmd to avoid confusing with the
original
;;asm86.cmd, and tested it lightly on some source thru the cpm86
emulator.

;;I used the batch files as a way to step through the process. That
way errors
;; were manageable clues to required source editing.
;;As an example of the required editing of the source's include stmts:

Change in mainp.plm:
$include (:f1:macro.lit)
$include (:f1:struc.lit)
$include (:f1:equals.lit)
$include (:f1:dev.lit)
$include (:f1:ermod.lit)
$include (:f1:subr2.ext)
$include (:f1:io.ext)
$include (:f1:files.ext)
$include (:f1:outp.ext)
$include (:f1:scan.ext)
$include (:f1:print.ext)
$include (:f1:symb.ext)
$include (:f1:ermod.ext)
$include (:f1:mglob.ext)
$include (:f1:text.ext)
$include (:f1:dline.ext)

to:
$include (macro.lit)
$include (struc.lit)
$include (equals.lit)
$include (dev.lit)
$include (ermod.lit)
$include (subr2.ext)
$include (io.ext)
$include (files.ext)
$include (outp.ext)
$include (scan.ext)
$include (print.ext)
$include (symb.ext)
$include (ermod.ext)
$include (mglob.ext)
$include (text.ext)
$include (dline.ext)

etc... this will give you some ideas of what is involved.

Take Note-
I also have 'FCB's unavailable' errors under Win98 and XP when using
the cpm86 emulator to build asm86-gencmd stuff. These go away if done
on a bootable diskette, and booting up under the bootable diskette.

Matthias Thumann

unread,
Jun 19, 2004, 9:12:32 AM6/19/04
to
Steve Dubrovich wrote:
[compiling asm86]

OK, I've just created a makefile for ASM86, that can be downloaded here:
http://mitglied.lycos.de/Matthias_Thumann/cpm. Here's my memory map of
asm86:
==========SNIP==========
[...]
MEMORY MAP OF MODULE ANONYMOUS

MODULE START ADDRESS PARAGRAPH = 066CH OFFSET = 0006H
SEGMENT MAP

START STOP LENGTH ALIGN NAME CLASS OVERLAY

00000H 048FAH 48FBH G CODE CODE
04900H 06421H 1B22H G CONST CONST
06422H 066B5H 0294H W STACK STACK
066C0H 066D8H 0019H G ??LOC86_INITCO CODE
-DE
066E0H 066E0H 0000H G ??SEG
066E0H 07DF6H 1717H G DATA DATA
07E00H 07E00H 0000H G MEMORY MEMORY

GROUP MAP

ADDRESS GROUP OR SEGMENT NAME
04900H DGROUP
CONST
DATA
STACK
MEMORY
00000H CGROUP
CODE
==========SNIP==========
Do you have the same one? BTW: What CPM emulator do you use?

cu
Matthias

Jason King

unread,
Jun 19, 2004, 10:25:23 AM6/19/04
to
Playing around with the sources in d8 (Utilities, IBM PC Boot) I've
determined a few quirks about the assembler they were using.
1) It ignores _ in names, so to that assembler biosoffset and
bios_offset are the same identifier. That affects these identifiers in
lbdos.a86:
bdo_entry bdoentry
bios_offset biosoffset
blk_off blkoff
btab_flag btabflag
comp_ext compext
cur_dma curdma
cur_dmabase curdmabase
disk_read diskread
end_of_dir endofdir
get_dm getdm
MULT_NUM MULTNUM
save_sp savesp
set_fcb setfcb
set_lret1 setlret1
SRCH_LOOP SRCHLOOP

2) Identifiers are only checked to 8 positions. These identifiers are
affected in lbdos.a86
search_name search_n

After making those changes lbdos.a86 drops from 30 to 7 errors.
The 9 errors seem to fall into three groups:


Instruction operands
** ERROR NO: 8 ** NEAR: "+" ILLEGAL INSTRUCTION OPERANDS
0066 909090909090 mov si,offset bdofunc+0
** ERROR NO: 8 ** NEAR: "+" ILLEGAL INSTRUCTION OPERANDS
0074 909090909090 mov si,offset bdofunc+3
** ERROR NO: 8 ** NEAR: "+" ILLEGAL INSTRUCTION OPERANDS
0082 909090909090 mov si,offset bdofunc+6

If I remove the offset then those assemble cleanly but I'm not sure if
I've changed the meaning of the insturction by doing that.

ORG errors
07AF endcode equ offset $
dseg
; Variables in data segment:

0123 startpat equ offset $

cseg


** ERROR NO: 11 ILLEGAL PSEUDO OPERAND

org startpat

These both look like they're trying to make sure the DSEG code starts at
the next memory location after the CSEG code ends, which makes sense for
an 8080 (small) model program, but how do I tell rasm86 that?

Complicated ORG


** ERROR NO: 11 ILLEGAL PSEUDO OPERAND

org endcode

** ERROR NO: 11 ILLEGAL PSEUDO OPERAND

org ((offset $) + 1) and 0fffeh

** ERROR NO: 11 ILLEGAL PSEUDO OPERAND

org ((offset $) + 1) and 0fffeh

I think they're trying to word align something here, but I'm not sure.

Any thoughts or suggestions on how to remove these last few errors would
be appreciated.

I am working on some awk scripts to automate fixing the $INCLUDE
references in the plm files, will likely do more scipts to fix the
naming issues described above.


Randy McLaughlin

unread,
Jun 19, 2004, 5:25:22 PM6/19/04
to
"Matthias Thumann" <NoSpamMails_M...@gmx.de> wrote in message
news:cb1e3s$3d0$04$1...@news.t-online.com...

> Steve Dubrovich wrote:
> [compiling asm86]
>
> OK, I've just created a makefile for ASM86, that can be downloaded here:
> http://mitglied.lycos.de/Matthias_Thumann/cpm. Here's my memory map of
> asm86:
<snip>
> cu
> Matthias


I am glad to see people working on this project. I intended to do it myself
when I donated the source, but I have been too tied up.

Keep us all informed on the progress.


Randy


Steve Dubrovich

unread,
Jun 19, 2004, 9:56:03 PM6/19/04
to
"Matthias Thumann" <NoSpamMails_M...@gmx.de> wrote in message news:<cb1e3s$3d0$04$1...@news.t-online.com>...

The Intel Linker Link86 V2.7 -- asm86.mp1 :=

DOS 7.10 (038-N) 8086 LINKER, V2.7

INPUT FILES: C86LNK.OBJ, MAINP.OBJ, F21.MOD, F22.MOD
OUTPUT FILE: ASM86.MOD
CONTROLS SPECIFIED IN INVOCATION COMMAND:
DATE: 12/21/:3 TIME: 08:52:58

WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: ASM86TEXT
WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: CLOSEERRTEXT
WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: DISKREADERRTEXT
WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: DISKWRITEERRTXT
WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: ENDTEXT
WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: MAKEERRTEXT
WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: OPENERRTEXT
WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: PARERRTEXT
WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: PASS0TEXT
WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: PASS1TEXT
WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: SYMBFULLERRTEXT
WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: USBREAKTEXT
WARNING 9: TYPE MISMATCH
FILE: F22.MOD
MODULE: PRINT
SYMBOL: USEFACTOR

LINK MAP OF MODULE ANONYMOUS

LOGICAL SEGMENTS INCLUDED:
LENGTH ADDRESS ALIGN SEGMENT CLASS OVERLAY
0000H ------ G ??SEG
48FBH ------ G CODE CODE
1B22H ------ G CONST CONST
1717H ------ G DATA DATA
0294H ------ W STACK STACK
0000H ------ G MEMORY MEMORY

INPUT MODULES INCLUDED:
C86LNK.OBJ(ANONYMOUS)
MAINP.OBJ(MAINP)
F21.MOD(CMAC1)
F22.MOD(PRINT)

------
CP/M-86 emulator for DOS vers 1.3 - 11/30/97
Copyright (c) 1985, 1997 Jim Lopushinsky

-----

Steve Dubrovich

unread,
Jun 19, 2004, 10:07:35 PM6/19/04
to
"Matthias Thumann" <NoSpamMails_M...@gmx.de> wrote in message news:<cb1e3s$3d0$04$1...@news.t-online.com>...

I should clarify-

DOS 7.10 (038-N) 8086 LINKER, V2.7

Copyright 1984 Intel Corporation

Also from asm86.mp ::=

DOS 7.10 (038-N) 8086 LOCATER, V2.5

INPUT FILE: ASM86.MOD
OUTPUT FILE: ASM86.ABS


CONTROLS SPECIFIED IN INVOCATION COMMAND:

TO ASM86.ABS AD(SM(CODE(0))) OD(SM(
CODE,CONST,STACK))

DATE: 12/21/:3 TIME: 08:53:39

[snipped alot]

Steve Dubrovich

unread,
Jun 19, 2004, 10:48:55 PM6/19/04
to
Jason King <jhk...@airmail.net> wrote in message news:<10d8ivo...@corp.supernews.com>...

> Playing around with the sources in d8 (Utilities, IBM PC Boot) I've
> determined a few quirks about the assembler they were using.

This is an asm86.cmd 'feature' it drops the underscore and dollar sign
in identifiers, _also_ asm86 holds longer identifiers significant to
.GT. 8 characters[32 IIRC], whereas rasm86 identifiers are only
significant to 8.

This looks like it was built with DRI's asm86.[cmd] the goal here is
to get to lbdos.h86 which combines with load.a86 ::=

title 'CCP/M-86 Loader Program and BIOS'
;*****************************************************
; The Loader consists of the three modules:
; Loader BDOS (the file LBDOS.H86), the Loader
; Program and the Loader BIOS. This
; module contains both the Loader Program
; and the Loader BIOS.
;
; The Loader resides in sectors 2-8 on the first track
; of an IBM PC floppy diskette. The Loader is
; is brought into memory by the Boot Sector which
; resides in sector 1 of track 0. The Boot Sector
; is brought into memory by the IBM PC's ROM
; monitor.
;
; The Loader Program opens the file 'CCPM.SYS' using the
; Loader BDOS and Loader BIOS,
; and then reads it into memory. The DS register is set
; to the start of the CCPM DATA area, and a JMPF to the
; first byte of the CCPM code is executed.
;
[snip]

Jason King

unread,
Jun 20, 2004, 9:56:15 PM6/20/04
to
Ah ha! Now I have some clue (but not much).
If I use asm86 version 1.1 instead of version 1.0, boot.a86, lbdos.a86
and load.a86 all assemble cleanly. boot.a86 builds with
gencmd boot 8080 as per the instructions.
From its name and the fact that boot.a86 is designed to be 512 bytes
I'd assume it was the boot-loader. I am confused as I thought boot
sectors had to end in hex 55 AA and this one doesn't. I'm also unclear
on how to get from boot.cmd (768 bytes) to a boot sector (512 bytes). I
tried sid86 wjunk.sys,0000,02ff or sid86 wjunk.sys,0000,02ff I get junk.

Bettykate

unread,
Jun 20, 2004, 10:16:50 PM6/20/04
to

Older DR bootloaders lack those bytes. (Even DOSPLUS 1.2, from 1986,
lacked them.)

-uso.

Steve Dubrovich

unread,
Jun 21, 2004, 7:06:26 AM6/21/04
to
Jason King <jhk...@airmail.net> wrote in message news:<10dcfqs...@corp.supernews.com>...

Can you 'cut & paste' a sid.exe dump of boot.a86, so I can take a look
at it here? I'll get back to you on other details.

Jason King

unread,
Jun 21, 2004, 8:06:25 AM6/21/04
to
Here's the dump:
I'd suspect I'm doing something wrong, the .lst shows the bytes and
the code starts:
CD12 int 12H ;get memory size
3DA000 cmp ax,min_mem
7302 0009 jnb get_track_0
EB1B 0024 jmps mem_error
I'd expect to find all those bytes in boot.cmd, but I don't.
What I'm doing is:
cpm86 asm86 boot.a86
cpm86 gencmd boot.a86 8080
to produce boot.cmd.

------------------------------------------------------
*** 8086 Symbolic Instruction Debugger *** Release 3.0
All Rights Reserved
Copyright (c) 1983, 84, 85, 88 Digital Research, Inc.
------------------------------------------------------

Start End
9DEB:0000 9DEB:02FF
#-d768

#d

147F:0000 CD 20 FF 9D 00 9A F0 FE 1D F0 24 01 D7 0D 37 01 . ........$...7.
147F:0010 D7 0D 56 01 11 04 11 04 01 03 01 00 02 FF FF FF ..V.............
147F:0020 FF FF FF FF FF FF FF FF FF FF FF FF 86 0D AC 14 ................
147F:0030 ED 11 14 00 18 00 7F 14 FF FF FF FF 00 00 00 00 ................
147F:0040 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0050 CD 21 CB 00 00 00 00 00 00 00 00 00 00 20 20 20 .!...........
147F:0060 20 20 20 20 20 20 20 20 00 00 00 00 00 20 20 20 .....
147F:0070 20 20 20 20 20 20 20 20 00 00 00 00 00 00 00 00 ........
147F:0080 01 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 . ..............
147F:0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:00A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:00B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:00C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:00D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:00E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:00F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:01A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:01B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:01C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:01D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:01E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:01F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0270 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0290 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:02A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:02B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:02C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:02D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:02E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:02F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0310 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0330 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0350 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0370 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0390 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:03A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:03B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:03C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:03D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:03E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:03F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0410 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0450 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0470 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0490 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:04A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:04B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:04C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:04D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:04E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:04F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0510 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0530 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0550 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0570 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0590 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:05A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:05B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:05C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:05D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:05E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:05F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0610 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0630 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0650 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0670 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0690 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:06A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:06B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:06C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:06D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:06E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:06F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0710 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0730 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0750 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
147F:0760 00 00 00 00 00 00 00 00 00 .........
#q

Randy McLaughlin

unread,
Jun 21, 2004, 8:10:25 AM6/21/04
to
"Jason King" <jhk...@airmail.net> wrote in message
news:10ddjis...@corp.supernews.com...

> Here's the dump:
> I'd suspect I'm doing something wrong, the .lst shows the bytes and
> the code starts:
> CD12 int 12H ;get memory size
> 3DA000 cmp ax,min_mem
> 7302 0009 jnb get_track_0
> EB1B 0024 jmps mem_error
> I'd expect to find all those bytes in boot.cmd, but I don't.
> What I'm doing is:
> cpm86 asm86 boot.a86
> cpm86 gencmd boot.a86 8080
> to produce boot.cmd.
>
> ------------------------------------------------------
> *** 8086 Symbolic Instruction Debugger *** Release 3.0
> All Rights Reserved
> Copyright (c) 1983, 84, 85, 88 Digital Research, Inc.
> ------------------------------------------------------
>
> Start End
> 9DEB:0000 9DEB:02FF
> #-d768
>
> #d
>
> 147F:0000 CD 20 FF 9D 00 9A F0 FE 1D F0 24 01 D7 0D 37 01 . ........$...7.
<snip>

SID is loading the data into the CS segment (9DEB) and you are dumping the
DS segment (147F).

Try dumping 9deb:0000 02FF

Randy


Randy McLaughlin

unread,
Jun 21, 2004, 8:13:50 AM6/21/04
to
"Randy McLaughlin" <rand...@nospam.com> wrote in message
news:LbABc.37$vf5...@bignews6.bellsouth.net...

> "Jason King" <jhk...@airmail.net> wrote in message
> news:10ddjis...@corp.supernews.com...
<snip>

I forgot to mention that CMD files always have a header, the 512 bytes you
are looking for come after the 128 byte header (the last 512 bytes).


Randy


Matthias Thumann

unread,
Jun 21, 2004, 2:48:31 PM6/21/04
to
Jason King wrote:

> I'd assume it was the boot-loader. I am confused as I thought boot
> sectors had to end in hex 55 AA and this one doesn't. I'm also unclear

I was wondering about that, too, because most bioses won't load such a boot
loader. So we probably have to change this...
I've just uploaded my new makefiles to
http://mitglied.lycos.de/Matthias_Thumann/cpm for the CP/M-86 emulator to
generate the cmd files and to compile the C programs. 'genccpm' compiles
without any problems, so putting a working kernel together should be no
problem, if we get the kernel modules compiled.
Please have a look at the list with the missing tools on my site; perhaps
someone knows how to compile the rest.

Regards,
Matthias

Steve Dubrovich

unread,
Jun 21, 2004, 7:42:53 PM6/21/04
to
Jason King <jhk...@airmail.net> wrote in message news:<10ddjis...@corp.supernews.com>...

> Here's the dump:
> I'd suspect I'm doing something wrong, the .lst shows the bytes and
> the code starts:
> CD12 int 12H ;get memory size
> 3DA000 cmp ax,min_mem
> 7302 0009 jnb get_track_0
> EB1B 0024 jmps mem_error
> I'd expect to find all those bytes in boot.cmd, but I don't.

As Randy points out, you're dumping the wrong segment.

They are there, but SID86 requires you to tell it the 20-bit starting
address for the dump in the form of Dssss:oooo,eeee ::= ssss is
segment,9DEBh | oooo is offset, 0000h | eeee is ending offset, 02FFh.
The Values are from what Sid shows you with the Start & End message,
the current load location map. If there are additional segments, say
for Stack, Eseg, Dseg, X1, X2, X3, X4, their segment Start/End are
listed also, each on a new line. This aside on Sid is useful. For
one thing, the SID.EXE version can read and write boot sectors.



> What I'm doing is:
> cpm86 asm86 boot.a86
> cpm86 gencmd boot.a86 8080
> to produce boot.cmd.
>
> ------------------------------------------------------
> *** 8086 Symbolic Instruction Debugger *** Release 3.0
> All Rights Reserved
> Copyright (c) 1983, 84, 85, 88 Digital Research, Inc.
> ------------------------------------------------------
>
> Start End
> 9DEB:0000 9DEB:02FF
> #-d768
>
> #d

[snip]

Here is what I get:
--------------------------------------------------
*** Symbolic Instruction Debugger *** Release 3.2
Copyright (c) 1983,1984,1985,1988,1990,1991
Digital Research, Inc. All Rights Reserved
--------------------------------------------------

#rboot.cmd
Start End
13FD:0000 13FD:02FF
#d13fd:0
13FD:0000 01 20 00 00 00 20 00 00 00 00 00 00 00 00 00 00 . ...
..........
13FD:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0080 CD 12 3D A0 00 73 02 EB 1B 33 DB B8 00 26 8E C0
..=..s...3...&..
13FD:0090 B8 08 02 B9 01 00 BA 00 00 CD 13 73 02 EB 0D EA
...........s....
13FD:00A0 00 00 20 26 B9 24 00 BE 50 00 EB 06 B9 15 00 BE ..
&.$..P.......
13FD:00B0 74 00 B8 00 B0 CD 11 24 30 3C 30 74 03 B8 00 B8
t......$0<0t....
#d
13FD:00C0 8E C0 8C C8 8E D8 33 FF B4 07 AC AB E2 FC FA F4
......3.........
13FD:00D0 4E 6F 74 20 65 6E 6F 75 67 68 20 6D 65 6D 6F 72 Not enough
memor
13FD:00E0 79 20 70 72 65 73 65 6E 74 20 66 6F 72 20 6C 6F y present
for lo
13FD:00F0 61 64 65 72 43 61 6E 27 74 20 72 65 61 64 20 62 aderCan't
read b
13FD:0100 6F 6F 74 20 74 72 61 63 6B 00 00 00 00 00 00 00 oot
track.......
13FD:0110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
#
#d
13FD:0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:01A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:01B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:01C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:01D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:01E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:01F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
#d
13FD:0240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0270 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:0290 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:02A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:02B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:02C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:02D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:02E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
13FD:02F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
................
#

The first bytes, 0000 to 0007Fh are the CMD Header, this header is
stripped off by the Program Loader. It contains info the Loader needs
to place the program into a 'CPM86 workspace' and also, info the
loader will normally use to initialize the programs' data page zero.
Subtracting the 80h Header, it can be seen that Gencmd has added 80h
more bytes than needed to the file as it should be 200h bytes long
without the header record. I don't know why that is. I do see that
there are 2 cseg directives in the source, perhaps this is a related
cause. Also, the 8080 Flag in the Header is _not_ set.

> tried sid86 wjunk.sys,0000,02ff or sid86 wjunk.sys,0000,02ff I get junk.

This is because '0000' needs to be replaced with the segment:offset,
you've written to file from some default segment, by not specifying a
intended segment.

> From its name and the fact that boot.a86 is designed to be 512 bytes
> I'd assume it was the boot-loader. I am confused as I thought boot
> sectors had to end in hex 55 AA and this one doesn't.

No, the Rom Bios is rote[dumb] about this, at least booting from a
diskette. However, as an exercise, change the source:
org 512 - 2 ;force even sector size
db 55h,0AAh
It would be easier to spot the actual end of program.

>I'm also unclear
> on how to get from boot.cmd (768 bytes) to a boot sector (512 bytes).

There is a utility to place this on a diskette's Track0 perhaps that
utility is smart about this.

-A comment on how the code works-
This boot code is read into 0000:7C00h by the RomBios and control is
passed to it. This boot code reads in a secondary loader, Part B,
residng on sector 2, and which is 8 sectors long, according to this
source. This boot source code is Part A of a 2 stage loader. Part B
is the part which loads CCP/M-86 i.e. ccpm.sys into it's system
segment, 0060:0000h - This 'absolute load segment' field value is
found in ccpm.sys' header record.

Part B is: LOAD.A86


title 'CCP/M-86 Loader Program and BIOS'
;*****************************************************
; The Loader consists of the three modules:
; Loader BDOS (the file LBDOS.H86), the Loader
; Program and the Loader BIOS. This
; module contains both the Loader Program
; and the Loader BIOS.
;
; The Loader resides in sectors 2-8 on the first track
; of an IBM PC floppy diskette. The Loader is
; is brought into memory by the Boot Sector which
; resides in sector 1 of track 0. The Boot Sector
; is brought into memory by the IBM PC's ROM
; monitor.
;
; The Loader Program opens the file 'CCPM.SYS' using the
; Loader BDOS and Loader BIOS,
; and then reads it into memory. The DS register is set
; to the start of the CCPM DATA area, and a JMPF to the
; first byte of the CCPM code is executed.

etc.

If you look at the BOOT.LST file and lookup the mem_msg offset,
@0050h, then check the referencing instruction:

0027 BE5000 mov si,offset mem_msg
|
This | offset is not adjusted [not written for] for the IBM PC's
RomBios load address offset of :7C00h , so this won't work properly as
is, it is suspect. [The proper offset would be 7C50h.]

-eom-

Jason King

unread,
Jun 21, 2004, 9:48:32 PM6/21/04
to
Software spelunking can be fun!
Once I used the right segment (what sid86 told me the start was) and the
proper offset (80h) everything came together wonderfully.
My concern at this point is getting a system that will boot off a 1.4meg
(or even 720k) floppy.
The boot loaders I've looked at (including Freek's for cpm144 have disk
parameter blocks embedded in them. The ccpm boot loader appears not to.
I'm guessing that using the source as-is I'll have to boot from a 360k 5
1/4 floppy. Does anybody know for sure?
The path I'm tempted to follow at this point is to use Freek's code as
the boot loader but I'm not sure how much that's going to change
load.a86 and lbdos.a86.
Straighten me out if I'm wrong, but it looks to me like the system
initializes as follows:
1) binary file from boot.a86 loaded from track 0, sectors 1-2.
2) boot.a86 loads the rest of the boot system (load.a86+lbdos.a86) from
tracks 2-8. load.a86 + lbdos.a86 should be raw binaries not .cmd files
as well.
3) load.a86 loads ccpm.sys which is also a raw binary.

Randy McLaughlin

unread,
Jun 21, 2004, 9:59:49 PM6/21/04
to
"Jason King" <jhk...@airmail.net> wrote in message
news:10df3o9...@corp.supernews.com...

> Software spelunking can be fun!
> Once I used the right segment (what sid86 told me the start was) and the
> proper offset (80h) everything came together wonderfully.
> My concern at this point is getting a system that will boot off a 1.4meg
> (or even 720k) floppy.
> The boot loaders I've looked at (including Freek's for cpm144 have disk
> parameter blocks embedded in them. The ccpm boot loader appears not to.
> I'm guessing that using the source as-is I'll have to boot from a 360k 5
> 1/4 floppy. Does anybody know for sure?
> The path I'm tempted to follow at this point is to use Freek's code as
> the boot loader but I'm not sure how much that's going to change
> load.a86 and lbdos.a86.
> Straighten me out if I'm wrong, but it looks to me like the system
> initializes as follows:
> 1) binary file from boot.a86 loaded from track 0, sectors 1-2.
> 2) boot.a86 loads the rest of the boot system (load.a86+lbdos.a86) from
> tracks 2-8. load.a86 + lbdos.a86 should be raw binaries not .cmd files
> as well.
> 3) load.a86 loads ccpm.sys which is also a raw binary.
>
> Matthias Thumann wrote:
<snip>

Use the keep it simple rule: a 1.44mb rive will handle 720K media which can
be formatted as 360K. A 720K disk works fine as long as you: Using Win98
or earlier use the command line format utility to format the 720K media as a
360K disk.

I would just work on getting it to boot first, add features to a working
system!.

If you can you should pick up an 8088 based machine to try it on (usually
$5-$10 at thrift shops). 8088 based machines with a DD controller will work
fine with a 1.44mb drive (but it will only handle up to 720K).

Randy


Steve Dubrovich

unread,
Jun 25, 2004, 11:06:43 PM6/25/04
to
Jason King <jhk...@airmail.net> wrote in message news:<10df3o9...@corp.supernews.com>...

> Software spelunking can be fun!
> Once I used the right segment (what sid86 told me the start was) and the
> proper offset (80h) everything came together wonderfully.
> My concern at this point is getting a system that will boot off a 1.4meg
> (or even 720k) floppy.
> The boot loaders I've looked at (including Freek's for cpm144 have disk
> parameter blocks embedded in them.

Freek adopted the floppy disk p.b. to trick dos into leaving the 3
1/2" diskette alone, a John Elliott suggestion.
It is not used by cp/m-86 either. The last byte of the 512byte sector
is a media flag however. This is also the scheme in the original
cp/m86 320, 160k formats.

An Alternate, which I have tried, is to use null fields. msDos issues
a warning to the effect that the disk is unformatted, but otherwise
leaves the diskette alone, and similarly does windows, but asks if you
want to format it. [just don't]. Ctrl-Alt-Del launches the boot code
from the floppy, if in A:.

I can pass along my crude test code if you want it. It builds with
asm86 & gencmd. I used sid.exe to place it on sector 1 of track 0 on
a 3 1/2 floppy. It just reports what is in some registers at boot
time, then waits for a keypress to reboot itself.

> The ccpm boot loader appears not to.

It doesn't because it 'knows' what the disk structure is that is was
built for.

> I'm guessing that using the source as-is I'll have to boot from a 360k 5
> 1/4 floppy. Does anybody know for sure?

Yes, the way the source is now.

> The path I'm tempted to follow at this point is to use Freek's code as
> the boot loader but I'm not sure how much that's going to change
> load.a86 and lbdos.a86.

It will not only change that but also the disk tables need to be
changed for the OS source also. One of the standout attributes of the
DRI OS's is that they are not self-configurable, but are built for
specific hardware footprints. For example, generic cp/m-86 supports
16 drives yet for the ibm-pc, there is support for just 4, you can't
support more without rebuilding the OS.

> Straighten me out if I'm wrong, but it looks to me like the system
> initializes as follows:
> 1) binary file from boot.a86 loaded from track 0, sectors 1-2.

Just sector 1, the Rombios only loads the first sector(1) from the
first track(0) from the first head.

> 2) boot.a86 loads the rest of the boot system (load.a86+lbdos.a86) from
> tracks 2-8. load.a86 + lbdos.a86 should be raw binaries not .cmd files
> as well.

Yes, well 8 sectors starting from 2, as I see it, 2 thru 9, a 360K
diskette, yes?

> 3) load.a86 loads ccpm.sys which is also a raw binary.

No. ccpm.sys has the header record, which includes the absolute load
segment. {I think in the source it is for 0040:0000h which will not
work, because on the ibm that is the rombios data area, for cp/m-86 it
is changed from the generic [40] to [51], but [60] is the better place
as that is what the hard drive boot loaders use as the destination
segment}. ccpm.sys resides in the data area beyond the disk
directory. So the disk structure has to known by load.a86 to find it.

Steve Dubrovich

unread,
Jun 26, 2004, 4:19:37 PM6/26/04
to
"Matthias Thumann" <NoSpamMails_M...@gmx.de> wrote in message news:<cb7agt$86k$02$1...@news.t-online.com>...

Thanks for the make files. BTW, the Intel pl/m compiler has the
directive $code - this causes a pseudo-assembler listing to be
generated as part of the listing file. This might also be an avenue
for code conversion.

Re: Missing tools--
/d7/ass86.plm : - " - why another assembler? -This is the
assembler module for DDT86
/d7/dis86.plm : - " - -This is the disassembler module for
DDT86

----

Randy McLaughlin

unread,
Jun 26, 2004, 4:30:14 PM6/26/04
to
"Steve Dubrovich" <s_dub...@yahoo.com> wrote in message
news:3fddc08d.04062...@posting.google.com...

> "Matthias Thumann" <NoSpamMails_M...@gmx.de> wrote in message
news:<cb7agt$86k$02$1...@news.t-online.com>...
<snip>

> Thanks for the make files. BTW, the Intel pl/m compiler has the
> directive $code - this causes a pseudo-assembler listing to be
> generated as part of the listing file. This might also be an avenue
> for code conversion.
>
> Re: Missing tools--
> /d7/ass86.plm : - " - why another assembler? -This is the
> assembler module for DDT86
> /d7/dis86.plm : - " - -This is the disassembler module for
> DDT86

I for one am glad to see progress being made. Keep us all informed.

What you are doing also applies directly to CCP/M v2 & MP/M-86.

It would be nice to have make trees for all of the DRI OS's.

I still have some pieces to MP/M-86 v2.1 source that I need to transfer off
8" disks and send to Gaby. Unfortunately it is not the entire set, just
pieces.

Has anyone found the CP/M-86 sources? I know that there is a disassembled
source out there that we can live with but it would be nice to find the
original source.

As far as I know the sources are available for almost all of the OS's up to
CCP/M v3.1, DR-DOS is also available in source.


Randy


Steve Dubrovich

unread,
Jun 26, 2004, 11:58:21 PM6/26/04
to
"Randy McLaughlin" <rand...@nospam.com> wrote in message news:<a_kDc.3263$i14....@bignews6.bellsouth.net>...
D1 \
D2 } kernel, compile with rasm86 -> errors
D3 /
"
Rasm86 is used for BDOS.a86 only. sysdat,sup,rtm,mem,cio,pcxios.a86
all build with asm86. I just assembled all of these cleanly except
BDOS.a86, it gives an undefined identifier re: u_nameitem which
pertains to code relating to recordlocking. See File3.bdo, it
pertains to some field in the UDA, which isn't there, or named like
that. I don't understand the code that well to form an opinion as to
what to do about it, and I'm out of time to work at it for a week or
so... it is the last straw to stuff in the mattress, since genccpm has
been rebuilt, to try building ccpm86.

Matthias Thumann

unread,
Jun 27, 2004, 7:27:32 AM6/27/04
to
Steve Dubrovich wrote:

> /d7/ass86.plm : - " - why another assembler? -This is the
> assembler module for DDT86
> /d7/dis86.plm : - " - -This is the disassembler module for
> DDT86

OK, thanks, I didn't know these PLM files are modules for DDT86. Anyone
knows how to link the parts of DDT86?

> It would be nice to have make trees for all of the DRI OS's.

That's right, would be really great. But at first, we have to finish CCP/M
3.1 ...

> Has anyone found the CP/M-86 sources? I know that there is a disassembled
> source out there that we can live with but it would be nice to find the
> original source.

Do the disassembled sources compile correctly? And are there any sources for
the tools?
Someone wrote me an email that he made a working kernel out of the sources
for CP/M-86 1.1 on Gaby's site. If you want to I could ask him if I may give
his e-mail adress to you.

> Rasm86 is used for BDOS.a86 only. sysdat,sup,rtm,mem,cio,pcxios.a86
> all build with asm86. I just assembled all of these cleanly except
> BDOS.a86, it gives an undefined identifier re: u_nameitem which
> pertains to code relating to recordlocking. See File3.bdo, it
> pertains to some field in the UDA, which isn't there, or named like
> that. I don't understand the code that well to form an opinion as to
> what to do about it, and I'm out of time to work at it for a week or
> so... it is the last straw to stuff in the mattress, since genccpm has
> been rebuilt, to try building ccpm86.

I'll write some makefiles for the kernel, but at the moment I don't have
much time, so this can last up to one or two weeks ...

Matthias


Steve Dubrovich

unread,
Jun 27, 2004, 4:19:49 PM6/27/04
to
"Randy McLaughlin" <rand...@nospam.com> wrote in message news:<a_kDc.3263$i14....@bignews6.bellsouth.net>...

> What you are doing also applies directly to CCP/M v2 & MP/M-86.


>
> It would be nice to have make trees for all of the DRI OS's.
>
> I still have some pieces to MP/M-86 v2.1 source that I need to transfer off
> 8" disks and send to Gaby. Unfortunately it is not the entire set, just
> pieces.
>

Please do so. For example, ddt-86 v1.2 is the distributed version,
but the sources available are for v1.1, that is, until the most
recently posted mp/m-86 sources to Gaby's site, which has the source
for v1.2 in it.(!) Each of these other sources have something to
contribute, if only for comparison.

Steve Dubrovich

unread,
Jun 27, 2004, 4:36:47 PM6/27/04
to
"Matthias Thumann" <NoSpamMails_M...@gmx.de> wrote in message news:<cbmatl$12c$05$1...@news.t-online.com>...

> > Has anyone found the CP/M-86 sources? I know that there is a disassembled
> > source out there that we can live with but it would be nice to find the
> > original source.
>
> Do the disassembled sources compile correctly? And are there any sources for
> the tools?

They recompile pretty well.

> Someone wrote me an email that he made a working kernel out of the sources
> for CP/M-86 1.1 on Gaby's site. If you want to I could ask him if I may give
> his e-mail adress to you.
>

I'm pretty certain that the ccp & bdos disassembly portion is from the
cpm.h86 file. There is some smallish difference between it and the
cp/m-86 v1.1 for the ibm pc&xt, as it is built. The cpm.h86 contains
a patch for narrow console for one, there is some info on Gaby's site
about the comparisons. I think some of the patched in code is in
different relative addresses.

> > Rasm86 is used for BDOS.a86 only. sysdat,sup,rtm,mem,cio,pcxios.a86
> > all build with asm86. I just assembled all of these cleanly except

Dri's asm86.cmd that is.

Matthias Thumann

unread,
Jul 17, 2004, 1:23:01 PM7/17/04
to
I'm now trying to get the kernel parts compiled, here's my approach:

before compiling the kernel:
- rebuild 'asm86.cmd' and 'genccpm.cmd'

build commands for kernel:
- move contents of d1, d2 and d3 into one directory
- move 'cpm.exe' and 'asm86.cmd' into same directory
- to compile:
* rasm86 bdos -> compiles with two errors (see below)
* cpm asm86 sysdat \
* cpm asm86 sup \
* cpm asm86 rtm > these modules compile without any errors
* cpm asm86 mem /
* cpm asm86 cio /

build commands for XIOS:
- move 'cpm.exe' and 'asm86.cmd' into XIOS directory
- to compile:
* cpm asm86 xios -> compiles without any errors

Errors while compiling bdos:

------SNIP------
C:\work\kernel>c:\work\rasm86 bdos
--------------------------------------------------
RASM-86 Assembler 12-Mar-87 PC-DOS Version 1.4a
Serial No. XXXX-0000-654321 All Rights Reserved
Copyright (C) 1982-86 Digital Research, EDC.
--------------------------------------------------

End of Pass 1
End of Pass 2
** ERROR NO: 10 ** NEAR: "U_NAMEITEM" UNDEFINED ELEMENT OF EXPRESSION
=212D 909090909090 mov u_nameitem,bx ;save name
ite
m addr in UDA
** ERROR NO: 10 ** NEAR: "U_NAMEITEM" UNDEFINED ELEMENT OF EXPRESSION
=215B 909090909090 mov si,u_nameitem ;is UDA
nameit
em addr zero

CODE 030CA
DATA 00C00

End of assembly. Number of errors: 2. Use factor: 58%
------SNIP------

****************************************************
Work-around for these errors:
Add the following line in 'data.bdo' at line 50:
u_nameitem dw 0 ;!!PATCHED!!
Now this module should compile without any errors.
****************************************************

Here's the output the 'genccpm' utility produces. Does anyone know which
file format it uses ('asm86.cmd' generates .h86 files)?

------SNIP------
C:\work\emu>cpm genccpm


CP/M-86 emulator for DOS vers 1.3 - 11/30/97
Copyright (c) 1985, 1997 Jim Lopushinsky

GENCCPM v3.1 [2/7/84]
GENerate SYStem image for Concurrent CP/M-86 3.1
Can't find these modules:
SYSDAT.CON SUP.CON RTM.CON MEM.CON CIO.CON BDOS.CON XIOS.CON
Please find the correct modules
------SNIP------

build commands for boot programs:
- move 'cpm.exe', 'asm86.cmd' and 'gencmd.cmd' into D8 directory
- to compile:
* cpm asm86 boot
cpm gencmd boot 8080
* cpm asm86 lbdos
cpm gencmd lbdos 8080 (???)
* cpm asm86 load
cpm gencmd load 8080 (???)

Regards,
Matthias


Steve Dubrovich

unread,
Jul 18, 2004, 12:46:46 PM7/18/04
to
"Matthias Thumann" <NoSpamMails_M...@gmx.de> wrote in message news:<cdbn83$6i5$06$1...@news.t-online.com>...

> I'm now trying to get the kernel parts compiled, here's my approach:
>
> before compiling the kernel:
> - rebuild 'asm86.cmd' and 'genccpm.cmd'
>
> build commands for kernel:
> - move contents of d1, d2 and d3 into one directory
> - move 'cpm.exe' and 'asm86.cmd' into same directory
> - to compile:
> * rasm86 bdos -> compiles with two errors (see below)
> * cpm asm86 sysdat \
> * cpm asm86 sup \
> * cpm asm86 rtm > these modules compile without any errors
> * cpm asm86 mem /
> * cpm asm86 cio /
>
> build commands for XIOS:
> - move 'cpm.exe' and 'asm86.cmd' into XIOS directory
> - to compile:
> * cpm asm86 xios -> compiles without any errors
>

Insure that the AT-Patch is installed, at the least.

Re: BDOS
;*****************************************************
;*
;* BDOS - Basic Disk Operating System
;*
;*****************************************************
;
; generation of BDOS.CON file
;
; RASM86 bdos
; LINK86 bdos.con = bdos [data[origin[0]]]
;
;*****************************************************
For the others- ren *.con=*.cmd ?8080 mode, probably.

For the loader, I recommend Randy's idea, re, find 3 1/2, 720k
diskettes, verify for good sectors. If you have cp/m-86 with Freek
Heite's Feat2 3 1/2 support then you can use that to use DSKMAINT.CMD
v1.2 to format the 3 1/2 720 diskette as double sided - 320k for
cp/m-86, [I've just done this successfully, but some of the 720k
diskettes would not format to 320k, probably due to age]. This also
installs the cp/m - ccp/m loader for you. [searches for ccp/m if cp/m
isn't present], to make bootable, copy to it either cpm.sys or
ccpm.sys - the cpm.sys is the one for the PC/XT with the at-patch
installed.

Matthias Thumann

unread,
Jul 19, 2004, 10:45:18 AM7/19/04
to
Steve Dubrovich wrote:

> Insure that the AT-Patch is installed, at the least.

Which files have to be patched for the AT? And is the source code for the
patch available?

> For the others- ren *.con=*.cmd ?8080 mode, probably.

I tried both to rename the .h86 and the .cmd files to .con, but that didn't
work out. This is what genccpm says:
---------SNIP---------
C:\work\kernel>cpm genccpm


CP/M-86 emulator for DOS vers 1.3 - 11/30/97
Copyright (c) 1985, 1997 Jim Lopushinsky
GENCCPM v3.1 [2/7/84]
GENerate SYStem image for Concurrent CP/M-86 3.1

Constructing new CCPM.SYS file
no data group in SYSDAT module
---------SNIP---------

I think the .h86 files have to be converted to object files so that they can
be linked with link86 like the bdos module. Is there any conversion tool?

cu
Matthias


Steve Dubrovich

unread,
Jul 19, 2004, 6:32:45 PM7/19/04
to
"Matthias Thumann" <NoSpamMails_M...@gmx.de> wrote in message news:<cdgmo0$t8g$06$1...@news.t-online.com>...

> Steve Dubrovich wrote:
>
> > Insure that the AT-Patch is installed, at the least.
> Which files have to be patched for the AT? And is the source code for the
> patch available?
>
http://www.seanet.com/~klaw/patch.htm

Describes how to make the patch for _cp/m-86_, but not why.

TO MAKE THE PATCH UNDER DOS:

1. Using a byte-level editor on the CPM.SYS file, locate the
byte at absolute file offset 3DAFh. The byte will be ABh.

2. Change that byte to 47h.

3. Now locate the byte at absolute file offset 3DB9h. The
byte will, again, be ABh.

4. Change that byte to 47h.

5. Save these changes to disk.

6. Boot your machine from this patched version of CPM.SYS.
The 'patched' version will also work fine with 8086,
8088 and V20-based IBM-compatibles.


;;below is a listing of the reassembly of PCBIOS.A86 showing the
patches.
;;The code is in the XIOS in the INIT: routine.
;; 3DAFh - 80h = 3D2Fh
;; 3DB9h - 80h = 3D39h
;; [80h is the length of the Header Record, substract that from the ]
;; [ absolute file offset to get the address in the source for the ]
;; [ patch location, already indicated below. ]

;----------------------------------------
;
; Setup Interrupt Service Routine
vectors
;
3D1D 2BC0 SETISR: SUB AX,AX
3D1F 8EC0 MOV ES,AX
3D21 8ED8 MOV DS,AX
3D23 BF8000 MOV DI,0080h
3D26 B86731 MOV AX,Offset UNEXPINT ;
Unexpected interrupt routine
3D29 8CCB MOV BX,CS ; and
segment
3D2B FC CLD
3D2C B94000 MOV CX,0040h
SETISR1:
3D2F 47 INC DI ; AT PATCH -
Originally STOSW instruction
3D30 93 XCHG AX,BX
3D31 E2FC 3D2F LOOP SETISR1
;
3D33 83C708 ADD DI,0008h
3D36 B97C01 MOV CX,017Ch
SETISR2:
3D39 47 INC DI ; AT PATCH -
Originally STOSW instruction
3D3A 93 XCHG AX,BX
3D3B E2FC 3D39 LOOP SETISR2
;
;;So the reason for the Patch is to nilify the code which wants to
revector
;; the RomBios Interrupt vectors to its own UNEXPected INTerrupt
Handler, a
;; bad idea for other than the PC or XT.

;; For CCP/M-86 v3.1 see XINIT.LIB, around do_interrupts: routine.


> > For the others- ren *.con=*.cmd ?8080 mode, probably.
> I tried both to rename the .h86 and the .cmd files to .con, but that didn't
> work out. This is what genccpm says:
> ---------SNIP---------
> C:\work\kernel>cpm genccpm
> CP/M-86 emulator for DOS vers 1.3 - 11/30/97
> Copyright (c) 1985, 1997 Jim Lopushinsky
> GENCCPM v3.1 [2/7/84]
> GENerate SYStem image for Concurrent CP/M-86 3.1
> Constructing new CCPM.SYS file
> no data group in SYSDAT module
> ---------SNIP---------
>
> I think the .h86 files have to be converted to object files so that they can
> be linked with link86 like the bdos module. Is there any conversion tool?
>

Hmm, perhaps. Rasm86 produces .obj files, as does Intel's ASM86.
I'll have to do some checking, perhaps in the source for genccpm there
is a better description in the comment for this error.

> cu
> Matthias

Bill Gates

unread,
Jul 20, 2004, 7:45:48 AM7/20/04
to
> > no data group in SYSDAT module

Don't forget that GENCMD initializes the
"Group Descriptors" that are to be found
in each ComManD file's Header Record.

What GENCCPM says is that the SYSDAT
module miss a data group. So, the most
probable cause is that you forgot to type
a "Data [xxxx]" or something similar when
generating the CMD file.

As far as I know, the only version of
Concurrent CP/M for which everything
(meaning: Files, Source, and Doc) exists
if the CompuPro version. You should
check all the SUB files.

Yours Sincerely,
"French Luser"

Matthias Thumann

unread,
Jul 22, 2004, 3:37:14 PM7/22/04
to
Steve Dubrovich wrote:

[patching cp/m-86]
OK, thanks for the information how to create a patch. I think the best
solution for CC/PM-86 would be to comment out the code that revectors the
interrupts, because that doesn't seem to make sense.

[compiling kernel]
I've now managed to compile the kernel and to put a system image together,
the makefile can be downloaded on my site.
Here's the output of 'genccpm': (Perhaps someone could test if the
recompiled kernel actually works...)
----------SNIP----------
Changes? gensys
gensys I'm finished changing things, go GEN a SYStem

Generating new SYS file
Generating tables
Appending RSPs to system file
Doing fixups
SYS image load map:
Code starts at 1008
Data starts at 16F9
Tables start at 1C47
RSPs start at 1E8C
XIOS buffers start at 1E8C
End of OS at 3514
Trimming memory partitions. New list:

Addresses Partitions (in paragraphs)
# Start Last Size Qty
1. 400h 1007h 400h 3h
2. 3515h 3800h 2EBh 1h
3. 3800h 6000h 400h Ah
Wrapping up
----------SNIP----------

Regards,
Matthias


Steve Dubrovich

unread,
Jul 25, 2004, 4:57:12 PM7/25/04
to
"Matthias Thumann" <NoSpamMails_M...@gmx.de> wrote in message news:<cdp53g$rvi$00$1...@news.t-online.com>...

> [compiling kernel]
> I've now managed to compile the kernel and to put a system image together,
> the makefile can be downloaded on my site.
> Here's the output of 'genccpm': (Perhaps someone could test if the
> recompiled kernel actually works...)

I've managed to compile it also. It starts to load but then hangs the
system. Tried this with both a 720k diskette reformated to 320k, on a
486, also with a 5 1/4 320k diskette on a xt clone. They both hang
the same. I got the notion that the start segment at 1008:0000h is a
debug segment load point. I know the system should load at
0060:0000h. The header record looks like it uses a fixup table too,
so I don't think I can load it under sid86 and run it. Hmm.

Bill Gates

unread,
Jul 27, 2004, 7:36:50 AM7/27/04
to

Hello, Steve!

> (...) I know the system should load at
> 0060:0000h. The Header Record looks like it uses a fixup table too,


> so I don't think I can load it under sid86 and run it. Hmm.

If I remember correctly, there is some information about
generating and debugging a BIOS in the "CP/M-86
Systsem Guide". I remember that it mentions DDT-86
and SID-86 debugging.

I also remember that there is a description of the
Header Record of a SYS file. I don't think that
a SYS file is obliged to load at 600h. It seems
to be the nearest "page" available, since the
ROM BIOS uses memory until 510h (or 501h,
I don't remember exactly).

Happy debugging!

Yours Sincerely,
"French Luser"

French Luser

unread,
Jul 24, 2004, 6:37:37 AM7/24/04
to
Re-Hello, Steve!

> (...) I know the system should load at
> 0060:0000h. The Header Record looks like it uses a fixup table too,
> so I don't think I can load it under sid86 and run it. Hmm.

Back home, I checked my copy of the "CP/M-86
System Guide". Section 7 describes the CPM.SYS
file. As I remembered, you can load it anywhere
in memory, like any "8080 Memory Model" file.

However, I did not find the section with debugging
of the BIOS. I think I should have see it in the
"Concurrent CP/M Release 3.1 System Guide".

Anyway, since a SYS file is just a special case of
a "8080? Memory Model" file, that means it can
be debugged...

(Regarding "fixups" (If you know a Digital Research
glossary where this term exists, I would be interested
in its definition.), Version 1.1 of RUN.CMD checks
to see if it is running under CP/M-86 or Concurrent
CP/M Version 1. If so, it displays an error message.
So, if your system file contains any fixups, then the
SYS file is CCP/M 2+.)

Why do you say: "I don't think that I can load (a file
with fixups) under SID and run it?" If I have well
understood, "fixups" were included, to enable
Large Memory Model files created by DRC
to be executed. If your OS is able to run them,
then the debugger should be able to debug them.
(Else, you could try RUN.CMD.)

Yours Sincerely,
"French Luser"


Steve Dubrovich

unread,
Aug 1, 2004, 12:05:26 AM8/1/04
to
"French Luser" <Bill....@microsoft.com> wrote in message news:<ce863d$9c9$1...@news-reader3.wanadoo.fr>...

Well, I'm not sure that it is a fixup table after all. I may be a
misplaced data table, it isn't executable code of the supervisor
module like it should be. Only portions of the sup module are at
their correct location, according to comparing the .lst file with
sid86's dump.

What I did find so far was 'netversion equ true' in the
system.def file, and there is no net module.

also,

mpm equ true ; MP/M-86 or
ccpm equ not mpm ; CCP/M-86

which I changed around for ccpm equ true, and
netversion equ false.

however, genccpm gives this error:

CP/M-86 emulator for DOS vers 1.3 - 11/30/97
Copyright (c) 1985, 1997 Jim Lopushinsky
GENCCPM v3.1 [2/7/84]
GENerate SYStem image for Concurrent CP/M-86 3.1
Constructing new CCPM.SYS file

GENCCPM v3.1 [2/7/84]
works on OS version 1431
Sys Data area found was from OS version 1421
Please find correct .SYS or .CON files

so, I've more hunting to do...

Richard Brady

unread,
Aug 1, 2004, 6:38:44 PM8/1/04
to
Mr. Gates (Messr. Roche),

Have you read your email lately? I left you a message earlier this week.

Richard Brady

Steve Dubrovich

unread,
Aug 1, 2004, 9:28:24 PM8/1/04
to
s_dub...@yahoo.com (Steve Dubrovich) wrote in message news:<3fddc08d.04073...@posting.google.com>...

And what I've found is that GENCCPM has been built with MP/M equ true.
I've rebuilt that with the CCP/M setting, and regenerated the .sys,
but
ccpm.sys still hangs on trying to load.

The supervisor mod should be the first module in the file and begin
with 2 jmp instructions, but this build doesn't have that there.

Hmm.

Bosse

unread,
Aug 2, 2004, 7:43:04 AM8/2/04
to
s_dub...@yahoo.com (Steve Dubrovich) wrote in message news:<3fddc08d.0408...@posting.google.com>...

Hi. I found this little information on genccpm.It is for ccpm 1.1 and
I dont know if it solves your problem but it might help you.
regards
Bosse


Patch #6: GENCCPM.CMD generated bad CCPM.SYS file for large XIOS.
Distribution method: Master distribution diskette #2 patched 4/13/83.
Patch by: Bill Fitler, 4/13/83.
GENCCPM had a problem when an XIOS was too large (>32K, plus tables).


Patch Method:
-------------
A>sid86
#rgenccpm.cmd
START END
nnnn:0000 nnnn:BB7F
#l2f75
nnnn:2F75 PUSH FEF6[BP]
nnnn:2F79 POP AX
nnnn:2F7A CWD
nnnn:2F7B MOV FEF4[BP],DX
nnnn:2F7F MOV FEF2[BP],AX
#a2f75
nnnn:2F75 mov ax,fef6[bp]
nnnn:2F79 xor dx,dx
nnnn:2F7B .
#wgenccpm.cmd
#^C
A>

Freek Heite

unread,
Aug 2, 2004, 6:14:43 PM8/2/04
to
bory...@hotmail.com (Bosse) wrote:
>> Hi. I found this little information on genccpm.
>> ....

>> Patch #6: GENCCPM.CMD generated bad CCPM.SYS file for large XIOS.

Just curious: where did you find this?

Regards,
Freek Heite.
email: f.heite at hccnet.nl

Steve Dubrovich

unread,
Aug 2, 2004, 10:16:59 PM8/2/04
to
bory...@hotmail.com (Bosse) wrote in message news:<45f13ed8.0408...@posting.google.com>...

Thanks, but this patch is for ccp/m-86 v2.0 : genccpm v3.0 [3/7/83].
This patch description is in patches.doc, in the ccp/m-86 v2.0 source tree.

French Luser

unread,
Aug 6, 2004, 6:22:19 AM8/6/04
to
French Luser wrote:

> However, I did not find the section with debugging
> of the BIOS. I think I should have see it in the
> "Concurrent CP/M Release 3.1 System Guide".

I was correct. Here is the relevant chapter:

CCPMSG8.WS4 (Concurrent CP/M System Guide, Chapter 8)
-----------

(Retyped by Emmanuel ROCHE.)

Section 8: Debugging the XIOS
-----------------------------

This section suggests a method of debugging Concurrent CP/M,
requiring CP/M-86 running on the target machine, and a remote
console. Hardware-dependent debugging techniques (ROM monitor,
in-circuit emulator) available to the XIOS implementor can
certainly be used, but are not described in this manual.

Implement the first cut of the XIOS using all polled I/O
devices, all interrupts disabled (including the system TICK) and
Interrupt Vectors 1, 3, and 225 (which are used by DDT-86 and
SID-86) un-initialized. Once the XIOS functions are implemented
as polling devices, change them to interrupt-driven I/O devices,
and test them one at a time. The TICK interrupt routine is
usually the last XIOS routine to be implemented.

The initial system can run without a TICK interrupt, but has no
way of forcing CPU-bound tasks to dispatch. However, without the
TICK interrupt, console and disk I/O routines are much easier to
debug. In fact, if other problems are encountered after the TICK
interrupt is implemented, it is often helpful to disable the
effects of the TICK interrupt, to simplify the environment. This
is accomplished by changing the TICK routine to execute an IRET
instead of jumping to the dispatcher, and not allowing the TICK
routine to perform flag set system calls.

When a routine must delay for a specific amount of time, the
XIOS usually makes a P_DELAY system call. An example is the
delay required after the disk motor is turned on until the disk
reaches operational speed. Until the TICK interrupt is
implemented, P_DELAY cannot be called, and an assembly language
time-out loop is needed. To improve performance, replace these
time-outs with P_DELAY system calls after the tick routine is
implemented and debugged. See the MOTOR_ON routine in the
example XIOSes for more details.


8.1 Running under CP/M-86
-------------------------

To debug Concurrent CP/M under CP/M-86, CP/M-86 must use a
console separate from the console used by Concurrent CP/M.
Usually, a terminal is connected to a serial port and the
console input, console output, and console status routines in
the CP/M-86 BIOS are modified to use the serial port. The serial
port thus becomes the CP/M-86 console. Load DDT-86 under CP/M-86
using the remote console, and read the CCPM.SYS image into
memory using DDT-86. The Concurrent CP/M XIOS must not re-
initialize or use the serial port hardware that CP/M-86 is
using.

It is somewhat difficult to use DDT-86 to debug an interrupt-
driven virtual console handler. Because the DDT-86 debugger
operates with interrupts left enabled, unpredictable results can
occur.

Values in the CP/M-86 BIOS memory segment table must not overlap
memory represented by the Concurrent CP/M memory partitions
allocated by GENCCPM. CP/M-86, in order to read the Concurrent
CP/M system image under DDT-86, must have in its segment tables
the area of RAM that the Concurrent CP/M system is configured to
occupy. See Figure 8-1.


+-------------------+
CCP/M transient / | |
program area / | |
defined by \ | |
GENCCPM. \ | |
+-------------------+
CP/M transient / | CCPM.SYS | --> CCP/M O.S. image
program area / | |
+ +-------------------+
described in \ | DDT86 |
BIOS. \ | |
+-------------------+
| CPM.SYS | --> CP/M O.S. image
+-------------------+
Memory address 0: | Interrupt Vectors |
+-------------------+

Figure 8-1. Debugging memory layout


Any hardware that is shared by both systems is usually not
accessible to CP/M-86 after the Concurrent CP/M initialization
code has executed. Typically, this prevents you from getting out
of DDT-86 and back to CP/M-86, or executing any disk I/O under
DDT-86.

The technique for debugging an XIOS with DDT-86 running under
CP/M-86 is outlined in the following steps:

1. Run DDT-86 on the CP/M-86 system.

2. Load the CCPM.SYS file under DDT-86 using the R command and
the segment address of the Concurrent CP/M system minus 8 (the
length in paragraphs of the CMD file Header Record). The segment
address is specified to GENCCPM with the OSSTART option. Set up
the CS and DS registers with the A-BASE values found in the CMD
file Header Record. See the "Concurrent CP/M Operating System
Programmer's Reference Guide" description of the CMD file Header
Record.

3. The addresses for the XIOS ENTRY and INIT routines can be
found in the SYSDAT DATA, at offsets 0028h for ENTRY, and 002Ch
for INIT. These routines will be at offsets 0C03h and 0C00h,
relative to the data segment in DS.

4. Begin execution of the CCPM.SYS file at offset 0000h in the
code segment. Breakpoints can then be set within the XIOS for
debugging.

In the following figure, DDT-86 is invoked under CP/M-86, and
the file CCPM.SYS is read into memory, starting at paragraph
1000h. The OSSTART command in GENCCPM was specified with a
paragraph address of 1008h when the CCPM.SYS file was generated.
Using the DDT-86 D(ump) command, the Header Record of the
CCPM.SYS file is displayed. As shown, the A-BASE fields are used
for the initial CS and DS segment register values. The following
lines printed by GENCCPM also show the initial CS and DS values:

Code starts at 1008
Data starts at 161A

Two G(o) commands with breakpoints are shown, one at the
beginning of the XIOS INIT routine, and the other at the
beginning of the ENTRY routine. These routines can now be
stepped through, using the DDT-86 T(race) command. See the
"Concurrent CP/M Operating System Programmer's Utilities Guide"
for more information on DDT-86.

A>ddt86
DDT86
-rccpm.sys,1000:0
START END
1000:0000 1000:ED7F
-d0
1000:0000 01 12 06 08 10 12 06 00 00 02 B9 08 1A 16 B9 08 ................
+-+-+ +-+-+
-xcs | |
CS 0000 1008 <-------+ |
DS 0000 161A <----------------------------------+
SS 0051 .
-lds:0C00
161A:0C00 JMP 1E2E
161A:0C03 JMP 0C3B
-g,ds:0C00 ; Set a breakpoint at XIOS INIT
*161A:0C00 ; The INIT routine may now be debugged
-g,ds:0C03 ; Set a breakpoint at XIOS ENTRY
*161A:0C03 ; The XIOS function being called is ENTRY now

Figure 8-2. Debugging CCP/M under DDT-86 and CP/M-86


When using SID-86 and symbols to debug the XIOS, extend the
CCPM.SYS file to include un-initialized data area not in the
file. This ensures that the symbols are not written over while
in the debugging session. Assuming the same CCPM.SYS file as the
preceding, use the following commands to extend the file.


A>sid86
SID86
#rccpm.sys,1000:0 ; Read CCPM.SYS file
START END
1000:0000 1000:ED7F
#xcs
CS 0000 1008
DS 0000 161A
SS 0051 .
#sw44
161A:0044 XXXX . ; Set ENDSEG value in SYSDAT DATA
#wccpm.sys,1000:0,XXXX:0 ; Write larger CCPM.SYS file
#e ; Release memory
#rccpm.sys,1000:0 ; Read in larger file
START END
1000:0000 YYYY:XXXX
#e*xios ; Get XIOS.SYM file
SYMBOLS
#lds:0C00 ; And start debugging
161A:0C00 JMP 1E2E
161A:0C03 JMP 0C3B
#g,ds:0C00 ; Set a breakpoint at XIOS INIT
*161A:0C00 ; The INIT routine may now be debugged
#g,ds:0C03 ; Set a breakpoint at XIOS ENTRY
*161A:0C03 ; The XIOS function being called is ENTRY now

Figure 8-3. Debugging the XIOS under SID-86 and CP/M-86


The preceding procedure, to extend the file, only needs to be
performed once after the CCPM.SYS file is generated by GENCCPM.


EOF


Yours Sincerely,
"French Luser"

Steve Dubrovich

unread,
Aug 8, 2004, 10:49:47 AM8/8/04
to
s_dub...@yahoo.com (Steve Dubrovich) wrote in message news:<3fddc08d.04073...@posting.google.com>...

BTW, I did load this latest errant build under cp/m-86 with:
sid86 ccpm.sys
and it loads to the absolute location 1008:000h without over writing
any of the cp/m-86 OS, so far as I can tell to this point.

>
> Well, I'm not sure that it is a fixup table after all. I may be a
> misplaced data table, it isn't executable code of the supervisor
> module like it should be. Only portions of the sup module are at
> their correct location, according to comparing the .lst file with
> sid86's dump.
>

The linkage editor has put the sysdat.dat file here, CS:0, so there is
a serious problem. The DS:0 should start the sysdat.dat with a far
pointer to the SUP entry: at CS:0003 followed by a far pointer to the
SUP init: at CS:0000, but here [DS:0] I find a 24 bit value of the
length of the CS followed by a 24 bit value for the CS: 001008h,
followed by a 24 bit value of the DS length and then the 24 bit value
of the DS: 0016F9h, [in this build the DS value is 16F9h].

However, the linkage editor has put the XIOS in its proper spot in the
Data Segment at offset 0C00h, and it begins with its proper 2 jmp
vectors, so not all is bad.



> What I did find so far was 'netversion equ true' in the
> system.def file, and there is no net module.
>
> also,
>

This is in genc1.c :
/****** include files ********/
#define MAINMODULE 1
#include <genccpm.h>
/*****************************/

#ifdef CCPM
BYTE *edsysver = "GENCCPM v2.1 [2/7/84]\n";
#endif
#ifdef CMPM
BYTE *edsysver = "GENCCPM v3.1 [2/7/84]\n";
#endif

So should the original stand as: ?


> mpm equ true ; MP/M-86 or
> ccpm equ not mpm ; CCP/M-86
>
> which I changed around for ccpm equ true, and
> netversion equ false.
>
> however, genccpm gives this error:
>
> CP/M-86 emulator for DOS vers 1.3 - 11/30/97
> Copyright (c) 1985, 1997 Jim Lopushinsky
> GENCCPM v3.1 [2/7/84]
> GENerate SYStem image for Concurrent CP/M-86 3.1
> Constructing new CCPM.SYS file
> GENCCPM v3.1 [2/7/84]
> works on OS version 1431
> Sys Data area found was from OS version 1421
> Please find correct .SYS or .CON files
>
> so, I've more hunting to do...

As in hunting errant C ptrs and address calculations.

retrogear

unread,
May 19, 2020, 11:28:53 PM5/19/20
to
while I'm on covid furlough I decided to try and bring up ccpm 3.1 on my IBM PC 5150 from sources since I've gotten MPM-86 and Concurrent DOS up on my CompuPro now. I came across this amazing thread which provided key clues to make it happen, so I resurrected it with a few key pointers. I did all my assembly work on the compupro in CDOS so didn't have to worry about using emulation in the modern world. The XIOS needs to be assembled in 8080 small mode, in fact genccpm will tell you that which is how I found out. All other con and RSP modules are done w/o 8080 directive. The only RSP's I used were PIN.RSP, VOUT.RSP, CLOCK.RSP and SHELL.RSP which was made from TMP.A86. I used ASM86 on everything except the BDOS which requires RAMS86, LINK86. I see almost all of the source code indicates it's for MPM-86 which explains why I couldn't find the source for that because of being stored as ccpm 31. Another key on this is the way the PCXIOS is written it requires an 8 sector/track formatting and only uses one side = 160K.The damn CCP.SYS only leaves about 55K free. The next step would be to figure out how to do double sided 9 spt. If anyone knows where to bios source is to do this, let me know.

retrogear

unread,
Nov 13, 2021, 9:58:00 AM11/13/21
to
I keep posting on this thread because it is very relevant to what I'm continuing to work on. I came back to this project recently and now have CCP/M 3.1 booting on a 486 with a 320K DSDD 5.25" floppy.
I put the AT patch into the source code and now can assemble all the .CON and RSP modules required from source except VOUT and PIN which require PLM86. I am attempting to assemble
those on a DOS 5.0 PC with the PLM8086tools package. This package Randy mentioned has all the tools except OH86.EXE. I found in this thread is this quote:

> In addition to what Randy mentioned, you also need the Intel tools:
> http://leonardo.caltech.edu/~ee5x/tools/exe/
> even the obscure ones, loc86, oh86.

Where is this Intel tools package now ? This link is long dead and I can't find an active link anywhere.

Larry G

Peter Dassow

unread,
Nov 13, 2021, 4:47:44 PM11/13/21
to
On 13.11.2021 at 15:57 retrogear wrote:

>> In addition to what Randy mentioned, you also need the Intel tools:
>> http://leonardo.caltech.edu/~ee5x/tools/exe/
>> even the obscure ones, loc86, oh86.
>
> Where is this Intel tools package now ? This link is long dead and I can't find an active link anywhere.
>
You should learn to use some web tools.
At least look at
https://web.archive.org/web/20050526002131/http://leonardo.caltech.edu/~ee5x/tools/exe/
...

Peter Dassow

unread,
Nov 13, 2021, 4:53:22 PM11/13/21
to
On 13.11.2021 at 22:47 Peter Dassow (me) wrote:
>
> You should learn to use some web tools.
> At least look at
> https://web.archive.org/web/20050526002131/http://leonardo.caltech.edu/~ee5x/tools/exe/
> ...

Ok, sorry for that. That's the right directory, and all files were
listed. Unfortunately archive.org didn't stored any files (usually small
ZIP files are saved, too, but unfortunately not this time).
There is indeed no further search result shown, if you look just for
these (single) files. I guess it will be necessary to look for the
complete archive instead of single files.



retrogear

unread,
Nov 13, 2021, 5:34:07 PM11/13/21
to
yea thanks for looking, everything just seems to turn up empty. I hope these files aren't lost for good :(

rfka01

unread,
Nov 14, 2021, 4:53:05 AM11/14/21
to
Can you provide me with a valid address? I might have the files
squirreled away.

--
Diese E-Mail wurde von Avast Antivirus-Software auf Viren geprüft.
https://www.avast.com/antivirus

retrogear

unread,
Nov 14, 2021, 6:53:41 AM11/14/21
to

> Can you provide me with a valid address? I might have the files
> squirreled away.
>
I'd greatly appreciate that.
larrygr510 AT gmail DOT com

ogd...@gmail.com

unread,
Nov 14, 2021, 8:17:52 AM11/14/21
to
I have posted my collection of Intel Msdos utilities at
https://mark-ogden.uk/files/intel/msdos/
The files are sorted by appname/version/

hope this helps
Mark

Peter Dassow

unread,
Nov 16, 2021, 4:42:07 PM11/16/21
to
I've found all the tools inside the CCP/M 3.1 source code package, so I
am still a bit confused about the goal you try to achieve.
Had you took a look into http://www.cpm.z80.de/download/ccpmv31.zip ?

retrogear

unread,
Nov 17, 2021, 10:17:23 AM11/17/21
to
yes I can gen a ccpm.sys that works but the only modules I am not able to compile from source is PIN.RSP and VOUT.RSP which require the PLM86 compiler with the correct syntax. The source code for those two RSP's is in D3 of that zip file but when I compile and link those two RSP's from source there are warning messages and they do not work, my PC boots but no response to commands. I found the RSP bin files in another archive which do work. I'm just trying to find a syntax that works with the PLM86.EXE compiler I'm running from MSDOS.

retrogear

unread,
Nov 20, 2021, 8:54:25 PM11/20/21
to
I finally got the PLM86 code to compile and create good modules PIN.RSP and VOUT.RSP from sources.
Here's my build notes. The commands have to be typed exactly as shown.

genccpm requires CON modules BDOS XIOS SYSDAT SUP CIO MEM and RTM
XIOS is gencmd 8080 but others are not.
RSP's are PIN VOUT CLOCK ECHO SERIN SEROUT SHELL
RSP's are renamed CMD files. PIN and VOUT require Intel PLM86.EXE on MSDOS.
SHELL.RSP = TMP.CMD. ECHO.RSP is needed or no commands respond.
SERIN/SEROUT RSP's enable ctrl-alt-del to reboot.
SYSTEM.DEF has mpm=true BMPM=true. If those are set false, genccpm says sys data wrong version
DATA.BDO needs line #50 added u_nameitem dw 0. Also has CCPM vs MPM = CCPM.
AT patch in XINIT.LIB of PCXIOS to boot on 486. After int_save_loop change two STOSW to INC DI

Successful build of PIN.RSP 11/20/21 with warnings noted that didn't affect operation

PIN.P86 edited 7 times to substitute call function(.variable to call function(offsetof(@variable
;using msdos 5.0, asm86 v2.1, plm86 v3.1, link86 v3.1, loc86 v2.5, oh86 v1.0
asm86 rhpin.a86
asm86 pxios.a86
plm86 pin.p86 optimize(3)
link86 rhpin.obj,pxios.obj,pin.obj to pin.lnk ;get warning 14: group:dgroup enlarged for PIN.OBJ
loc86 pin.lnk od(sm(code,dats,data,const,stack)) ad(sm(code(0),dats(10000h))) ss(stack(0)) to pin.dat
;get warning 26: stack segment decrease and warning 66:start address not specified in output module
oh86 pin.dat ;creates pin.hex
rename pin.hex pin.h86 ;filetype h86 required for gencmd
;read pin.h86 into a cpm86 system
GENCMD PIN DATA[B1000] ;B1000 = dats(10000h) data segment
REN PIN.RSP=PIN.CMD

Successful build of VOUT.RSP 11/20/21 with warnings noted that didn't affect operation

VOUT.P86 edited 4 times to substitute call function(.variable to call function(offsetof(@variable
;from msdos
asm86 rhvout.a86
asm86 pxios.a86
plm86 vout.p86 optimize(3)
link86 rhvout.obj,pxios.obj,vout.obj to vout.lnk ;get warning 14: group:dgroup enlarged for VOUT.OBJ
loc86 vout.lnk od(sm(code,dats,data,const,stack)) ad(sm(code(0),dats(10000h))) ss(stack(0)) to vout.dat
;get warning 26: stack segment decrease and warning 66:start address not specified in output module
oh86 vout.dat
rename vout.hex vout.h86
;read vout.h86 into a cpm86 system
gencmd vout data[B1000]
ren vout.rsp=vout.cmd

Thanks to Mark Ogden for helping me with PLM86 use of offsetof syntax.

Larry G
0 new messages