From several sources I know that Motorola MC68k parts do not like to run on higher freqs then nominal.
At least that's not true for "On Semiconductors" parts.
At least that's not true for "On Semiconductors" parts.
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.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);
config.h
the way it can generate for 68000 and to check
the compiler binary you get can do -cpm68k
and -int=16
.
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!)AS68 -U file.o
, and then link it with CLINK.SUB
JAS
from Sozobon C compiler for Atari was easy to port back to CP/M 68 and it works natively. xhcc
, now using makefile
, not make.unx
.main.c
:
if ( freopb( ofile, "w", stdout ) == NULL )
error( 0, "can't open object file for writing" );
if ( freopen( ofile, "bw", stdout ) == (FILE *) NULL )
error( 0, "can't open object file for writing" );
DISK4
and header files on it. You have to convert them to lowercase and erase all symbols after (and including) ^Z.makefile
to became smth like that:
CC = ./xhcc
CFLAGS = -c -v -O -I/home/dtz/8BIT/68K/CPM1.3/DISK4
Run make, you'll get 10 *.s files; then assemble them by jas
:
#!/usr/local/bin/tclsh
foreach f [glob *.s] {
exec ./xjas -8 $f
}
You'll get 10 .o
files. Transfer them to CP/M 68K host and link by DRI's LO68
:
c:lo68 -R -u_nofloat -o jas.68k c:s.o CBUF.O CPY.O GEN.O HDR.O LEX.O MAIN.O OPS.O OPT.O PARSE.O PASS.O SCAN.O SYM.O c:clib
And know what? It works! (do not forget to add jas
).
However, that's not very useful as assembler, but better to have an assembler with SOURCE as alternative to AS68.xjas
assembler. At least with -8
flag it generates .o
files with can be linked natively on CP/M'68 lo68
.