m68hc11(オリジナルはMC68HC11だがgcc界隈ではm68hc1x:hc11,hc12含めて:と呼ばれている様なのでそれに従う)のgccをMC68HC11E0のボードを2007年にEagle+Olimexで始めて基板発注した時のチップなので思い出深く、元々モトローラMC6800でマイコン入門した身なのでその上位互換チップのMC68HC11には格別の思い入れがある(無論、仕事でも無理やり使った事があります。H8系が優勢になる前の頃:)
とか身の程知らずにもステマしてしまう自分が嫌(ネタです:)。
MC68HC11はgccがサポートされており専用サイトも存在しているのだがリンク切れで入手困難な状態が(私的には)続いていたのだけど、本日googleさんに尋ねたらUbuntu 18.04でm68hc1x-gcc なる物を発見!
Ubuntuの公式ページの状況は:
どうやら18.04以降で復活してくださった方(上記リンク参照)がいらした様で、感謝(心から)であります。
1.導入方法
上記サイトに記載されているが、普通に
sudo apt update sudo apt install gcc-m68hc1x
で導入される。ポイントはHC11とHC12(後に車載用で進化を遂げるS12のご先祖様)をサポートしている点で元々FordかGMの要求で開発された68HC11の後継(微妙だが16bitと言えなくもない。アドレス空間64KBだけど。後にバンク付変態バージョンに更にモトローラらしく無い変貌を遂げる事になる:顧客要求ですよね:)で欧米ではメジャー?な同プロセサをサポートする。同時は我が国はメーカ毎にマイコンアーキテクチャを競っていた時代なので一般人向けには知名度は低く、当時勢いのあったh8系やm16c(後のR8,R32)や78K(後のRL78)に制圧されて採用例は少なかったのでは(個人の勝手な想像です。当時のフリスケの営業さんもHC12を口にした事は無かったような:)と勝手に想像している(当業者の業界ではなかったので見当違いの可能性があります。とはいえ国産品愛好は尊ぶべきと思う。)。
2.m68hc1x-gccの情報
古いチップでリンク切れも多いが総本山と思しきサイトがまだ存在しているが、メンテされてるかは???
とはいえまとまった情報としては参考にすべきかと。
3.サンプル
int main()
{
int i,j,k ;i=0;j=0;k=0;
for(i=0;i<1000;i++){
j=i*2+k;
k=k+j;
}
}
8bitマイコンでもgccはintで32bitサポートしている。以下のアセンブラに展開したコードで確認。
2006年にリリースされたのが最終バージョンみたいだから1980年代に登場したプロセサをgnuは20年程支えてくれたらしい。2006年といえばCFやPowerの時代だから8051等と同様にこの手の組み込みプロセサ(MCU、マイコンと呼ぶべきだが)のライフサイクルの長さには驚かされる。プロセサ紹介としていつも参照させて頂いている小松さんのhpより引用↓
因みにコードサイズは上記ソースで
ThinkPad-A285:~$ ls t1.* -ltr
-rw-rw-r-- 1 89 Mar 5 16:04 t1.c
-rw-rw-r-- 1 1599 Mar 5 19:48 t1.s
ThinkPad-A285:~$ ls t1 -ltr
-rwxrwxr-x 1 7250 Mar 5 19:48 t1
ThinkPad-A285:~$ file t1
t1: ELF 32-bit MSB executable, MC68HC11, version 1 (SYSV), statically linked, with debug_info, not stripped
とランタイム込みで7250byte(debug情報含む)と32bit int を鑑みるとgccでも相応のコードサイズだがsmallc等とは比較にならぬ程コード効率(と多分性能も)良いのはgccならでは。どうやら西欧ではm68hc11はコンピュータ・サイエンスの実技用として使われた傾向がある様なので(まあ、Z80や8051も教育用は多々存在したのでしょうけれど)休眠期間を含めて21世紀でもgccが使える(version 3だけど)のはとても有り難い話、と思うのは1980年代に若者だった者のノスタルジーなんでしょうね(ほのぼの:)。