Motorola 68000が世に出たのは1979年で、PCIバスがパソコンに載り始めるのはそれから10年以上あとになる。時代が違う2つだが、原理的に組み合わせられない理由はない。PCIはもともと特定のプロセッサーに依存しない設計だからだ。ポーランドのPiotr Grzesik氏は、68000にPCIスロットを2本備えた自作機を組み上げ、設計データとソースコードをMITライセンスで公開した。
基板は12×18cmのユニバーサル基板で、ほぼ全部が手配線だ。載せたのは10MHzの68000と1MBのSRAM、4KBのROM、それにシリアル通信と時計と入出力を兼ねるMC68681Pだ。PCIとCPUの橋渡しには書き換え可能な論理チップを使い、アドレスの振り分けや割り込みといった周辺の処理は別のチップに書いた。部品はどれも手持ちの寄せ集めで、産業用基板から外した68000や、壊れたマザーボードから取ったPCIスロットが混ざっている。
スロットは32ビット・5V仕様を2本置いた。ただし規格の33MHzではなく10MHzで走らせている。CPUと同じ速さにそろえておけば、橋渡しのチップで扱うタイミングが単純になるからだ。PCIは仕様上33MHzより遅くしてもよく、kHz帯まで落とせる。速度を落としたおかげで、基板の信号品質にも神経を使わずに済んだ。
厄介だったのはバイトの並び順の違いだ。68000は大きい桁を先に置き、PCIは小さい桁を先に置く。Grzesik氏は用途によって2通りの変換を使い分けた。32ビットのレジスタを読み書きするときは値が変わらないよう入れ替え、文字列や画面のピクセル列を扱うときはアドレスの並びが崩れないほうを選ぶ。
割り切った部分もある。カードが自分でバスを握ってメモリを直接読み書きする機能には対応しない。橋渡しのチップでピンが足りなくなったためだ。一方で割り込みは実装し、スロットごとに別のCPU割り込みレベルを割り当てた。それでもグラフィックスカードのCirrus Logic GD5440とS3 Trio64V2、シリアル増設カードのMosChip NM9835が動いた。GD5440は初期化用のプログラムがx86向けに書かれていて68000では動かせないため、データシートを頼りに初期化の手順を自前で書いている。
失敗も記録されている。使っていないGNT#という信号線をプルアップし忘れたせいで、カードがバスを勝手に駆動しようとし、実験用電源が過電流で落ちた。回路図を見直して原因が分かり、それまで認識しなかったカードも動くようになった。144本の端子を持つチップは、以前に手配線で実装した基板からアングルグラインダーで切り出して再利用している。
ネットワークにはRTL8029のカードを使った。データを直接転送する機能を必要としないNE2000互換なので、この設計の制約に収まる。ただしドライバーと通信処理については、PCIの学習と配線作業で疲れきったため、まるごとAIエージェントに書かせたとGrzesik氏は明かしている。割り込みの結線を間違えていたので自分で直した、とも書く。結果として遠隔操作用のサーバーとWebサーバーが68000の上で動いた。公開されているのは各チップの論理、ブートローダー、PCI周りの処理、カードごとのドライバーと回路図のPDFだ。