PDP-11 on GR-PEACH (2015.3.22)

がじぇっとるねさすプロジェクトの1つGR-PEACHの作例として作ったPDP-11コンソールです。PDP-11シミュレータ部分はSIMHを利用しています。
GR-PEACHはmbedプラットフォームながらCortex-A9(400MHz),10MBのSRAMを内蔵したRZ/A1Hを搭載するという変態ボード。
※ベータテスターとして参加したので、この作例は試作版のrev.Bを使用しています。

1. SIMHの移植

SIMHはレトロコンピュータシミュレータの定番なので詳しい説明は割愛します。
最新版だとコード量が多くて読むのが大変だったので、一つ前のV2.9-11ベースで。

シミュレータコントロール部の"scp.c"と"scp_tty.c"を合体して、main.cppとして作業を開始。

mbedに移植する上で問題となるのは

でしょうか。
かなりゆるいC実装のため、C++コンパイラではそこそこ修正が必要。
tty周りはSerialで実装し直せばOK。read_lineとかも組み込みっぽい実装にするだけ。
ファイルI/OはSDFilesystemでほぼそのまま実装可能(ただし、ファイル名の先頭に"/SD"を付ける必要あり)。

GR-PEACHは10MBのメモリを内蔵しているものの、標準状態のメモリコンフィグでは1MB程度しか使えないので、startupファイルの修正も必要。

/mbed-src/targets/cmsis/TARGET_RZ_A1H/TOOLCHAIN_ARM_STD/startup_MBRZA1H.s
USR_Stack_Size  EQU     0x00180000
Heap_Size       EQU     0x00600000
    

ひとまず、ビルドが通ってUNIXv6が動作することまで確認。

2. コンソールのハードウェア

PDP-11/40のKY-11Dをモデルに検討。
構成部品は

程度。

回路図

2.1.トグルスイッチ

マニュアルを調べてみるとトグルスイッチは右側の5個だけモーメンタリスイッチだということが判明。同じ品種でオルタネイトとモーメンタリの両方が揃っているものを探す必要がある。
直ぐに調達出来そうだったのはNKKのA-12PとA-15Pだったのでこれを採用(マルツで購入)。
ただし、このスイッチはリードがスイッチ軸の中心から1mmオフセットしている。

2.2.LED

LEDは味を出すために、樹脂部が赤色のものをチョイス。手元に余っていた3mmのものをそのまま使用。
表面にスモークのアクリルパネルを配置するため、スイッチの高さを考慮した上で浮かした状態ではんだづけしている。(15mmのスペーサが合いそうだったので、14mm程度か)
※左側はダイナミック点灯、右側はGPIOで点灯させるため、明るさに差異が発生してしまう。そのため、電流制限抵抗はそれぞれ150Ω,1kΩを採用。

2.3.キースイッチ

こいつが最大の難関で、3ポジションのチューブラーキータイプがなかなか見つからない。digikeyでに1,850円程度のものがあったが高過ぎる。仕方がないので、SparkFunの2Pのもので妥協した(こちらは千石で280円)。

2.4.ユニバーサル基板

ぎりぎり押せるツマミ幅を8mm前後とし、トグルスイッチを300mil(7.56mm)間隔で配置。ちょうど秋月のA基板で18個並べられる。
これで左側の18bit分の入力/出力部を構成可能。

右側は同じくA基板をカットして使用。ただし、2枚並べた時に継ぎ目が300milグリッドに載らないので、少々カットして合うように調整。
※継ぎ目部分にはダミーのツマミが配置されるので、はんだづけが必要な部品が載ることは無い。
はんだづけ前にダミーツマミやキースイッチ、スペーサの穴あけを忘れずに。

2.5.スイッチつまみ

スイッチのつまみはLightWaveでモデリング。

LightWaveからのSTL出力がイマイチなので、一旦LWOで保存してからMetasequoiaでSTL出力するという手順を踏んでいる。

続いて、3Dプリンタで出力(ABSフィラメント)。

実は、ニュートラル位置が上向きのスイッチと下向きのスイッチが存在するため、2タイプ必要。

軸穴はすきまばめ。軸径が2.6mmだったので、2.5mmの下穴+3mmタップ加工でピッタリ。
仮配置して確認。

2.6.スイッチつまみの染色

つまみは塗装だとすぐに剥げそうだったので、染色により色を付けることに決定。樹脂用着色染料SDNを利用した。
裏面の説明書きには無いが、グーグル先生がABSは80℃で良いらしいと教えてくれた。
水で20倍に薄め加熱。85℃辺りで火を止めてツマミを入れて攪拌。2分程度で60℃位まで温度が下がってしまうため、再度加熱。 これを好みの色合いになるまで繰り返す。
再び同じ色に染めることは極めて困難なので、必要数+αを同時に染めること。

染め上がったら、最後に中性洗剤で洗って完成。

2.7.CPLD

GR-PEACHでは、GPIOを65本取れなかったため(厳密にはXBee端子から取れば足りたが配線が困難)、CPLDでI/Oエクスパンダを作成することに。
手元にあったオプティマイズさんのMAX2 CPLD(EPM570T100C5N)を使用した。
左側のAddress/Data display LEDとスイッチ入力の計52ポートをドライブし、ダイナミック点灯回路を内蔵。GR-PEACHとのI/FはSPI。ここまで組み込んでも241LEで済んだ。

2.8.操作系スイッチ

右側のスイッチとキースイッチについては割り込み駆動するため、InterruptInを使用した。
GR-PEACH(と言うかRZ/A)はIRQ割り込み入力が8本しか使えず、更にそのポートの組み合わせが決まっている。
今回は色塗り部分のポートをアサインした。

IRQ0P1_0P2_14P4_8P5_8P6_8P7_9P8_2/P9_1
IRQ1P1_1P2_15P4_8P6_9P7_8P8_3/P11_15
IRQ2P1_2P1_8P3_0P4_10P5_9P6_3P6_10/P7_10
IRQ3P1_3P1_9P4_11P6_4P6_11P7_11/P11_12
IRQ4P1_4P1_10P3_3P4_12P6_1P6_12/P7_12
IRQ5P1_5P1_11P2_0P4_13P6_0P6_13P7_13/P8_7
IRQ6P1_6P1_12P3_1P3_9P4_14P5_6P6_14/P7_14
IRQ7P1_7P1_13P4_15P6_2/P6_15

2.9.アクリルパネル

ロゴやラベルを含めてIllustratorでデザイン。カットはいつも通りemerge+さんに依頼。

2.10.ロゴ

ロゴはカッティングマシンでシートをカットして転写。細すぎてうまく切れないという問題が発生したものの、修正しながらなんとか貼り付け。

2.11.ラベル

ラベルは、エーワンの手作りステッカー(下地が透けないタイプ)を使用。これならインクジェットプリンタで印刷してるのに擦っても消えない。
A4サイズだと、保護フィルムを気泡無く貼ることが困難。複数組印刷して生きているモノだけ拾う作戦。

で、完成。

抵抗やセラコンはチップ部品を使ったので、ほとんど目立たない。

その他

今回の製作では、3D CADは一切使わずに設計を行っている。
基本的に、前述のIllustratorでの作画とスペーサ高を見積もるためのサイドビューをメモ書きした程度。
どうも3D CADの操作性には慣れることができない。

動画