蒼天在眼 (そうてんまなこにあり)ーベランダで星を見る

昔、昔、天文少年でした。そして、今は、ベランダから、星を見ています。
いろいろの忘備録

PiDP-11 を使う その12 ターミナルテレタイプの入出力

2024-01-27 10:51:46 | コンピュータ

PDPー11は入出力命令を持ちません。周辺機器は、全て、メモリーの特定番地にマップされているので、メモリに、書き込んだり、読み取ったりすることによって、入出力を行います。メモリも、周辺機器もUNIBUSという同一バスに接続されています。メモリに比べて、反応速度が遅い周辺機器とデータをやり取りする場合の速度差をどのように調整するかというと、割り込みを使う場合と、制御レジスタを介する場合があります。

オペレーティングシステムを介して入出力をする場合は割り込みを使っています。PDPー11は、初めて、UNIXを開発した時に使われた機械なので、割り込みは、もちろん可能ですが、今回はBare Metalで使うので、割り込みではなく、 制御レジスタを使って、入出力を行います。

入出力装置は、160000番地から177776番地に予約されています。この範囲のどこかに、入出力の制御レジスタとデータをやり取りするバッファが接続されています。

例えば、ターミナルとして使っているテレタイプと通信するためには、プリンター部には、

   制御レジスタ:177564番地  出力バーファ:177566番地

を使います。Ballconの先輩たちは、イナナゴロシなどという、やや物騒に聞こえる語呂合わせで記憶していたようです。竹内郁雄さんは、LISPのハッカーでBalconも尊敬している方ですが、「イナナゴロシ」について、エッセーを書いてます。

 

ハッカーの遺言状──竹内郁雄の徒然苔第14回:プログラムで一句詠む | サイボウズ式

元祖ハッカー、竹内郁雄先生による書き下ろし連載(毎月下旬に掲載)の第14回。今回のお題は「プログラムで一句詠む」。

サイボウズ式

 

流石に、Balconは、RT−11というOSを使っていたので、イナナゴロシとかは聞いたことはありませんが、先輩のプログラマにこの呪文を唱えると、色々な反応をする方がいるらしいです。

DEC LSI-11/23 CPU

オールドハッカー風にいうと、TTYの制御レジスタの番地は「イナナゴロシ」、バッファの番地は「イナナゴロロ」とでも言うのでしょうか。テレタイプ印字の場合は、制御レジスタの7ビット目が1になると、転送可能になります。言い換えれば、テレタイプのプリンタ部に文字を打ち出す場合は、イナナゴロシの番地をアクセスして、ビット7が立ったら、イナナゴロロ番地に打ち出したいデータを書き込みます。

“A”をテレタイプに印字するプログラムは次のようになります。

 

機械語             説明

032737       BIT     ←   177564番地の7ビット目をテストする

000200      #200←イミーディエィート命令 データ 200八進で、7ビット目が1でそれ以外は全て0

177564       @#177564←TTYの制御レジスタの番地指定

001774       BEQ  <-  0ならば、先頭に戻る。

113737       MOVB ← 1バイトの転送命令

000101      #101   ← 8進でAのアスキーコード

177566       @#177566 ← TTYのデータバッファの番地指定

 

命令コードと分岐命令については、前々回、前回の記事を見てください。

 7語、3ステップで書けます。

 

キーボードからR0レジスタに入力する場合はこんな感じになります。

 

032737 BIT ← ビットテスト

000200 #200   ← 7ビット目が1

177560   @#177560  ← キーボードの制御レジスタの番地 イナナゴロレ

001774 ←BEQ 0ならば、先頭に戻る。

113700 ← 1バイト転送命令 

     ソースは 番地、 

     デスティネーションは レジスタの指定(0n)   nはレジスタの番号 R0なので、00

177602   @#177562  ← キーボードのデータバッファの番地 イナナゴロニ

次回は、テレタイプに5匹のカタツムリを出力するプログラムを書きます。

(5匹のカタツムリの巻に続く)


PVバーナー

PVアクセスランキング にほんブログ村