Date: 20221109
Developing for the 68hc11 is a pleasure. Up to now, I have programmed my sys11 board in pure assembly. I could not find a satisfactory C compiler even if I know that gcc supported this cpu at some point.
However, after having a look at FUZIX, I noticed that Alan Cox did a port to the 68hc11 in 2021, and this project is obviously developed in C. Alan was nice enough to give me some clues on twitter (thank you!) so I'm glad to share a recipe with you to get a working gcc for hc11.
The main information is: The latest binutils still supports the hc11 (despite a bug in the simulator that cannot remap IO registers), but the latest gcc version to support the hc11 is 3.4.6.
I have used this procedure on a 64-bit intel laptop with Linux Mint 21, and on a Raspberry Pi 4 with debian.
$ wget https://ftp.gnu.org/gnu/binutils/binutils-2.39.tar.gz $ tar zxvf binutils-2.39.tar.gz $ mv binutils-2.39 binutils-m68hc11-elf-2.39 $ cd binutils-m68hc11-elf-2.39 $ ./configure --prefix=$HOME/.local --target=m68hc11-elf $ make $ make install $ ls ~/.local/bin m68hc11-elf-addr2line m68hc11-elf-c++filt m68hc11-elf-ld m68hc11-elf-objcopy m68hc11-elf-readelf m68hc11-elf-strip m68hc11-elf-ar m68hc11-elf-elfedit m68hc11-elf-ld.bfd m68hc11-elf-objdump m68hc11-elf-size m68hc11-elf-as m68hc11-elf-gprof m68hc11-elf-nm m68hc11-elf-ranlib m68hc11-elf-strings
$ wget https://ftp.gnu.org/gnu/gcc/gcc-3.4.6/gcc-core-3.4.6.tar.gz $ tar zxvf gcc-core-3.4.6.tar.gz $ mv gcc-3.4.6 gcc-m68hc11-elf-3.4.6 $ cd gcc-m68hc11-elf-3.4.6
$ cp ../binutils-m68hc11-elf-2.39/config.guess .
(S_IRUSR|S_IWUSR)
as third parameter to open (required with the O_CREAT flag). See here for the error you get without patching:
.space 2
instead of :
.dc.w 1
in order to reserve uninitialized space for the virtual registers.
$ ./configure --prefix=$HOME/.local --target=m68hc11-elf $ make $ make install $ $ ls ~/.local/bin/ m68hc11-elf-addr2line m68hc11-elf-c++filt m68hc11-elf-gcc m68hc11-elf-gcov m68hc11-elf-ld.bfd m68hc11-elf-objdump m68hc11-elf-size m68hc11-elf-ar m68hc11-elf-cpp m68hc11-elf-gcc-3.4.6 m68hc11-elf-gprof m68hc11-elf-nm m68hc11-elf-ranlib m68hc11-elf-strings m68hc11-elf-as m68hc11-elf-elfedit m68hc11-elf-gccbug m68hc11-elf-ld m68hc11-elf-objcopy m68hc11-elf-readelf m68hc11-elf-strip $ ~/.local/bin/m68hc11-elf-gcc -v Reading specs from /home/grx/.local/lib/gcc/m68hc11-elf/3.4.6/specs Configured with: ./configure --prefix=/home/grx/.local --target=m68hc11-elf Thread model: single gcc version 3.4.6
And that's it, you can explore the 68hc11 in C! We appreciate the fact that this old gcc has no complex dependency!