レジスタ - みる会図書館


検索対象: IO 1980年4月号
28件見つかりました。

1. IO 1980年4月号

プログラム 3 プログラムの繰り返し処理中の 図 3 メモリ・ダンプ レジスタの値 最初 0 ( J A L ) * 注 ( J A L + 1 ) ( J A L + 2 ) ( J A L + 3 ) ( J A L 十 4 ) ( J A L 十 5 ) ( J A L + 6 ) ワっ 0 4 戸 0 ー 2 ・ 16 進数形式で プリント出力 注 ) (JAL) は JAL 番地の 内容を意味する 読めるでしよう . さっそく実行してみましよう . 4 つの数 値がプリント出力されていますね . 〃頭で描いた値と同じ になりましたか ? こで大切な数値を 2 つ紹介します . COM P- X で表現 ~ X “ 7 F F F ”で できる最小最大値は , X - 8 0 0 0 " す . 10 進数では一 32768 ~ 32767 となります . よく最小の値 を X F F F F " ではないかと考える人がいますが , これ は一 1 のことです . さてここでもう 1 つ面白いプログラムを作ってみましょ う . それは , メモリ・ダンプのプログラムです . 今まで勉 強した命令だけで充分なのです . プログラム 2 を見てください . このプログラムを見てま す目に付くのは , やはり繰り返し処理ではないでしようか これは前月号で説明 ? そうです . 図 2 を見てください . したのと同し繰り返しノヾターンです . こでは 7 回繰り返 し処理が行なわれているのに気付くでしよう . それでは , どんな処理を 7 回しているのでしよう ? L D 0 , J A L, 1 またまた指標レジスタ指示がありました . もう大分慣れ この意味は図 1 を見ればわかるように てきましたか ? ( J A L + レジスタ 1 番の内容 ) 番地が実効アドレスになる ので , その実行アドレスの内容が汎用レジスタ 0 番に持っ て来られます . それでは , 指標レジスタ 1 番の内容はいく らかというと , プログラム 4 プログラム 3 と同等処理を BAS ℃言語で書くと 10 DIM SFC ( 10 ) 20 FOR I = 1 TO 10 30 SFC ( 10 ) = I 40 NEXT I 50 EN D によって , 汎用レジスタ 1 番の内容は次々と 1 すっ加算 ( イ ンクリメント ) されるので , 繰り返し処理ごとに J A L 番地から J A L 十 1 番地 , J A L + 2 番地・・・・・の内容が 16 進数でプリントされていきます . 絶対番地では , 32 番地から 38 番地までのメモリ内容が出 力されます . この結果を見て , 『ん , これは機械語だ . ク』と すぐにわかった人は , だいぶ CAP- X を知っている人です . 機械語については , 後で説明します . 「こんなものかー』と いう興味を持っておいてください . 繰り返しのところを図 3 に示したので , この図とにらめっこして , もう一度プロ グラムを読んでみてください . (Sto re) 仕様書より 2 進 16 進 ック 読み方 表示 表示 表示 指定された G R の内容を , 実 S T Store 効アドレスで指定する語に入 れる . GR の内容は変わらない . 前の L D 命令は実効アドレスの内容を指定した汎用レジ スタに入れる命令でした . 今度は , その反対にあたる S T 命令について説明します . S T 命令は , 仕様書にあるよう に指定した汎用レジスタの内容を実効アドレスにしまう命 令です . 当然のことですが , この S T 命令が実行されても その汎用レジスタの内容は変わりません . ついでですから , W RITE 命令を行なってもその汎用レ ジスタの内容は変化しません . 出力命令をすると , レジス タの内容が破壊されるのもあるのですが , ではシミュ レーションしているために変イヒしません . では , プログラ ム 3 を見てください . このプログラムは , ラベル S F C で始まる番地から 10 語 L A I とあるので最初は 0 です . ですから , 1 回目は ( J A L + 0 ) 番地 . 絶対番地では 32 番地の内容が汎用レジスタ 0 番に入れられます . ところ が , D 1101 1 L A I 繰部 の要 3 主 ムの グ処 図プ返 LAI IBM 1 , 1 , 1 3 , 246 , 1 3 , IBM 2 ー 2

2. IO 1980年4月号

とてもかなわないようです . しかし , 88 でのハンド・アセンプルの大変さを考えると , 6809 はいとも容易 , 我々アマチュアにとっては , どちらが ・・と非常に悩むところでしよう . ただ今回の例も前回の 8088 もデータを 8 ピットに限定したわけですが , 8 ピット 以上のデータを取り扱う場合を考えると話は多少異なって きます . 6809 では 16 ピット・レジスタとしては , A , B の 2 つの レジスタをつないだ D レジスタがあり , 他には汎用 16 ピッ ト・レジスタ ( スタック・ポインタなどは除く ) はなく , 6800 と基本的に変わっていません . インデックス・レジス 夕またはスタックで示されるメモリ・エリア ( ダイレクト ・アドレシングも含まれる ) があり , この内容に対し つまりインデクス , スタック , ダイレクトで示されるメモ リの内容—D レジスタが作用します . たとえば加算など ですが , 同しように 16 ピット単信でのデータの入出力も可 能です . 一応 , 通常の 2 バイト処理には事かかないはすなのです カゞ , 16 ピット時は Acc カゞ 1 つにゼロページ上の仮想レジス タを使うことになるでしよう . この他の方法としては , 新らしく加わったユーザースタ ッタ・ポインタ U を使うことになります . 多少脱線して , 以前に Z80 で 12 ビットの A / D を使うため 図 3 Z80 0 のレジスタ構成 図 a アドレス 0 2 3 Z 80 の P 1 0 を 16 ピットのデータ転送に使用する場合 を考えましよう . P 1 0 のアドレス・ラインを指定どう りで使用すると , ポートとステータスが交互のアドレス に割り付けられてしまうため , Z 80 の持っている 16 ピッ ト・データの処理命令では困ってしまいます . PIO の A/BSEL は , アドレスの Ao , C/D S E L は AI に 通常つなぎますが , この場合上のようにポートやレジス タのアドレスが決まってしまいます . そこで A/B を AI に A0 を C/D につなぎ変えると , 図 b 写真 1 6809CPU ポード みました . プログラムは , 図 2 に示しますが比較しやすいように条 図 2 MC6809 十 MC1408 回路による ノコギリ波発生プログラム C P U ギード上の M C 6821 の A ポートを使い , オ ーノレ F から 00 までを操り返し出力します . ステータス・ レジスタ プログラムは I / 0 にゼロページを使っていないため , 6800 の場合と同しになります . ゼロページを用いればさ らに早くすることもできるでしよう . L D B # $ F 0 T F R B, D p としてゼロページを移動させておくことにより , ゼロペ ージ・モードで I/O することができます . この使用法の 方が 6809 らしいでしよう . C L R P ー AC L D A P ー A P : A ポート # $ 04 L D A P ー A C : A ポート出力モード S T A L 0 P 1 L D A L 0 P 2 S T A P ー A P D E C A B R A 0 用 ステータス etc. 図 b のように変わります . これをメモリ・エリアに配 列すると , 出力用に P U S H ( ) , L D d d , ( n n ) または , L D d d , れ n のような 16 ビット操作の命令 を利用して I/O ができることになります . つまり , H 、 L レジスタをアキュムレータとしてみか け上 16 ピット C P U として使用 ( データの I/O に関して ) できることになります . これと同しことが M C 6820 / でも行なうことができ ます . 8080 用の 8255 ではポートのアドレスが連続しているた め , 上記の心配は不要です . . Acc ー 1 L 0 P 2 L 0 P 1 件分岐を使うことにして比較してみました . 結果だけを述べてみると , 3.684MHz のクロックで動作 させたところ , 1 カウント・アップに約 11 ″ s 使っています . これを 4 MHz に換算したとしてもやはり 8088 の 7 gs 台には 1- 78

3. IO 1980年4月号

こなるでしよう . 2 バイトのデータのプロック I / 0 ( 出力 ) ポートは , ア ドレスが連続していると仮定します . プログラム G E T : セ D D X 十十 S T D $ P ー 0 C M P X S T P B N E G E T 図 a スタックを使う 2 バイト・プロック転送 X 十十 G E T : L D 0 : インデックス・レジス タ X をインデックスとして ・ 2 パイト、データを 0 レジスタに すべてワンパターンでオートインクリメントを用いま したが , 1 カウントのインクリメントのみでなく , 2 カ ウント分のインクリメントがあることは , 16 ビットのデ ータ転送を容易にするようです . 0 図 C メモリ・エリア中のデータを連続して出力 し 0 P 0 # F 000 : データのあるエリア L D X の先頭をセット # $ 20 : データ・カウンタ D B し 0 P 1 。 し D A , X 十 : A メモリ→ A X 十一→ X S T A P ー A P : データを出力 D E C 日 す ~ L 0 P ー B N E 日 A L 0 P 0 X レジスタにソース・エリアのアドレスの先頭をセソ ト . レジスタには , 転送先のアドレスをセットします . ただし , この場合は図のように転送されます . メモリ I X レジスタにデータ・エリアの先頭アドレスをセッ トし , データ数を B アキュムレータにセットしてから , オートインクリメント・モードにより連続して A アキュ ムレータを経由して 6821 の A ポートに出力します . X レジスタの初期値 送 メモリ ー X レジスタの 初期値 ( アドレス ) IJ レジスタの初期値 タ 数 アキュム 工リア 図 b 2 バイト・プロック転送② ( X, Y の 2 レジスタを使用 ) G E 〒 : L D D X 十十 S T D Y 十十 C M P X S T P B N E G E T X と Y レジスタで転送のソースとディスティネーショ ンを示しておき , D レジスタ ( 16 ピット ) を用いて転送 します . X, Y レジスタは共にオートインクリメント・モード で使います . 8088 なら , S I , D I レジスタを使うこと 1.80

4. IO 1980年4月号

ンへ移行していくわけです ( 図 8 ). キー入力サプルーチン① 0 1 0 8 グメント・データをテープルとしてサーチする働きを持っ ます . 0216 のコンバート・サプルーチンは , それぞれのセ ットすっ 8 桁 16 進表示でセグメントの表示コードに変換し ジスタ 83 F 4 ~ 83 F 7 の 8 ピット・データをそれぞれ 4 ピ 01 B 2 から始まるこのプログラムは , ディスプレイ・レ 0 1 B2 コンパート プログラムを入力できます . かります . このルーチンにより音のみを聞きながら手早く います . これによりキー入力が LED を見なくても音でわ はセグメント 0 の D. P も同し構成で表示するようになって 0108 ルーチンのコントロールを受けています . この発振音 「ピッ』と短く発振音が出力されます . 、このプログラムは を接続し , SP ( スピーカ ) を取り付ければキーを押すたび C ポートの 7 ピット目の出力端子に LS TTL 1 ゲート 0 1 1 E キー入力サプルーチン② ます . ンの 0108 から始まるプログラムのコントロール指示を受け データを 83 F 3 に FF と書き込み , その後キー入力ルーチ べて押されていなければ 00 B 3 から始まるルーチンはキー サプルーチンによってキー入力を知ります . また , キーがす になっています . これらは , それぞれ , 00 B 3 から始まる げてからでないと 2 度目のキーは受け付けないような構成 びキー入力ルーチンにプログラムが移っても , 一度キーを上 サプルーチン・アドレス 0108 自身は , キーが押され , 再 を作り直し , メインルーチンにジャンプしています . ポートに入力し内部プログラムで再びデータとしてコード にしていき , そのときに押されたキーを 0 として判断し A す . つまり , C ポートを出力として 1 列ずっ 3 列を順次 , 0 I/O ポートの A に入力された信号が入るようになっていま キー入力構成はハードウェアでマトリックス構成となって , つ 8255 の C ポート出力 D o—D 2 によって行なっています . ムが入っていて , キーを除く 23 のキーを 8 キーず 0108 からキー入力をセンスするコントロール・プログラ 0 2 6E アドレス・セット て作っています . レイ・レジスタを 4 ピットずつ前に移行させることによっ すっ作る必要があります . このデータ・エリアはディスプ DATA キーが入力されるたびに新しいエリアを 4 ビット 0 1 D5 シフト 4 ビット ています . レジスタ 83 F 4 と 83 F 5 のデータを一 2 バイト加算したア 026 E から始まるこのプログラムでは , ディスプレイ・ ムでは 0062 の分岐をせずにそのまま下のプログラムに移行 します . この分岐はデータが 16 進で F 以上か , そうでない かで分岐しコマンドの信号では , それぞれのキーに応し たサプルーチンがテープル状に配列してあり , コマンドの 数を 2 バイトで加算しサプルーチンのアドレスを自分でセ ットし , プログラム・カウンタと変換し , そのサプルーチ カセットサムチェッ ドレス番地へ移行し , アドレスのディスプレイ・レジスタ にセットします . そしてそのアドレスにあるデータを読み出 し 83 F 7 の 1 バイトに格納します . 0 2 AA ストアード・テープ ST 02AA から始まるこのプログラムにより , LED に表示さ れたアドレスの間をカセットテープに送り続けます . カセッ トテープ用には , スタート・アドレスとエンド・アドレス を初めに送り出しその区間のデータをすべて送り続け , 最 後に送り続けた DATA のピット数 , この場合にはすべて の 1 クピットの加算で行ない , それを 256 で割った余りの データを送り , 受信側ではこのピット数の数をチェックの 対象として判断し得るようになっています ( 図 9 ) . アドレス・レジスタに書き始めのアドレスをセットし , そして右 4 桁の LED に終りのアドレスをセットします . カセットテープの準備が OK であれば , を押しすべて のディスプレイが消えたことを確認した後 , カセットテー プにロードさせます . この間 LED のそれぞれの D. P が 点滅し DATA をカセットに送り続けていることがわかり ます . また , 別のコンピュータからはカセットインターフェ イスを通してカセットに入力してください . TK-80BS に同期させて ST. LT コマンドを使用する場 合には , RAM 工リアに同しプログラムを組んで , 次のア ドレスに相当するデータの変更を行ないます . アトレス 0 2 3 E 0 2 4 D 0 2 5 3 8 3 FF FE FD FB FA F9 8 3 F8 83F7 F6 F5 F3 EB EC ED EE FO F ー F2 7 6 4 3 2 1 0 KE Y CD ー XX XX C3 WR 図 7 セ メ ン ト バ ツ フ デレ イジ レ イ DATA COUNT 変更箇所 0 6 1 2 → 0 6 0 F 0 6 2 4 → 0 6 1 E 0 6 6 C → 0 6 5 A モニタのワーキング・エリア 16 進で表示 . キー入力を押したとき , そのキーコードを レジスタとしても使用 . ディスプレイ・レジスタ , またはアドレス・ タとして使用 . ) ディスプレイ・レジスタとデータ・レジス ントに 1 回のみディスプレイされる . れサプルーチン・ディスプレイによりセグメ すっ 16 進でサプルーチン CONV にて変換さ ド値がディスプレイ・レジスタから 4 ビット セグメント・レジスタでセグメントのコー 1 ( 月 により 83E 日にプログラムは移行 . そのアドレスに飛んで行く . つまり GO 、命令 まれ , サプルーチン命令を自動的に作成し , GO 命令によりこれだけのエリアが書き込 ット数を加算 . カセットの入力および出力時にすべてのビ カウントする . 書き込みカウンタとして , 2 文字入力後を

5. IO 1980年4月号

16 ピットのデータのハンドリングを行なうための工夫を行 なった例を上げましよう ( 図 3 ). 図を見てわかる通り , I/O ポートのデータ用のアドレス を連続にすることがそのポイントで , これは z 80 にかぎら す 8080 でも可能なことでしよう . 同様なことが MC6821 ( 6809 のポートに使用 ) の場合も 言え , 6800 系のシステムに特有 ( ? ) なメモリも I/O ポート も同し空間にあることをフルに使うと , R S 0 と R s 1 は 図 4 MC6820 / 21 0 の使い方 レジスタ名 A ポート / D D R A レジスタ コントロール・レジスタ A 日ポート / D D R 日レジスタ コントローノレ・レジスタ B 通常 RSO は , Ao, RSI は AI ラインに接続します . そ の結果 , ポートとコントロール・レジスタは , アドレス が 1 つおきに存在することになります . また , RS 。と RSI を逆に RSo → AI , RSI → A 。とすると , アドレス レジスタ名 A ポート / D 0 R A レジスタ B ポート / D D R B レジスタ コントロール・レジスタ A コントロール・レジスタ B となり , ポートが連続したアドレスに作ることができ ます . たとえば , MC6820 / 21 います . つまり入力時では , IN AX, PORT の形で , ま た出力時では , OU T PORT, AX で 16 ピットのデータを PORT, PORT 十 1 のアドレスのポートとやり取りができ ます . 6809 も一応 16 ピット C P U としての能力を持ち合わ せているので , 上述したような方法で 8088 に対処してみた わけです . 今回は , ハードのチェックや入力したデータを どのように表示するかで頭を悩ましてしまい , まだプログ ラムに手をつけてはいません . このように 8 ビット・ノヾスの C P U でありなカゞら , 16 ピ ット・データの I/O が比較的容易にできるようになり , ま すます 16 ピット C P U の時代がそこまで来ているのだとい う感しを強く受けます . この 6809 については , この 16 ピット I/ 0 の機能により 12 ピット A/D をつないだ例の実際について発表したいと考え ています . R S 1 R S 0 0 1 0 1 1 写真 2 12 ビット A / D コンパータ℃ L7109 と A を 実装したインターフェイス・ポード 0 CBI C 日 2 ICL- NSTATUS 写真 3 6809 と一 CL7109 で構成した 小規模システム ん馬ん ~ ~ 0 0 ~ ~ RSI RSO Ao となり , C S で 0 べージになっていれは L D D 命令で データを C P U が一度に読み込むことができます . 通常と逆に接続することにより容易に 16 ビット I/O ポート と化することができます ( 図 4 ). 8088 の場合は , 8255A ( ここで 8255 は A タイプであるこ とが重要 ) のアドレスが 0 ~ 2 がポートで 3 がモード・レ ジスタのため容易に 16 ビットのデータ I/ 0 が可能になって ( ー C L7109A / 0 十 6809CPU 写真 ) 今回の 6809 C P U 評価に用いた C p U に一 C L 7 1 09 を P I A 6821 の 2 ポートを用い 1 命令でデー タを入力するスタイルにしたものです . 179

6. IO 1980年4月号

『 4 桁の 16 進数で表わす』とあります . 10 進数ではありま せん . グ試験のとき , よくあわてて間違えます . アセンプラを使っている人は , 16 進数は 10 進数と区別す るのに , rx "x x ' 』 , 「 >< x H 』 , 『 $ x x 』というように するのですが , CA P- X の場合 , CON S T のオペランドは , ただの 16 進数 4 桁で表わすことになっています . そういう 意味で , A C 0 N S T 2 0 は 4 桁でないのでいけません . 仕様書を注意深く読んで , 規則を忠実に守りましよう . 結局 , 汎用レジスタ 0 番の内容は , 16 進数で X 0 0 2 0 10 進数では 32 となります . 次の , 図 1 指標レジスタ指示のある実効アドレスの求め方 GR2 指標レジスタの 指標レジスタ 3 , AC2)' LD LD 実行アドレス = ( A + 0 ) 番地 実行アドレス = ( A + 3 ) 番地 指標レジスタ指示のある場合 指標レジスタ指示のない場合 番地を決定するのには , ラベルで指定するのと数値 ( 絶 対番地 ) で表わすのがあるのですが , 数値の場合は第 0 記 憶プロック ( 0 ~ 255 ) までで , それ以上のときはべース・ レジスタとの関連があり , 少々難しいので出題はされてい ないようです . 結局 , この命令によって , 汎用レジスタ 2 番に数値 3 が入ります . LAI と間違って 61 が入るのではあ りません / ′ とあるのは , 今説明したように , 汎用レジスタ 1 番に B 番 地の内容を持ってくることです . B 番地の内容はいくらか というと , ラベル B のところから , 16 進数で X - 7 F F F " というこのカゞわかります . この命令を実行すると , 汎用レジスタ 1 番の内容は 16 進 数で X 7 F F F " , 10 進数で 32767 という値になります . は , 61 番地の内容を汎用レジスタ 2 番に持ってくることで す . 61 番地はどこにあるのでしようか ? これは , プログ ラム格納開始番地が 50 番地でしたから , そこから 1 っすっ 数えていくと , CONST O ロロ 3 1 3 , , 2 を見て , 『また指標レジスタ指示 ( 2 ) があるなあー』と 思うでしよう . このとき , 「いやだなあー』と感しないでく ださい . CAP- X を勉強するためには , この孑旨標レジスタ 指示の意味がわからなければ充分理解したとはいえないか らです . ですから , 何回も何回も例題を使って説明するので , 頑 張ってください . 図 1 のように , 指標レジスタ指示がなければ A 番地の内 容を汎用レジスタ 3 番に持ってくることですが , 指標レジ スタ指示 ( 2 ) があるので , A 番地にレジスタ 2 番の内 容を加えた番地が実効アドレスになります . この場合 , レ ジスタ 2 番の内容は 3 ですから ( A + 3 ) 番地 , 絶対アド レスでは ( 59 十 3 = 62 ) 番地の内容を汎用レジスタ 3 番に 入れることになります . 結局 , この命令によって汎用レジスタは X 8 0 0 0 " ー 32768 になります . 「あ になります . 10 進数で表わすと , れ ? マイナスになっている』と気付くと思います . そう です . 仕様書にあるように , COMP- X は数値を 16 ピット で表わし , 負の数は 2 の補数を使って表現されるからなの です . 2 , 61 という場所が 61 番地になります . LAI ANA 2 主 ムの グ処 プ返 2 繰部 図の要 LA I 1 , 1 , 1 LAI 3 , 249 , 1 JNZ 3 , ANA プログラム 2 マイコンの PET から写したもの スクリーンエデイタや OS ( ジョブコン ) カ ( 利用でき , コレジ デントタイプの本格的な CAP - x の勉強の助けとなる . 仕様書より 1 語のヒ・ツト構成は次のとおりである . 32 ↑ ↑ 第 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 ツ ツ ト ト 数値は , 16 ピットの 2 進数によって表現する . 負数は 2 の 補数方式である . ですから , 第 0 ピットが 0 のときはプラスの数を表わし , 1 のときはマイナスの数を表わすことになります . 残りのプログラムは今までと同しですから , スラスラと 0 し 21 1

7. IO 1980年4月号

CRAY- 1 図 1 複合システムの概念図 ( センチュリリサーチセンタ ) (MCU) (500KW) ディスク装置 DCCI ( 3 M 日 ) x 4 CCI メンテナンス制御装置 チャネル・ インターフェ ース チャネル・ インターフェース (CPtJ) ( 0 ( CYBER74(cP1_J) (131Kw) ( 0 ( ( Y 費ア 3 ( cp し ) ( 0 ( 0 ・ ( cpu) ア 030 ・ 4 ( ECS ) ( 500KW ) (131KW) (131KW) 6683 6683 SC SC 0012 コンソール ディスプレイ 06 ー 2 0 054 ・ 2 ティスク制御装置 ( DC ) 054- Ⅱ 001 コンソール 0 ・ 12 ディスプレイ 54 - ディスク制御装置 ( DC ) イスク 844 置 ディスク装置 磁気テープ制御装置 (MTC) 磁気テープ制有装置 ( MT ) 磁気チープ制御装置 (MTC) ア 0 ア 9 ア 90 3624 799 000 磁気テープ装置 ( MT ) 磁気テープ装置 ( MT ) 3446 / 415 3447 / 405 ()R ) カードせん孔 カード読取装置 製置 (CP) (CR) 644 / 4 ー 5 404 ・ / 405 ード読取装置 (CR) カードせん 孔装置 (CP) 3447 / 405 カード読取装置 ( CR ) 3555 5 ー 2 ラインプリンタ (LP) 3555 / 512 3659 / H - 5 35 5 5 / 512 3650 / H ・ 5 3555 / 512 3555 / 512 ラインプリンタ (LP) 3555 512 回線制御装置 ( ccu ) 66 ア・ 6 ・ア 1 回線制御装置 ( CCU ) ( 端末機へ ) 06 ア 1 ・ 6 ア 1 66 ア 1 0 ・ア 1 図 3 CRAY ー 1 の基本システム (CPU) ( 演算製置 ) 機能別 算ユニット ( 端末機へ ) ・レジスタ構成 各々 64 ビットのべクトル・レジスタ ( V ) , スカラ・レジスタ ( S ) , およびスカラ・レ ジスタやアドレス、・レジスタ ( A ) と , メ モリ間の一時的なストレージとなる中間記意 レジスタ ( T , B ) から成ります ( 図 4 ) . また , 16 ピットまたは 32 ビットからなる インストラクションは , 64 個の 16 ピット・ レジスタ 4 組からなる命令バッフアから実 行されます . 表 3 CRAY- 1 の機能別演算ユニット 演算時間 レジスタ の使用 ( クロック周期 ) A A 表 2 CRAY- 1 CPU の仕様 く演算処理部分〉 ・スカラ処理とべクトル処理の 2 つのモード ・ 1 2 .5n 5 のクロック周期 ・整数および浮動小数点演算 ・ 64 ビット語長 ・完全にセグメント化されたの機能別演算ユニット ・ 8 個の 24 ビット・アドレス・レジスタ ( A ) ・ 64 個の 24 ビット・アドレス中間記憶レジスタ ( B ) ・ 8 個の 64 ビット・スカラ・レジスタ ( S ) ・ 64 個の 64 ビット・スカラ中間記情レジスタ ( T ) ・ 8 個の 64 要素べクトル・レジスタ ( V ) ( 64 ビット / 要素 ) ・べクトル長レジスタとべクトル・マスク・レジスタ ・ 64 ビットのリアルタイム・クロック・レジスタ (RT) ・それぞれが 64 命令い 6 ビット命令の場合 ) の 4 組の命令 ′、ツファ ・ 128 種類基本命令 ・優先度をもった割り込み制御 くメモリ部分〉 ・ 1, 048 、 576 64 ビット語 ( 1 語に 8 チェック・ビット ) ・それぞれが 65 , 536 語の 16 の独立したパンク ・パンクサイクルタイムは 4 クロック周期 ( 50n5 ) ・ B , T , V レジスタは 1 語 / クロックの転送速度 ・ A , S レジスタは 1 語 / クロックの転送速度 ・命令パッフアへは 4 語 / クロックの転送速度 ぐ / 0 部分〉 ・ 6 つのグループに構成された 24 のレ 0 チャネル ・各グループは 6 入力または 6 出力チャネルを含む ・各グループメモリは 4 クロック周期ごとに処理する ・各グループ中でチャネル優先度がつけられる ・チャネルはデータ・ビッ・ト , 3 コントロール・ビッ ト , 4 パリティ・ビットからなる ・ 64 ビット語 / 0n5 の最大チャネル速度 ・チャネル・エラーの検出機能 ルタ トス クジ スカラ レジスタ 主メモリ レ 0 チャン ネル インター フェイス ティスク 制御装置 メンテナンス 制書装置 アドレス機能ユニット アドレス加算ユニット アドレス乗算ユニット スカラ機能ユニット スカラカロ算ユニット ップの 3 種です . スカラ・シフト・ユニット これらの IC は , 16 ピンの密封されたバ スカラ論理ユニット ビット数カウント・ユニット ックにバッケージ化され , 288 個のパッケー べクトル機能ユニット ジを 1 枚のモジュール上に実装 ( モジュー ペクトル加算ユニット ルは全部で 113 種類 ) , 72 のモジュールが 1 べクト ) レ・シフト・ユニット つのシャーシに収められ , 24 のシャーシで ペクトル論理ユニット CRAY- 1 が構成されています . 冷却はフレ 浮動小数点機能ユニット 浮動小数点加算ユニット S および V オン・ガス冷却を用い , 回路からの熱を銅 6 浮動小数点乗算ユニット S および V 7 のイ云反 , シャーシのド , ステンレスの冫令 逆数近似ユニット S および V 14 却棒を使い , 伝導で放熱しています . フロントエンド コンビュータ 2 6 ディスク 3 2 または 3 ( 倍長 ) 1 3 3 4 2 ー 42

8. IO 1980年4月号

・ M87 广コンのニューフェイス 0 内 = 部 ROM 、 ~ 4 6W>f 4 4095 - 4096 8 外部メモリ 0 東定次郎 0 引 312WX8 っていますが , その中でもバイト数を減 す工夫がされています . それが下に示す ようなオート・インクリメントやオート ・デクリメントの命令です . 下の例を見 図 3 4COM87 の るとすぐわかると思います . メモリ・マップ STAX H STAX H 十 INX H ( 8080 の場合 ) ( 4COM87 の場合 ) 例の左側は , HL レジスタで指定される メモリにアキュムレータの内容をストア し , 次はこの H L レジスタの内容を十 1 する命令ですが , これを gCOM87 では 1 つの命令 ( 複合命令 ) で実施することが可 能となります . このほか , L D A X でも 同様の命令があります . ・サプルーチン命令 サプルーチンというのは比較的多く使 われることがあります . 特にバイト数を 節約したい場合 , 効果的に使えばかなり 65407 65408 内部 M 9 コ 0 ル テ プ ル 254 255 は 28 響 X 8 ノ、 ローアドレス 65535 図 4 たてずみ命令の例 SI MVI S2 MVI S3 MVI S4 MVI STAX の節約が可能となります . 〃 COM87 には , 何と 1 ~ 3 ノヾイトのサプルーチンが用意 されています . 特に , 1 バイトで 128 の サプルーチンをコールできる命令もあり , 図 2 4COM87 のプロック図 t = 63 ューザーエリア 大変使いやすくなっています . ④フラグのセット・リセット 汎用マイコンの場合 , 特に 8 0 系列は PE15-8/AB15-8 3 亠ー ラ O OSC PE7-o/AB7 INT 0 INT 1 INT 2 プログラム・ メモリ ()K バイト ) メモリ ( 128 バイト ) 内部 コントロ ール メイン 汎用 レジスタ 退避用 レジスタ O W SIO ッファ ッファ PC4/TO ッファ マ DB 7 ~ 0 PC2/SCS 0 ーー・一 インストラ ンヨン・ レジス ラッチ S/P シリアル・ クロック 30 SCK SO PC3/SAK ALIJ インストラクション・ デコーダ 8 モード日 タイミング・ システム・ コントロール コントロール ード / ライト・ コントローレ ホールド・ コントロール ポート日 2 PCI 0 PC7-2 RD WR PC5/lOM MI WAIT RESET の PC7 / PC6 Vcc Vss HOLD HLDA ームの人がいたけど GF がいたらきっと美波唯という子でありましよう ( 判る人にしか判らん ). スペースもなくなってきたのでそろそろ終わり ( 人浦狂児 in J 叩 ) こしましよう , 正常な人の脳では理解しがたい内容なりましたことをお許しください . ではまた・ PA7-o 121

9. IO 1980年4月号

最後に 10 進加算と 10 進力ウンタのプログラム例をリスト 1 , 2 に , モニタ・リストをリスト 3 に掲げておきます . プログラム例とモニタ・リスト マシン語 , アドレス 8 0 0 0 から リスト 1 8 桁加算プログラム 特価セット G ー 802 ( スルホール ) プリント板 + 2708 ( モニタ 1 K ) + キー SW ( アルプス AKE-I ) X24 個十説明書付き 以上 3 点で 15 , 000 伀 0586 ー 73 ー 1590 491 一宮市大志 2 ー 2 ー 11 申し込み先 : フレコン電子 5 月末まで ( 送料無科 , Z80 , X'tal, 周辺 IC, C, R は含みません ) ル。 チ タ B ← 0 4 H L ← 8 3 0 0 D E ← 8 3 0 4 D E → A A 十 M D A A A → M H L 十 1 D E 十 1 C 2 R E T 8 3 0 3 8 3 0 7 8 3 0 3 8 015 8 0 0 0 8 0 0 5 8 0 OD 0 6 0 4 2 1 0 0 8 3 110 4 8 3 十 08 C 9 2 3 7 7 8 E C 2 0 8 8 0 何桁分加算するかをセットします . 8 ピットで 2 桁すっセットできるので感 04 クを B レジスタにセット . どこから加算を始めるかをセット , この場合 , アドレス 8300 にあるデータとする . 被加算を始めるアドレス・レジスタは自由ですが DE レジスタを使用 . DE で指定されたアドレスにあるデータを Acc に入力 . Acc と HL で指定されたアドレスにあるデータこの場合第 M クとの加算 ( CARRY 付 ). コンピュータは 16 進の加算を行なうので 10 進法に変換させる . 結果は Acc に残り , HL で指定されたアドレスのデータ“ M クに入力してやる . 2 桁分の加算が終ったので次の桁のあるアドレスに移行する . DE レジスタの次のアドレスへの移行 . 桁数カウンタを一 1 してやる . この場合 , B レジスタから ー 1 して , もしヾ 0 クでなければ感 0 〃になるまで残り 3 回同じことを行なう . 計算が終了し , モニタ・プログラムにジャンプする . 8 3 0 0 8 3 0 4 8 3 0 0 0 6 0 4 2 1 F 7 8 3 3 E 00 7 7 2 B 0 5 C 2 0 6 0 4 2 1 F 78 3 1 1 0 0 8 3 C D 7 7 8 E リスト 2 1 0 進力ウンタ・プログラム B レジスタに 4 ( 桁数 ) をセット . HL レジスタにクリアを始めるアドレスをセット . Acc に 0 をセットする . A cc を , HL で指定されたアドレスへデータヾ 0 クを入れる . HL レジスタを 1 桁下げる . 桁数レジスタ B を x 1 する . B が 0 でなければもう一桁分同しことを行なう . B レジスタに桁数 4 をセット . 加算を始めるアドレスを HL レジスタにセット . 被加算を始めるアドレスを DE レジスタにセット . 計算結果をディスプレイに表示する . 計算結果を HL で指示されたアドレスに入れる . 今までのデータは消される . 16 進加算を 10 進数に補正する . 桁上げピットとともに HL で指定されたデータと Acc を 16 進加算を行なう . DE レジスタで指定のアドレスにあるデータ ( 数 ) を Acc に入れる . たプログラムを , 他誌で発表して謝礼をもらおうなんて虫が良すぎるのではあリませんか , どうか , 反省していただきたい」と思っています . (). S. S. ENTERPRISE) ー 03

10. IO 1980年4月号

ドレス後退 , 印がアドレス前進で あるが , スクロールはされない . もアドレス前進であるが , この場合はスクロールされる . ーキーは , CM コマンド から抜け出すときに用いる . 5 GM コマンド V D G 68047 をフルグラフィック・ (GRAPHIC MODE) モード ( 256 x 192 , 2 カラー ) にす るためのコマンド . 5 C 00 に F 8 を書き込んでいる . 6 GC コマンド グラフィック・エリアをクリアす (GRAPHIC CLEAR) るコマンド . 4 0 0 0 ~ 5 B F F に 0 を書き込んでいる . 7 DO コマンド D 0 , X X, Y Y (DOT ON) X X , Y Y で指定された場所に点 を書くコマンド . XX は 00 ~ FF ( 0 ~ 255 ) , YY は 00 ~ BF ( 0 ~ 192 ) の範囲 . 8 DE コマンド D E , X X, Y Y (POT ERASE) X X , Y Y で孑旨定された場所の 点を消すコマンド . 9 DC コマンド D C , X X, Y Y (DOT CHECK) XX, YY で指定された場所の点が ON であるか , OFF であるかを調 べるコマンド . たとえば , 指定さ れた場所の点が ON である場合 , D C, X X, Y Y 0 N と表示される . 10 PS コマンド P S , X X, Y Y X X , Y Y で指定された場所を始 (?OINT SET) 点に設定する . 11 DL コマンド D L , X X, Y Y 始点から , X X , Y Y で指定され (PRAW LINE) た点まで直線を描き , X X , Y Y を新たな始点とする . E L , X X, Y Y 12 EL コマンド 始点から , X X , (ERASE LINE) Y Y で指定さ た点までを消去し , X X, Y Y を 新たな始点とする . 写真 6 C M コマンドを実行中 このモニタ・プログラムは , ほとんどがサプルーチンに なっているのでユーザーは必要に応じてそれを使うことが できます . こではその主なサプルーチンを簡単に紹介します . B S キーポードとテンキーの入力をチェッ KEYSCN クし , 入力があった場合は A レジスタにそ ( 0 0 6 A) のコードを , なかった場合には 0 をセット してリターン . CURS カーソル点滅ルーチン ( 0 0 F 9 ) 点滅のスピードを変えたい場合は 0105 番 地の MVI M, 05 を変えればよい . 高速カーソル点滅ルーチン FCURS 画面をクリアするルーチン CLR ( 0 1 2 の 画面をスクロールするルーチン SCRL ( 0 1 2 D) SCLP2 画面の一番下の行をクリアするルーチン ( 0 1 3 D) LDIR プロック転送ルーチン ( 0 1 4 7 ) H L レジスタで示された番地から D E レジ スタで示された番地に , B レジスタで示さ れたバイト数だけデータを転送する . MESOUT メッセージ・アウトブット・ルーチン スクロールをした後 , H L レジスタで示 されたアドレスから 7 FEO 番地以後 ( 画面 の一番下の行 ) に , B レジスタで示された 文字数だけデータを転送する . このルーチ ンは , キャラジェネ・コード ( 以後 C. G. C. ) のデータを扱かう . MESBS T K ー 80 B S モニタ内にあるメッセージ・ア ( 0 1 AA) ウトブット・ルーチン 使い方は M E S 0 U T と同し . このルーチン は , JIS コードのデータを扱かう . CODETL J IS コードを C. G. C. に変換するルーチン ( 0 0 E 9 ) 入出力とも A レジスタ . HTOCGC 16 進データを C. G. C. に変換するルーチン ( 0 1 7 8 ) 入出力とも A レジスタ . ATODE A レジスタに入っている 16 進データを C. G. C. に変換して D E レジスタに出力する . ADRDSP H L レジスタの内容を 7 F E 0 番地より ( 0 1 9 5 ) ディスプレイする . CGCTOH C.G. C. データを 16 進データに変換する . 入 ( 0 1 C 9 ) 出力とも A レジスタ . T2 1 H L レジスタでま旨定された番地の C. G. C. ( 0 1 EE) データ 2 バイトを 16 進データ 1 バイトに変 換して B レジスタに出力する . H L レジスタで指定された番地の C. G. C. T4 2 ( 0 2 5 E) データ 4 バイトを 16 進データ 2 バイトに変 換して D E レジスタに出力する . VRAMCK H L レジスタのデータカ SVIDEO RAM 内に あれば Z フラグをセットしてリターン . ( 0 1 0 7 ) ( 0 1 6 3 ) ( 0 1 8 2 ) 写真 7 各コマンドの入力例 ( 0 1 5 2 ) ー 48