(15/10/11))のコメントにCDP1802用のCコンパイラの質問があったので調べてみた。結論は、出力されるバイナリが大きいので、RAMを十分載せておけば使える。lcc1802CDP1802は入手したがまだ動かしていない。(^^;SBCを作ったとしても、おそらくtinyBASICでも動かしたら満足するのだろう。いうわけで、CDP1802用のCコンパイラは調べていなかった。調べてみるとlcc1802が見つかった。SourceのコンパイラでターゲットCPUはAlpha,SPARC,MIPS,x86に対応している。用に作られたもののようだ。https://sites.google.com/site/lcc1802/downloadsからダウンロードできる。インストールlcc42judy.zipをインストールしてみた。zipを解凍して現れるlcc42ディレクトリをCドライブ直下(C:\)にコピーしろと書いてある。C:\Devzにインストールしているので、ここにインストールした。コンパイル・ドライバ(lcc)が呼び出すコマンドは同じディレクトリを探すので問題はないだろうと考えたのだが、cppが見付からないと怒られた。(^^;どうやら、プリプロセッサ(cpp.exe)、コンパイラ(rcc.exe)、アセンブラ(asw.exe)のパスは"C:\lcc42\bin"がハードコードしてあるようだ。仕方がないので、C:\からinkを張っておいた。02はCDP1802が使われている数々のボードやシステムのエミュレーションができる。VELFで試してみた。ELFはシリアル・インタフェースを持っていない。Q(#4)をTXD、EF2(#23)をRXDに使ってソフトウェアで実装してある。ELFで試しておけばSBCを作るときにシリアルインタフェースを載せなくて良い。サンプルlcc1802にはサンプルが用意されている。これらのサンプルはolduino用なので、これを変更してVELFで動くようにする。examples/helloworldディレクトリにある。<nstdlib.c>は何?である。lcc1802はライブラリはなくて、最低限の関数がinclude/nstdlib.cに書いてある。printf()もあるが、最低限の機能だけで出力幅指定はできない。文字列出力関数のprintstr()は1文字出力にout(5,d)を呼んでいるが、VELFでは動作しないのでputc()を使うように変更しておく。putc(*ptr++);}nstdlib.cにはfloatを扱う関数がある。sdccは賢いので必要な関数だけリンクしてくれるがlcc1802ではnstdlib.cはいつでもコンパイルされるので使わない関数でもオブジェクトに含まれる。"nofloats"が宣言されているとコンパイルしないようになっている。-Dnofloatsとすれば良い。ランタイムライブラリランタイムライブラリは、include/lcc1802Prolo??.incとinclude/lcc1802Epiloxx.inc。これらはのライブラリは、コンパイル済のライブラリをlinkerがリンクするのではなく、ソースに展開している。ソース中にnsddlib.cをインクルードし、アセンブラソース中でlcc1802Prolo??.incとlcc1802Epiloxx.incをインクルードしている。入出力ルーチンIOルーチンは、include/IO1802.incに書いてある。printf()は1文字出力にputc()を呼んでいる。lcc1802が想定しているolduinoの1文字出力はout(5,d)を使っているので、VELFでは出力できない。IO1802.incに1文字出力(putc())と1文字入力(getc())を書けば良さそうだ。CDP1802のアセンブラは書いたことが無い。Emma02にVELFのモニタソース(Emma02\data\Velf\VELFbios-v3.1.LST)があったので、この中の1文字入出力ルーチンを参考に(ほぼコピペ)、Cから引数を渡す部分と戻り値を返す部分を付け加えて、テンポラリ変数をreからrt1に変えた。a.hexが作られるようになる。Bytes)しかし、hellowroldだけで3,609byteとは。8Queen8Queen問題を解くプログラムをコンパイルしてみる。<nstdlib.c>コンパイルすると、4,542byteだった。↓実行結果ちゃんと実行されるようだ。まとめSBCを作るときはRAMをケチらないで載せておけばlcc1802は使える。今時、32kのRAMを積んでも大した出費ではない。ELFではRAMが少ないので使えないだろう。ELFを忠実に作るなら、ハンドアセンブルして、8個のスイッチでプログラムを入力する覚悟が必要だ。rcc.exeがASxxxxアセンブラを吐くようにするとSDCCのライブラリが使えるようになる。aslinkを使うと出力がもう少しコンパクトになると思う。(日)CDP1802CDP1802を探していた。マルツやChipOneStopで売っているのだが、1個は売ってくれない。CDP1802CDは単価が安いが(800円くらい)最低販売数は14個だ。10,000円を超えるように設定されているようだ。CDP1082BCEの在庫があって@800だと言うので2個発注しておいた。84年23週製造か?GEに買収される前の年だ。5V(4V-6.5V),PDIPである。CMOSだから電源電圧は5Vでなくても良い。データシートにはCDP1802Aの推奨VDDは4V-10.5Vで、VDD=10Vのとき6.4MHzで動くと書いてある。ELFを作るには、16進LEDディスプレイが必要だ。この前入手したLEDディスプレイは16進表示ではなく10進表示だった。orz新品はDigikeyで\5,386、AVNETで$33.2939だ。(哲学はなぜ間違うのか)。