かなりブログの投稿をさぼっていたのですが、PCCをZ8000に移植(対応?)させようと格闘しています。
現在挑んでいるのは、最新のPCC1.1.0ではなく、70年代のV7 UNIXに含まれていたANSI C 以前のPCCです。
作業を単純化するため、ノンセグメントモードだけに対応しているので、実質Z8002用です。
過去には、i8086, MC68000 と共にZ8000版も有ったようなのですが、ネット上を探し回りましたが見つからず、現在では失われてしまっているようです。
まあ、40年もまえのことなので仕方がないですね。
現在は、アーキテクチャの似ているPDP-11版をベースに、Z8000のコードを吐けるよう段階的に書き換えていっています。
下は引数を2つ取って足し算をして返すだけの関数をコンパイルした例です。
C言語
add(a, b) int a, b; { a += b; return a; }Z8000アセンブリ
.data .text .globl _add _add: call csv sub r15,#F1 ld r2,4(r14) add r2,6(r14) ld 4(r14),r2 ld r2,4(r14) jp cret jp cret .F1 = 0. .data最適化は全くされていないので無駄が多いコードですが、正しくアセンブリを出力できるようになってきています。
コンパイラの作業が終わっても、次はアセンブラとリンカが必要なので、まだまだ時間が掛かりそうで気が遠くなります。いつか公開できる日が来ることを祈りつつ。