2020年12月26日土曜日

Z8000にPortable C Compilerを

かなりブログの投稿をさぼっていたのですが、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
最適化は全くされていないので無駄が多いコードですが、正しくアセンブリを出力できるようになってきています。
コンパイラの作業が終わっても、次はアセンブラとリンカが必要なので、まだまだ時間が掛かりそうで気が遠くなります。いつか公開できる日が来ることを祈りつつ。