がじぇっとるねさすプロジェクトの1つGR-PEACHの作例として作ったPDP-11コンソールです。PDP-11シミュレータ部分はSIMHを利用しています。
GR-PEACHはmbedプラットフォームながらCortex-A9(400MHz),10MBのSRAMを内蔵したRZ/A1Hを搭載するという変態ボード。
※ベータテスターとして参加したので、この作例は試作版のrev.Bを使用しています。
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が動作することまで確認。
PDP-11/40のKY-11Dをモデルに検討。
構成部品は
程度。
マニュアルを調べてみるとトグルスイッチは右側の5個だけモーメンタリスイッチだということが判明。同じ品種でオルタネイトとモーメンタリの両方が揃っているものを探す必要がある。
直ぐに調達出来そうだったのはNKKのA-12PとA-15Pだったのでこれを採用(マルツで購入)。
ただし、このスイッチはリードがスイッチ軸の中心から1mmオフセットしている。
LEDは味を出すために、樹脂部が赤色のものをチョイス。手元に余っていた3mmのものをそのまま使用。
表面にスモークのアクリルパネルを配置するため、スイッチの高さを考慮した上で浮かした状態ではんだづけしている。(15mmのスペーサが合いそうだったので、14mm程度か)
※左側はダイナミック点灯、右側はGPIOで点灯させるため、明るさに差異が発生してしまう。そのため、電流制限抵抗はそれぞれ150Ω,1kΩを採用。
こいつが最大の難関で、3ポジションのチューブラーキータイプがなかなか見つからない。digikeyでに1,850円程度のものがあったが高過ぎる。仕方がないので、SparkFunの2Pのもので妥協した(こちらは千石で280円)。
ぎりぎり押せるツマミ幅を8mm前後とし、トグルスイッチを300mil(7.56mm)間隔で配置。ちょうど秋月のA基板で18個並べられる。
これで左側の18bit分の入力/出力部を構成可能。
右側は同じくA基板をカットして使用。ただし、2枚並べた時に継ぎ目が300milグリッドに載らないので、少々カットして合うように調整。
※継ぎ目部分にはダミーのツマミが配置されるので、はんだづけが必要な部品が載ることは無い。
はんだづけ前にダミーツマミやキースイッチ、スペーサの穴あけを忘れずに。
スイッチのつまみはLightWaveでモデリング。
LightWaveからのSTL出力がイマイチなので、一旦LWOで保存してからMetasequoiaでSTL出力するという手順を踏んでいる。
続いて、3Dプリンタで出力(ABSフィラメント)。
実は、ニュートラル位置が上向きのスイッチと下向きのスイッチが存在するため、2タイプ必要。
軸穴はすきまばめ。軸径が2.6mmだったので、2.5mmの下穴+3mmタップ加工でピッタリ。
仮配置して確認。
つまみは塗装だとすぐに剥げそうだったので、染色により色を付けることに決定。樹脂用着色染料SDNを利用した。
裏面の説明書きには無いが、グーグル先生がABSは80℃で良いらしいと教えてくれた。
水で20倍に薄め加熱。85℃辺りで火を止めてツマミを入れて攪拌。2分程度で60℃位まで温度が下がってしまうため、再度加熱。
これを好みの色合いになるまで繰り返す。
再び同じ色に染めることは極めて困難なので、必要数+αを同時に染めること。
染め上がったら、最後に中性洗剤で洗って完成。
GR-PEACHでは、GPIOを65本取れなかったため(厳密にはXBee端子から取れば足りたが配線が困難)、CPLDでI/Oエクスパンダを作成することに。
手元にあったオプティマイズさんのMAX2 CPLD(EPM570T100C5N)を使用した。
左側のAddress/Data display LEDとスイッチ入力の計52ポートをドライブし、ダイナミック点灯回路を内蔵。GR-PEACHとのI/FはSPI。ここまで組み込んでも241LEで済んだ。
右側のスイッチとキースイッチについては割り込み駆動するため、InterruptInを使用した。
GR-PEACH(と言うかRZ/A)はIRQ割り込み入力が8本しか使えず、更にそのポートの組み合わせが決まっている。
今回は色塗り部分のポートをアサインした。
IRQ0 | P1_0 | P2_14 | P4_8 | P5_8 | P6_8 | P7_9 | P8_2/P9_1 |
---|---|---|---|---|---|---|---|
IRQ1 | P1_1 | P2_15 | P4_8 | P6_9 | P7_8 | P8_3/P11_15 | |
IRQ2 | P1_2 | P1_8 | P3_0 | P4_10 | P5_9 | P6_3 | P6_10/P7_10 |
IRQ3 | P1_3 | P1_9 | P4_11 | P6_4 | P6_11 | P7_11/P11_12 | |
IRQ4 | P1_4 | P1_10 | P3_3 | P4_12 | P6_1 | P6_12/P7_12 | |
IRQ5 | P1_5 | P1_11 | P2_0 | P4_13 | P6_0 | P6_13 | P7_13/P8_7 |
IRQ6 | P1_6 | P1_12 | P3_1 | P3_9 | P4_14 | P5_6 | P6_14/P7_14 |
IRQ7 | P1_7 | P1_13 | P4_15 | P6_2/P6_15 |
ロゴやラベルを含めてIllustratorでデザイン。カットはいつも通りemerge+さんに依頼。
ロゴはカッティングマシンでシートをカットして転写。細すぎてうまく切れないという問題が発生したものの、修正しながらなんとか貼り付け。
ラベルは、エーワンの手作りステッカー(下地が透けないタイプ)を使用。これならインクジェットプリンタで印刷してるのに擦っても消えない。
A4サイズだと、保護フィルムを気泡無く貼ることが困難。複数組印刷して生きているモノだけ拾う作戦。
で、完成。
抵抗やセラコンはチップ部品を使ったので、ほとんど目立たない。
今回の製作では、3D CADは一切使わずに設計を行っている。
基本的に、前述のIllustratorでの作画とスペーサ高を見積もるためのサイドビューをメモ書きした程度。
どうも3D CADの操作性には慣れることができない。