SBC1802ルーズキットの製作(ELF対応編)

2021/05/14

 CDP1802は、以前から気になっていたCPUで、インターシルを買収したルネサスからMILスペックのCDP1802Aが宇宙用途や軍事用途向けに現在でも販売されています。CDP1802は、1976年に発表され、当時としては最新の Silicon on Sapphire (SOS)CMOSプロセスで製造されていたたため、低消費電力、放射線に強い特徴があります。これは、サブストレーションとMOSFETのアイソレーションにPN接合ではなく絶縁体のサファイアを使用しているため、漏れ電流がほとんどない、放射線による電荷の発生が少ないためです。


CDP1802の手持ちがあったので、いつか動かしみたいと思っていました。COSMAC ELFといったマイコンシステムを再現した例もありましたが、SBC1802ルーズキットが発売されましたので、さっそく製作することにしました。


SBC1802ルーズキットでは、BASIC(RCA BASIC3)が走りますが、COSMAC ELF系統のソフトウェア資産も魅力的です。そこで、下記を実現できるようにしました。


・64KB EEPROM(W27C512)に複数のソフトウェアを焼けるようにする

・"The 1802 Membership Card"や"Pico/Elf"のROMに対応してみる

・シリアル入力RXDを-EF2と-EF3に接続する

・CPUクロック周波数の切り替えができるようにする


①64KB EEPROM(W27C512)に複数のソフトウェアを焼けるようにする

今回は、27256、AT28C256、W27C512に対応させるようにしました。W27C512の場合、2個の32KBのROM、1個の32KBのROM+2個の16KBのROM、4個の16KBのROMのバリエーションに対応できます。

ROM-1pinとROM-27pinをプルアップ抵抗(4.7KΩ)を入れた後、下記のような構成のジャンパ切替ヘッダーを追加しました。

CPU-A14  ◉ ◉ CPU-A14
ROM-1pin ◉ ◉ ROM-27pin
GND ◉ ◉ GND

使用例:

・27256の場合、CPU-A14<->ROM-27pin

・AT28C256の場合、CPU-A14<->ROM-1pin

・W27C512(最初の32KBのROM)の場合、ROM-1pin<->GND、CPU-A14<->ROM-27pin

・W27C512(2番目の32KBのROM)の場合、CPU-A14<->ROM-27pin


64KB EEPROM(W27C512)には、"The 1802 Membership Card"の"MCSMP20A.bin"と"Pico/Elf"の"pico_diskless.hex"を焼くことにしました。


②"The 1802 Membership Card"や"Pico/Elf"のROMに対応してみる

当初のCOSMAC ELFは、0000Hに配置されたSRAMしかなく、プログラムは、SWによって、SRAMにプログラムを書き込んだ後、実行を開始するようになっていました。CDP1802には、このための"LOAD"という状態があり、プログラムの書き込みができるように設計されていました。当時の汎用コンピュータ(メインフレーム)でもブートストラップという起動プログラムは、パネルから手入力するようになっていました。


さて、COSMAC ELFの進化過程で互換性を保つため、ROMは8000Hに配置されるようになり、ROMプログラムは、8000Hを前提にしているものが多くあります。


"The 1802 Membership Card"では、0000Hに配置できるROMもあります。RCA BASIC3も、0000Hに配置できるROMです。一方、"Pico/Elf"では、基本的にROMは、8000Hに配置されるようになっています。


"The 1802 Membership Card"は、Lee A. Hartさんのプロジェクトで、いろいろなガジェットキットを頒布しています。"Pico/Elf"は、Mike Rileyさんのプロジェクトで、COSMAC ELFを進化させ、専用OSや、専用基板の頒布をしています。


SBC1802に"Pico/Elf"の"Disk-less ROM"を焼いてみましたが、やっぱり動きません。CPUは、0000Hから実行しますが、ROMプログラムは、8000H用ですから当たり前です。


"Pico/Elf"の回路を確認すると、まずリセット後、8000HからRAM領域、0000HからROM領域になり、A15=0のプログラムが、A15=1の領域にブランチしてフェッチするとROM領域とRAM領域をスワップして、0000HからRAM領域、8000HからROM領域になります。今回は、SBC1802の回路をできるだけそのままに、まずリセット後、0000HからのROM領域のみ有効にし、A15=0のプログラムが、A15=1の領域にブランチしてフェッチすると0000HからRAM領域、8000HからROM領域にしました。


下記が追加した参考回路です。手持ちの部品で実現してみました。今回は、CPUの横にソケットを配置していただいたため、ピギーバック基板を容易に作成でき、助かりました。


③シリアル入力RXDを-EF2と-EF3に接続する

"RCA BASIC3"では、-EF3シリアル入力RXD用に使用していますが、"Pico/Elf"では、-EF2を使っていますので、-EF2と-EF3を接続しました。特に副作用は無いようです。


④CPUクロック周波数の切り替えができるようにする

"RCA BASIC3"は、1.79MHzのクロックを前提にしていますが、"Pico/Elf"では、4MHzを使用しています。少々オーバースペックですが、シリアルI/Fの速度の関係がありますので、切替できるように考えました。


水晶振動子で、1.79MHzは、市場で見つかりませんでしたので、セラミック振動子を使用することにしました。幸いeBayで、1.8MHzが見つかったからです。5%程度の誤差はありますが、シリアルI/Fのクロック偏差の範囲で使用可能と判断しました。


セラミック振動子のために、Q1水晶振動子端子の真ん中に接地用のソケットを追加し、3ピン化して、水晶振動子でもセラミック振動子でも差し替えて使用可能にしました。


MA7の切り替えは、ヘッダーにソケットを裏表逆に差し込んで切り替えられるようにしました。

下記は、SBCモードにした状態の全体像です。



下記は、"The 1802 Membership Card"のモニタ起動後、RCA BASIC3に入った状態です。



次は、"ELF"モードで、CPUクロック用に4MHzのセラミック振動子に切替えた状態の全体像です。



下記は、"Pico/Elf"のディスクレスROMで、メニューが表示された状態です。

FORTH、LISPも動作させることができました。



以上、CDP1802に触れることができました。参考にしていただければと思います。

CPUのコネクタは、結構便利で気に入っています。

(再クロール更新:2022/12/22)