スペースシャトルに搭載された59ポンドのプリンターのリバースエンジニアリング
(righto.com)- 1981年の最初の Shuttle 飛行を前に、手順・ミッション計画・気象報告を乗組員へ送るため、Interim Teleprinter System が7か月で暫定装置として作られた
- このプリンターは軍用通信端末を改造した装置で、突起文字が刻まれた回転ドラム と80個のハンマーを使って1行ずつ高速に印字する
- 当初は TAGS の準備が整うまで数回だけ使う計画だったが、TAGS の紙詰まり問題のため、50回以上の飛行でバックアップとして使われ続けた
- 59ポンドの装置を軌道に上げるだけでも、Shuttle 基準で1飛行あたり150万ドル以上かかり、騒音・過熱・可燃性の制約から、防音材や1W待機モードなどの改造が必要だった
- 復元では溶けたゴムローラーと機械的なアライメント問題が解決され、リバースエンジニアリングした FSK変調データ を送って実際の印字に成功した
Shuttle にプリンターが必要だった理由
- Apollo ミッションでは、地上から無線で情報を読み上げ、乗組員がそれを書き取る方式だった
- NASA は Space Shuttle にテキストと画像を送れる装置を載せようとしており、元の計画は78ポンドの高解像度ファクス型装置 Uplink Text & Graphics System(TAGS)だった
- TAGS はデジタルデータストリームで Shuttle にグレースケール画像を送り、機内 CRT と光ファイバーフェースプレートを通して感光銀塩紙に1行ずつ画像を形成する
- 紙は260ºFの高温ローラーを25秒間通過して現像される
- TAGS には Tracking and Data Relay Satellite System(TDRS)が必要だったが、TDRS は6回目の Shuttle 飛行まで準備が整わなかった
- 最初の Shuttle 打ち上げの7か月前、NASA は既存の音声チャネルでリアルタイムの飛行計画変更と運用データを送る 暫定システム を作ることにした
軍用端末を Shuttle 用に小型化して改造
- ベース機器は Army が開発し、Navy と Air Force でも使われた AN/UGC-74 Tactical Teletype 軍用通信端末だった
- 元の端末は ASCII と Baudot、複数のボーレート、電流ループと電圧信号をサポートし、双方向通信用のキーボードも備えていた
- Motorola 6800 マイクロプロセッサで制御される ワードプロセッサ機能 も含まれていた
- 敵対的環境で無線送信時間を減らすため、メッセージをオフラインで作成できるようにした機能である
- Shuttle の Interim Teleprinter は受信専用でキーボードもないため、この機能は使われなかった
- 軍用端末は100ポンドあったが、Shuttle 用改造によって59ポンドまで減らされた
- キーボードと前面の多くの制御装置が取り外された
- より軽いフレームに変更され、Shuttle の収納ロッカーに取り付けるための水平レールが追加された
- 軍用インターフェースモジュールは取り外され、Shuttle 用 FSK インターフェースボードに置き換えられた
回転ドラムと80個のハンマーで1行ずつ印字
- Interim Teleprinter は 回転ドラム に突起文字を刻み、ハンマーがリボンと紙をドラム文字に打ちつけて印字する方式である
- ドラムは1行の長さに合わせた80文字幅で、各印字位置ごとにハンマーが1つあり、合計80個のハンマーを備える
- 各位置には64個の出力可能文字がドラム周囲に沿って配置されている
- 空白文字は別に存在せず、空白は何も打たないことで表現する
- 軍用ドラムの特殊文字10個は、Shuttle でより有用な記号に置き換えられた
;@[\\]^!\"#$は θ✓‾↑↓~αβΔϕ に置き換えられた
- 1行はドラムが1回転する間に印字され、目的の文字が各位置の前を通過する正確な瞬間にハンマーを打たなければならない
- 内蔵テスト文は
"THE LAZY YELLOW DOG WAS CAUGHT BY THE SLOW RED FOX AS HE LAY SLEEPING IN THE SUN"である- 伝統的な “quick brown fox” 文に似ているが、J、K、M、Q、V が含まれていない
- ちょうど80文字で、空白をダイヤモンド
◊に置き換えると80列すべてが動作するか確認するのに便利である
音声リンクをシリアルデータに復元するカスタムボード
- 元の軍用 teleprinter はシリアルビットストリームを入力として受け取っていたが、Shuttle ではデータが 音声リンクの周波数 にエンコードされていた
- Shuttle 用カスタムボード3枚は音声データを復調し、メッセージ受信時にプリンターの電源を入れ、その後再び待機モードへ戻す
- リバースエンジニアリングの結果、シリアルビットストリームは Frequency Shift Keying(FSK)でエンコードされていたことが分かった
- 1 は 3600Hz、0 は 7200Hz で表現される
- シリアルデータは 600 baud、even parity、stop bit 1個で送信される
- 復調の流れは、音声入力を増幅・フィルタリングした後、しきい値で正弦波を矩形波に変換し、デジタル自己相関で 3600Hz と 7200Hz を区別する構成である
- 制御ボードは64ビットシフトレジスタで入力を139µs遅延させた後、元の入力と XOR する
- 7200Hz 信号は 139µs ごとに繰り返されるため、入力と遅延入力は同じになり、XOR 結果は 0 になる
- 3600Hz 矩形波は 139µs ごとに状態が切り替わるため、XOR 結果は 1 になる
- デジタル復調器は信号レベルに左右されにくく、アナログ復調器で問題になりうる高調波や精密調整フィルタへの依存を避けられる
- 復調後は 400Hz ローパスフィルタとしきい値処理を経て再び二値信号にし、carrier が検出されたときだけプリンターロジックボードへ送る
1970年代のロジックカードが印字を制御する仕組み
- 軍用 teleprinter のロジックカード4枚は Shuttle でもそのまま使われた
- CPU カード
- メモリカード
- 通信カード
- 印字制御カード
- 回路が大きい理由は、1970年代のマイクロプロセッサ技術では、アドレスデコード、バッファリング、ラッチなどの機能に多くの 7400 系ロジックチップが必要だったためである
- CPU カード は Motorola 6800 CPU、4KB メモリ、プログラム ROM を備える
- ASCII 文字列1行をプリントドラムコードに変換してメモリに保存する
- 設定とセルフテストも担当する
- 印字制御カード はドラム位置とメモリバッファを合わせてハンマーを駆動する
- 各ドラム行ごとに80文字メモリバッファを DMA でスキャンする
- メモリ値が現在のドラム行番号と一致すると、対応するハンマーを発射する
- 20枚の hammer card がそれぞれ4個のハンマーを持ち、電気的には20本のボード選択線と4本のハンマー選択線のマトリクス構造で制御される
- 通信カード は 8251A USART でシリアルデータストリームを CPU が使うバイト列に変換する
- 軍用端末は送受信の両方をサポートしていたが、Shuttle teleprinter では受信だけを使った
- メモリカード はワードプロセッサ機能のために 8KB RAM と 8KB ROM を提供する
- マニュアル上は、このカードがなくてもワードプロセッサ機能を除けばプリンターは動作する
- Shuttle ではワードプロセッサが不要だったにもかかわらず、このカードが取り外されなかった点は疑問として残る
電源設計と軍用セキュリティ機能の痕跡
- 電源ボードは複数の部分へ個別に電力を供給する スイッチング電源 で構成されている
- マイクロプロセッサ用 +5V、+12V、-5V
- Shuttle で取り外されたキーボード・dustcover・interface module 用 +5V、-8.6V、+8.6V
- 状態表示灯用電源
- ドラムモーター電源はドラム回転速度を制御するために調整される
- ドラムセンサーが各行ごとにフィードバックパルスを提供する
- ドラムが遅すぎると電圧を上げ、速すぎると電圧を下げる
- ハンマー電源は特異的に 600mA の定電流 を維持するよう設計されている
- プリンターがアクティブになると +18V を生成する
- ハンマーがあまり電流を使わない場合、余った電流は抵抗へ流される
- この設計は、メッセージトラフィック中に印字情報を隠すための軍用機能だった
- 電力過渡の変化を監視して、どのハンマーが動作したかを突き止める攻撃を防ぐ目的である
- Space Shuttle では無意味で、電力を浪費するだけの機能になっていた
- 軍用 teleprinter は 22–30VDC、115VAC、230VAC、12VDC バッテリーバックアップに対応していたが、Shuttle teleprinter は 28VDC で動作した
Shuttle 内部への搭載と運用上の制約
- Interim Teleprinter は flight deck に置くには大きすぎたため、1層下の middeck の収納ロッカーに搭載された
- 位置は右後方の MA9F 収納ロッカーで、電源と音声接続のためロッカー扉にコネクターパネルが設置された
- impact printing 方式のため騒音が大きく、ロッカー内に入れても外側で 69.5dB あった
- 解決策はロッカーに防音材を入れることだった
- 複数の絶縁材を試験した後、毒性要件を満たした材料が選ばれた
- 防音材には可燃性 waiver も必要だった
- 冷却のない絶縁ロッカーは 過熱 問題を生んだ
- 軍用 teleprinter は idle 状態でも 34W を消費し、6周回するだけでも危険なほど熱くなりうる
- Shuttle 用設計では 1W しか使わない待機モードが追加された
- 地上信号が検出されると電源が入り、使用後は待機モードへ戻る
- プリンターが待機モードから復帰したことを Mission Control が把握できるよう、tone を地上へ送る回路も追加された
- 打ち上げ中は teleprinter が使う音声接続が乗組員通信に必要だったため、teleprinter は打ち上げ後に接続され、panel L9 の音声設定が再構成された
TAGS と TIPS へ続く置き換えの流れ
- Interim Teleprinter は TAGS が運用されるまでだけ使う暫定装置だったが、TAGS の信頼性問題が計画を変えた
- 最初の TDRS 衛星は6回目の Shuttle 飛行 STS-6 で打ち上げられ、TAGS は STS-7 で使えるようになった
- TAGS は STS-7 で早速紙詰まりを起こし、その後も同じ問題が続いた
- STS-35 ではプリンターが詰まった後、詰まり解除ツールまで折れた
- TAGS の不安定さのため、Interim Teleprinter はバックアップとして維持された
- 約10年後、Thermal Impulse Printer System(TIPS)が導入され、STS-56 の1993年飛行で使われたとみられる
- TIPS の信頼性が確認された後、teleprinter と TAGS の両方を置き換えた
- TIPS は Raytheon TDU-850 市販プリンターをベースにした装置だった
- 当時の市販価格は 4,950ドルだった
- Shuttle の S-Band と Ku-Band 通信システムを接続するためのカスタム通信インターフェースボードが内部に入っていた
- このインターフェースにより、乗組員は機内の個人用コンピューターのプリンターとしても TIPS を利用できた
復元とリバースエンジニアリングの結果
- 入手した機器は飛行用ではなく、地上に残っていた開発システムである可能性が高い
- ボードに bodge wire と追加部品が見える
- Shuttle 用カスタムボード3枚には、航空宇宙用ボードで一般的な conformal coating がない
- 機器には “Not for flight” 表示がある
- 復元で最大の問題は、ゴムローラーが液体のように変質し、機構全体をベタつかせていたことだった
- プリンターを分解して機械部分を清掃・再調整し、ハンマー間隔も印字品質が読める程度まで調整した
- Shuttle 用カスタムボード3枚をリバースエンジニアリングし、プリンターが受け取るデータ形式が 音声エンコードされたシリアルデータ であることを確認した
- FSK 変調データを送る方式で、プリンターは実際に印字に成功した
暫定装置だったが長く生き残った設計
- Interim Teleprinter は重く、過熱の危険があり、既製品ベースでありながら前面部・ドラム・インターフェース・フレームまで大きく改造する必要があった
- Shuttle で使わないワードプロセッサ機能や定電流セキュリティ機能もそのまま受け継いでいた
- 開発期間はわずか7か月で、毒性や可燃性などの制約が取りうるアプローチを大きく制限した
- 結果として Interim Teleprinter は50回以上の飛行で使われ、TAGS より信頼できるバックアップとして残った
- 名前に反して、Interim Teleprinter は短期の暫定装置にとどまらず、意図よりはるかに長く使われた解決策となった
1件のコメント
Hacker News のコメント
Shuttle テレプリンターのドラムは、ASCII の特殊文字 10 個を Shuttle でより有用な記号に置き換えて出力していた。たとえば角度を表すギリシャ文字など
具体的には
;@[\]^!"#$の各文字がθ~αβΔに置き換えられるため息が出るのは、この古代のプリンターはそれを印字できたのに、最新の Android の Chrome ブラウザでは正しく表示できないという点
normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif;で、News YC はVerdana, Geneva, sans-serif;を使っているhttps://unicode.scarfboy.com/ によると該当する文字は次のとおりで、表示崩れは想定内:
U+03B8 θ GREEK SMALL LETTER THETA,U+2713 CHECK MARK,U+203E ‾ OVERLINE,U+2191 ↑ UPWARDS ARROW,U+2193 ↓ DOWNWARDS ARROW,U+007E ~ TILDE,U+03B1 α GREEK SMALL LETTER ALPHA,U+03B2 β GREEK SMALL LETTER BETA,U+0394 Δ GREEK CAPITAL LETTER DELTA,U+03D5 ϕ GREEK PHI SYMBOL表示されないのは U+2713 CHECK MARK,
U+203E ‾ OVERLINE,U+2191 ↑ UPWARDS ARROW,U+2193 ↓ DOWNWARDS ARROW,U+03D5 ϕ GREEK PHI SYMBOLで、Arial には大半が入っているが Verdana にはない、というところまでは分かっている文字エンコーディングは本当に面白い
Ken が見ているなら、私の端末では数値文字参照でエンコードされた文字が具体的な問題だった。Windows と Ubuntu で Chrome 開発者ツールを使って実際の文字に置き換えてみると、正常にレンダリングされた
タグを外すと Android でも文字がレンダリングされ、少なくとも私の環境では解決した
これを Chrome や Android のせいにできるのかはよく分からない
著者です。質問があれば答えます
プリンターに入れる白紙をどれくらい積んでいて、その量をどう決めていたのかが気になる。写真のフォントサイズを見ると、「数千行」が事実なら紙も少なくとも数ポンドは余計に必要だったはず
回転ドラムが Shuttle に与えるジャイロスコープ効果も考慮していたと思う。Shuttle のコンピューターがハードドライブではなくテープドライブを使っていた理由の一つも、無重量下で姿勢に影響し得るからだった。おそらく質量が十分小さくて問題にならなかったか、ハードドライブのように 100% 常時回転する装置ではなかったので大丈夫だったのかもしれない
Teletype Model 40 を検討しなかったという点も驚き。より軽く、回転ドラムがなく、受信専用構成があってキーボードを切り落とす必要もなく、ASCII ベースで、軍用機ですでに飛行認証を受けた機器だった。ただし時期が合わなかった可能性はある。私が初めて見たのは 1984 年で、そのとき「新型」扱いだったので、1981 年には存在しなかったのかもしれない
Model 40 は個別の文字パレットが入った回転ベルトを使い、各列に 1 つずつある 80 個のハンマーが適切なタイミングで叩いて文字を出力していた。動画ではベルトのプーリーが回る様子も見られる。一定時間使わないと電源も落ちる。パレットを差し替えるいたずらも可能だったが、個々のパレットは追跡せず、ベルトの開始位置だけをフラグで示していたため、その後の順序をいじると M の代わりに N が出る、といった具合になった
https://www.youtube.com/watch?v=whKVGefscro
https://en.wikipedia.org/wiki/Geneva_drive
記事を見る限り、CPU カードの 4KB ROM 1 個とワードプロセッサカードの 8KB ROM 2 個、合計 3 個だと理解している
これはドラムプリンターで、同時代のもう一つの一般的な高速プリンターはチェーンプリンターだった
基本的には各桁ごとにハンマーが一列に並び、文字チェーンがハンマーの前を高速で通過するタイミングで叩いて印字する、同系統の構造で、本当に速かった
Shuttleでチェーンプリンターを選ばなかった理由は、おそらく故障モードのためだった可能性が高い。チェーンが切れるとプリンターの片側に飛び出して壁を突き破ることがあり、オペレーターには横に立たないよう注意されていた
出力物の保管棚の向こうの隣室にあったにもかかわらず、20フィート離れた場所で印刷音を聞くと怖いほどだった
ラボでのいたずらは、改行なしで
-や=を一行ずっと印字し続けるプログラムを走らせることで、そうすると重ね打ちになり、最終的には紙が切れたりプリンターがよく詰まったりした特に月曜の授業前に提出しなければならないプログラムの出力が集中する日曜の夜にやると、とても「楽しい」いたずらだった
1981年には商用/コンシューマー向けのドットマトリクスプリンターはすでにあったように思う。そうした機器はドラム式ラインプリンターよりずっと軽く、消費電力も少なかったはず
Shuttleが開発されていた時期には、プリンター自体がほとんどなかった。インクジェットやレーザーのデスクトッププリンターは、Shuttleの初飛行である1981年のわずか1〜3年前に商用化されたばかりで、まだ信頼性は高くなかった。デスクトッププリンターはいまでもテレタイプやドットマトリクスプリンターほど信頼性が高くない。航空会社がゲートで搭乗者名簿を印刷するときにドットマトリクスを使うのには理由がある
当時はインクプロッター、テレプリンター、ファクス機が主流だった。しかしプロッターはテキストを書くにはひどく遅い。無線ファクス機は十分に頑丈なら可能だったかもしれないが、おそらくテレタイプ並みに重く、はるかに遅かっただろう。本当の利点は図表や写真の出力くらいだった
Shuttleが設計されていた1970年代には、安くて軽くて頑丈なドットマトリクスプリンターはまだなかった。商用既製品(COTS)部品を使うという発想もまだ定着する前で、それはSTSがすでに製造され運用されてから何年も経ってようやく来た流れだった
ドットマトリクスプリンターが本当に懐かしい
https://youtube.com/watch?v=A_vXA058EDY
なぜマトリクスプリンターを使わなかったのか気になる
あるいは熱転写プリンターでも可能だったはず。その頃はファクス機が一般的だった
今度は出力サンプルを見たくなった
一方で、それで印刷したSnoopyカレンダーも格好よかっただろう
「ワードプロセッサーがShuttleには関係なかったのなら、なぜ重量を減らすためにこのカードを取り外さなかったのか?」への答えは、「私たちがアクセスしたShuttleテレプリンターは、おそらく地上に残っていた開発システムだったのだろう」という部分に見える
機械部品はまだ動く可能性があり、インクのサブスクも不要
「プリンターには機械的な問題が多く、主にゴムローラーが液体のように変化して機構を粘つかせて詰まらせていたため」と説明している