ALTAIR 8800b External View

MITS社のALTAIRシリーズは初期のマイクロプロセッサ使用のコンピュータとして有名です。8080AをCPUとして使用した第2世代のAltairシリーズ、ALTAIR 8800bを御覧にいれましょう。ALTAIR 8800bは最初のモデルのALTAIR 8800のコンソールパネルの機能を強化したもので、アキュムレータの内容を表示・変更させたり、I/Oポート空間の読み書きができます。
ここにあるALTAIR 8800bはMITS社で組み立てられ、完成品の形で輸入されたものです。マニュアルから段ボール箱までそろっています。マニュアルには使用方法はもちろん、回路図や動作原理や使用デバイスのデータシート、組み立て方法からトラブルシューティングに関することまで含まれて、300ページ以上のボリュームがあります。組み立て方法があるのは、キットとして販売されることが多かったからですね。キットの場合には、抵抗の1本からハンダ付けしていくことになります。組み立てテスト済みの基板をネジで締め上げるだけではありません。
しかも、このALTAIR 8800bにはCPUとコンソールパネルからの制御回路と電源くらいしか含まれていないので、これだけではコンピュータとして使用することができません。メモリもI/Oもまったく付いていないのです。ただし18スロットのマザーボードが内蔵されていて、後にS-100バスと呼ばれ最終的にはIEEE-696となる8800 bus規格を満たす基板を、16枚まで増設できます(2枚はCPUボードとパネルインターフェースボードが使用する)。オプションの基板でメモリやI/Oを増設して、やっとコンピュータのハードウェアが形を成すのです。逆にいえば、CPUは必須だから最初から付けておくが、メモリやI/Oは用途によって自由に選択できるべきという思想があったともいえます。ここまで書くと良く言い過ぎだとは思いますが。ただし、ソフトウェアはまだ1 Byteもありません。まぁ、適切なI/Oを選択して取り付けないと、外部記憶装置からプログラムをロードすることもできないのですけど。

これが正面からの眺めです。

Altair 8800b front view

俗にいうミニコンピュータタイプのシステムです。フロントパネルのトグルスイッチを操作することによって、全メモリ空間の読み書き、ステップ実行、システムリセットなどが可能ですし、動作中もCPUが何を行っているか、多数のLEDで監視することができます。
筐体のサイズは幅42.5 cm、高さ18 cm、奥行き44 cmとなっています。増設カードスペースが広くてほとんど空ですが、スイッチング電源でなく巨大なトランスで降圧しているため、質量は測っていませんが、かなりありますね。

後部には、コネクタ用の穴があらかじめ開けてある他、ファンと電源ケーブル、ヒューズが見えますね。

Altair 8800b rear view

コネクタ用の穴が、内部増設基板の数に比べて少ないような気もしますが。コネクタの穴から内部の電解コンデンサの一部が見えます。そういえば、ファンのベアリングがへたってきて、うるさいんだ。
ヒューズには3 A容量の遅延切断タイプが指定されています。実際の消費電力は内蔵する各種オプション基板次第でしょうね。
あ、左下にシリアル番号の記入された銘板が張り付けてあります。拡大してみましょう。

Altair 8800b serial number

うーん、テープで貼りつけてあるだけというのがなんとも。会社のロゴがフロントパネルやマニュアルのと異なっていますしね。と、思って良く見ると、昔は裏面の糊で接着されていたのかなぁ。私が付けたテープではないはずで、そうするとやはり製造10年経たずにはがれたか。やっぱりこの手の銘版はリベット止めでないとね。このシリアル番号からは製造時期がわかりませんが、マニュアルのバインダーにTested 5-5-78 Eileenと手書きで書いた小さな紙が貼ってあったので、おそらく1978年の5月5日と考えてよいのでしょう。あ、そうそう、マニュアルの初版は1976年のようですが、私の手元にあるのは1977年6月に再版されたもの。内容には1977年4月から5月にかけて修正が行われているようです。

では、フロントパネルを見ながら、機能と使い方など。

Altair 8800b front panel

LEDが2段にわたって並べられ、その下にスイッチがやはり2段になって並べられています。
細かい文字がつぶれてしまっていますが、補足しながら説明します。それと、これは他の写真と異なって電源を入れて少し操作したところ。故障歴はあるけれど、もちろん完動品です。LEDはパネル全体を覆う半透明のプラスチックパネルを通して、このように見えます。パネルの表示は、すべて同じプラスチックパネル面に印刷されたものです。

まず、それぞれのLEDの意味について。
上段の左端のPROTECTと書いてある白丸で囲まれた表示は、メモリの保護信号の表示です。ただし、これはALTAIR 8800bで新設され、対応しているメモリボードでないと機能自体に意味がありません。私の手持ちのメモリボードで対応しているものはないので、使ったことはありませんでした。
その隣のINTEという表示、上の写真では点灯していませんし、LEDのある部分に囲みもなにもないのでわかりにくいとは思いますが、PROTECTという表示と白く細長い四角の枠との間にINTEと書いてあって、その上に点灯するようになっているLEDがあります。これは8080AのINTE端子の状態を表していて、割り込みを受け付ける状態になっているときに点灯します。ここではリセット直後なので、禁止されていて点灯していません。
次は四角い横長の枠で囲まれた文字の部分ですが、ここにはMEMR, INP, M1, OUT, HLTA, STACK, INTと、8単語が並べられています。四角い枠の右下にはSTATUSと書いてあります。これはおわかりのように8080Aのステータス情報で、D7からD0に出力されるものが順に左から並べられているだけですね。コンソール操作の内部動作の都合上、命令をフェッチするタイミングで強制的にREADY信号で止められているため、MEMRとM1が点灯しています。ここはCPUをステップ動作なんかさせてみると、刻々とCPUが何を行っているかにつれて表示が変わります。
その横の、青地に表示されている場所にはD7, D6, D5, D4, D3, D2, D1, D0と書かれていて、もちろんデータバスの状態表示になっています。コンソールパネルでメモリなどのデータを読む操作をしたときには、その内容が表示されます。また、CPUが動作状態のときにはデータバスを介してやり取りされるデータが常に表示されます。たいていは薄ぼんやり光って読み取ることなどできないのですが、短い無限ループとか、I/O待ちなんかの短いループを実行するときには、特有のパターンで光ったりすることもありますね。D6とD5、D3とD2の間に区切りの縦棒が描かれています。これは3 bit単位で区切っているわけで、8進数表示に適したやり方ですね。LEDの間隔も等間隔でなく、この縦棒の部分は少し離れています。8080Aの命令体系は、8進数表示すると命令の種類がはっきりするようにできています。バイナリコードは異なるとはいえ、この性質は8008の頃と同じでした。スクラッチパッドレジスタ類が8種類あるとかが主な原因でしょうが。バイナリコードというと16進数表示が今は一般的かもしれませんが、当時は8進数を主にバイナリ表現に使っていたミニコンピュータメーカがあったりして、8進数表示も普及していたのです。後で説明しますが、ALTAIR 8800bのアドレス表示も3 bit区切りになっています。
以上で上段のLED表示は終わりです。下段のLED表示を、同じように左から説明していきましょう。といっても、こちらはもっと種類が少ないですけど。
左端、切れ目の入った白円で囲まれたLEDの下にはWAITと書いてあります。これはCPUのWAIT出力をそのまま表示しているだけです。コンソールパネルの動作の都合上、今は点灯しています。
その横のHLDAと書かれている位置には、消灯しているのでわかりにくいですが、CPUがバスを空けたという意味の信号表示になっています。これもCPUのHLDA信号を表示しているだけですね。
その横にはずっと水色で塗りつぶされている部分があります。ここにはよく見ると、2列の文字が表示されています。上の方にはMEMORYと書かれた後、A15からA0まで3 bitずつに区切られて表示されています。下はA7からA0の部分に文字がなく、I/Oと書かれた横に四角く枠で囲われてA7からA0までの表示があります。ここは、もちろんアドレス表示を行う場所で、コンソールパネルからメモリを読み書きするときには、そのアドレスが表示されています。I/Oを読み書きする場合には、左半分の上位アドレスのLED表示を兼用するわけです。CPUがRUN状態のときには、CPUが出力するアドレスバスの状態が刻々と表示されています。もちろん、普通は薄ぼんやりと光るだけで、人の目にはプログラムのどこを実行しているのかなんてわかりません。ただしタイトなループを実行している場合には、アドレスの上位ビットの変化する確率は小さいですから、だいたい実行中のプログラムのアドレスを読み取ることができます。
LED表示に8080Aのほとんどの信号やステータス信号がそのまま表示されていることに気付かれたでしょうか。8800 busには、これらの信号がすべて存在します。そのため、他のマイクロプロセッサを、それがソフトウェア上位互換のZ80 CPUであっても、8800 busシステムのCPUとして採用する場合、互換性の上で大変な問題になります。そもそも、8080Aを用いたコンピュータシステムの基本ハードウェアとしてALTAIR 8800bは開発されたのですから、これを欠点と言い切るのは誤りなんですけどね。8080 busが普及しすぎて当初の意図よりも広い応用を期待されてしまったのが、本来の問題なんでしょうけど。

次はスイッチの名称と役割を簡単に説明しましょう。
上段のスイッチはデータ投入用スイッチです。16個のスイッチがアドレス・データ表示LEDに揃えて並べられています。このスイッチはON-ONスイッチで、上下のどちらかの位置をとります。写真のように下に倒れているときは0を、上に上がっているときは1を表します。右側の8個のスイッチの上部はパネルが青く塗られていますね。データ表示LEDと同じように。つまりこの8個のスイッチでデータをメモリなどにセットすることができます。また、全部の16個のスイッチのパネル面の下半分は水色に塗られています。これはアドレス表示と同じ色で、やはりメモリ関係の操作に先立って、アドレスを設定するために使われることを示しています。このように、このスイッチは複数の役割を兼用しています。すると、左半分の8個のスイッチのパネル面上部に枠で囲った部分が気になります。ここにはSENSEと書かれています。今までALTAIR 8800bにはI/Oポートが存在しないようなことを書いてきましたが、実は嘘です。この8個のスイッチはI/Oアドレス空間の377(8)つまり0FFHに割り当てられていて、CPUがIN 0FFHという命令で読み込むことができます。最低限の入力ポートというわけですね。これをSENSEスイッチ機能と呼びます。簡単なプログラムテストくらいにしか使えそうになさそうですが、OSブート時のプログラム動作を、このSENSEスイッチの設定で変更するくらいのことには使えます。
下段のスイッチは、ある種のコマンドを実行させるためのものだと考えることができます。まぁ、一番左端に離れた場所にあるPOWERスイッチは、単なる電源スイッチで、これでメインの電源を切断することができます。ただ、動作中に袖でも引っ掛けた日には悲しいことになりそうですけど。まぁROMボードを内蔵して端末や外部記憶装置を外部に接続したターンキーシステムにしてしまえば、本体のスイッチを操作することは電源投入時と電源切断時だけで、あとは端末から操作すればよいのでしょうけど。ユーザによっては、この電源スイッチを使えなくしてしまう人もいたのでしょうね。内部でナイロンコネクタで電源部とつながっているので、ハンダ付け改造なしで、別の場所にスイッチを付けたり、電源スイッチを廃止したりできます。
残りの8個のスイッチは、すべて(ON)-NC-(ON)タイプのスイッチです。つまり、スイッチの位置は上に倒れた状態、中央で立っている状態、下に倒れた状態の、3ヶ所が許されていて、人が操作しないときには常に中央で立っている状態になっています。人が力を入れて上に倒したり下に倒したりしている間だけ、その倒れた状態を維持して、手を離すとバネの力で自動的に中央の状態に戻ります。8個のスイッチの表示を左側から、上下の順に書いていくと、STOP/RUN, SINGLE STEP/SLOW, EXAMINE/EX NEXT, DEPOSIT/DEP NEXT, RESET/EXT CLR, PROTECT/UNPROTECT, DISPLAY/LOAD, INPUT/OUTPUTで、最後の二つは枠に囲まれてACCUMULATORと表示があります。
STOP/RUNスイッチに注目してみましょう。パネル面をよく見ると、STOPと印刷してある側には枠があって、他のコマンドスイッチをすべて囲んでいます。RUN側は枠の外になっています。つまり、このスイッチでSTOP状態にした場合にだけ、他のコマンドスイッチが有効になるという意味の表示です。電源投入後、CPUはSTOP状態になっています。このとき、コマンドスイッチ全体が有効になって、メモリの読み書きなどができますから、初期ローダー(IPL)をメモリに書き込んだりできます。そうしてからRUN側にスイッチを倒すと、CPUが実行状態になります。RUN状態のCPUを止めるには、このスイッチをSTOP側に一度倒すだけです。なお、RUN状態にしたときにCPUが実行を開始するのは、その時点でアドレス表示されている場所からです。アドレス0とは決まっていません。たとえば、メモリ表示を行って、アドレス表示LEDが0123Hを示しているときにRUNさせると、0123Hから最初の命令をフェッチします。任意の場所からプログラムをスタートできるわけで、便利な機能です。ただ、確実に、最小の手間でアドレス0から実行を開始するには、後述のRESETスイッチでシステムをリセットしてから、RUNさせます。
SINGLE STEP/SLOWスイッチは、1命令ずつ、あるいは1マシンサイクル(バスサイクル)ずつ、命令を実行させたり、1秒間に数命令ずつ実行させるためのスイッチで、デバッグ用ですね。1命令ずつか1バスサイクルずつかというのはハードウェアオプションで、基板を組み立てる際のジャンパオプションで決定できます。このALTAIR 8800bは1マシンサイクル単位のステップ実行になっています。1命令単位の実行の場合には、2 Byte命令や3 Byte命令の2 Byte目や3 Byte目のメモリアクセスなどは表示されませんし、PUSH命令なんかでメモリアクセスする際の個別のバスサイクルを観察することができません。SINGLE STEPの方へスイッチを倒した場合、倒した瞬間に1サイクル分命令が実行されます。倒すたびに実行サイクルが進みます。SLOW側へ倒した場合には、自動的にSTEPパルスが生成されて、倒している間はずっと一定時間間隔で命令が実行されます。このSLOW実行速度も、やはりジャンパオプションで、1秒間あたり8サイクル実行、2サイクル実行、1/2サイクル実行から選択できます。標準設定では1秒あたり8サイクルになっています。小さなプログラムを入力してSLOW実行させると、なかなか美しくパネルのLEDが点滅して、あきません。もっとも、本来はソフトウェアのデバッグやハードウェアのトラブルに対処するためのパネル機能なんですけどね。前述のRUNスイッチの仕様から、ステップ実行などをさせてから連続動作に移行するには、これから実行すべきアドレスをアドレス表示部が表示しているわけですから、単にRUNスイッチを倒すだけです。逆に無限ループになっているかもしれないと感じたら、STOP側に倒して実行を停止させてから、ステップ実行に移行することもできます。
次のEXAMINE/EX NEXTはメモリの内容を読み出すためのコマンドスイッチです。EXAMINE側に倒すと、その時点でアドレススイッチの状態が読み込まれ、内部に保持され、アドレス表示用LEDに表示されます。それと同時にメモリの内容が読み込まれ、データ表示用LEDに表示されます。EX NEXTを行うと、内部に保持されたアドレスがインクリメントされて、インクリメントされた後のアドレスと、そのアドレスに入っているデータが、表示されます。したがって、特定のアドレスから順番にメモリの内容を確認するには、EXAMINEでアドレス設定とそこのデータ読みだしを行った後、EX NEXTを必要なだけ繰り返すことになります。アドレスを内部に読み込ませるにはEXAMINEコマンドしかありませんので、特定のアドレスからRUNさせたいような場合にも、EXAMINEでアドレスを設定しておきます。また、この後すぐに触れるDEPOSIT/DEP NEXTにアドレスを指定する機能がありませんから、メモリを書き換える場合でもまずはEXAMINEコマンドを実行する必要があります。
DEPOSIT/DEP NEXTは、メモリの内容を書き換えるためのスイッチです。先にEXAMINEスイッチでアドレスを設定して、次にデータ入力用のスイッチに書き込みたい値をセットしてからDEPOSIT側に倒すと、セットしたデータが表示されているアドレスのメモリに書き込まれます。アドレス表示の内容は変化しません。DEP NEXTは、対象アドレスをインクリメントしてから、そのアドレスのメモりにデータを書き込みます。インクリメントしてからですから気をつけてください。最初からDEP NEXTを使用してしまうと、1だけずれたアドレスにデータを書き込み続けてしまうことになります。連続したメモリアドレスにデータを順番に書き込んでいくには、EXAMINE - DEPOSIT - DEP NEXT - DEP NEXT...という順序で操作することになります。
RESET/EXT CLRスイッチはシステムのリセットを行うスイッチです。RESETはCPUのリセットで、結果としてアドレス表示も0になります。EXT CLRはバスのI/Oデバイスをリセットするための信号を発生します。
PROTECT/UNPROTECTスイッチは、前述のようにメモリの書き込み保護のために使うスイッチですが、対応メモリボードを持っていないのでパスします。まぁ、その時にアドレス表示されているメモリブロックの書き込み保護を指定したり解除したりするスイッチなのですが。
次のDISPLAY/LOADスイッチはACCUMULATORと書かれた枠の中にあります。このスイッチは、CPU内のAレジスタの内容を表示したり、書き換えたりするためのスイッチです。DISPLAY側に倒せば、倒している間だけCPU内のAレジスタの値がデータ表示LEDに表示されます。また、データスイッチに値をセットしてからLOAD側に倒せば、その値がAレジスタに読み込まれます。CPU内の他のレジスタの読み書きを行うことはできません。Aレジスタだけです。それでも、ステップ実行と併用すれば、プログラムのデバッグ作業に役立つはずです。ミニコンピュータのコンソールパネルではレジスタを読み書きできるものが多かったのですが、マイクロプロセッサを使用したコンピュータでは、ハードウェア的な信号をプロセッサに単純に与えても内部レジスタの内容がデータバスに出力されたりしないのが普通ですから、この機能は珍しいものです。
最後に残ったINPUT/OUTPUTスイッチは、アキュムレータと指定したI/Oポートの間でデータの読み書きを行うためのスイッチです。I/OポートアドレスはA8 - A15のスイッチで指定します。このINPUT/OUTPUTスイッチをINPUT側に倒すと、指定したI/Oポートからデータを読み込んでAレジスタに入れます。OUTPUT側に倒すと、Aレジスタの内容を指定したI/Oポートへ書き込みます。これもデバッグ用に強化された機能ですね。入出力ボードを自作するような場合には、ハードウェアのテストにも使えます。
以上で、スイッチ類の操作についての説明は終わりました。これでALTAIR 8800bをみかけても自由に使いこなすことができますね。

Return to IC Collection