While looking for C compiler for CP/M 68 looks I've found something that
looks quite fine.
As for version "5.1 (beta)/25 Apr 2002"
There are a lot of versions of this compiler on the net, but this one is surely the best I've tried (but as I understand it's unable to compile itself, what a pity)
The way it does not work is writing hex as
And you should edit
Next, remember that's just compiler, not even preprocessor: so on unix side I had to do
On CP/M system, assemble the file with
UPD: More, the code it generates can be feed to jas assembler mentioned some time ago.
UPDD: Looks like optimization code is faulty.
UPDDD: 201607 Mirrored Here
As for version "5.1 (beta)/25 Apr 2002"
c68
taken from
http://homepage.ntlworld.com/itimpi/compsrc.htm has -cpm68
option and it somehow work. It even claims that it generates AS68compatible source.There are a lot of versions of this compiler on the net, but this one is surely the best I've tried (but as I understand it's unable to compile itself, what a pity)
The way it does not work is writing hex as
0xXX
, not as $XX
,
so here is a fix:out68k_c.c
:
PRIVATE void put_byte P1 (UVAL,val)
{
put_header (bytegen, alignment_of_type (tp_char));
oprintf ("$%lx", (unsigned long) (val & OxffUL));
/*DtZ oprintf ("0x%lx", (unsigned long) (val & OxffUL)); */
outcol += 4; /* or should be changed to +3 ? */
}
PRIVATE void put_word P1 (UVAL, val)
{
put_header (wordgen, alignment_of_type (tp_short));
/*DtZ oprintf ("0x%lx", (unsigned long) (val & OxffffUL)); */
oprintf ("$%lx", (unsigned long) (val & OxffffUL));
outcol += 6; /* or should be changed to +7? */
}
Next, AS68
does not need/want "\t.sect", it accepts .data and .text directly. out68k_c.c
:
static void seg P3 (enum e_sg, segtype, const char *, segname, SIZE, al)
{
nl();
if (curseg != segtype) {
/*DtZ oprintf ("\t.sect\t%s%s", segname, newline);*/
oprintf ("\t%s * Segment %s", segname, newline);
And you should edit
config.h
the way it can generate for 68000 and to check
the compiler binary you get can do -cpm68k
and -int=16
.
Next, remember that's just compiler, not even preprocessor: so on unix side I had to do
cc -E -I/home/dtz/8BIT/68K/CPM1.3/DISK4 main.c > p_main.c
./cc68 -int=16 -cpm68k -v p_main.c > main.s
Also, note that standard CP/M 68's headers lacks most of the C functions; so I had to copy them
from "C language programming manual" (do not forget to add link link there!)On CP/M system, assemble the file with
AS68 -U file.o
, and then link it with CLINK.SUB
UPD: More, the code it generates can be feed to jas assembler mentioned some time ago.
UPDD: Looks like optimization code is faulty.
UPDDD: 201607 Mirrored Here
Seems the mirror of the site is gone, but archive.org has it.
ReplyDeletehttps://web.archive.org/web/20150908032106/http://homepage.ntlworld.com/itimpi/compsrc.htm