です。そして , です。 XCHG 3 レジスタ間のデータ転送 ( その 2 ) 先月号の 1 の続きをやりましよう。レジスタ間の データ転送のうち , 1 バイトすつのものはムープ命令 ◎ 2 バイト・データの転送 ポインタ プログラムカウンタ プログラムカウンタの指示 M B2,B3 スタックポインタ レジスタベア する番地の内容 命令 MVI A B2 LDA B3, B2 LDAX rp MOV M なし 2 バイトすつのデータ転送が次のもの ーモニック 呼び方工クスチェンヂ (eXCHanGe) 機能 (D) (E) ← (H) (L) 1 バイト命令 オペコード EBH から A レジスタへの転送命令を表にしたのが表 2 です る分類 ( 先月号の図 8 による分類 ) に従って , メモリ まず , メモリ内のデータを指示する方法の違いによ ジスタの場合を見てみましよう。 先 , あるいは転送されるデータの入っている所が A レ そういうわけで , ます 1 バイトの転送として , 転送 ラムがうまく働く , ということです。 A レジスタと H L レジスタベアをうまく使えばプログ ムによく使うということを示しています。逆に言えば , このことは A レジスタや H L レジスタベアをプログラ レジスタベアは不公平に甘んじなければなりません。 ータ転送では H L レジスタベアが特典をうけて , 他の てふたっくらいの手段しかありません。 2 バイトのデ 手段がありますが , 他のレジスタにはひとつか , 多く A レジスタへ入れたり出したりするのにはいろいろな ています。つまり , 1 バイトのデータを転送するのに る命令を見てみましよう。こでも不公平が行なわれ り , C P U のレジスタの内容をメモリへ転送したりす 今度はメモリの内容を C P U のレジスタへ転送した 4 メモリとレジスタの間のテータ転送 ( その 1 ) しましよう。 ていくと思います。この記事の中でも折があれば説明 しようが , プログラムを数多く作るうちに疑問は解け んな不公平な命令があるのかという疑問が出てくるで のような手順をふまなくてはいけません。どうしてこ ん。ですから , 他のレジスタの場合は , 先の演習問題 です。他のレジスタどうしを交換する命令はありませ しよう。 D と H , E と L の内容が入れかえられる命令 これは転送というよりも , 交換といった方がよいで 注 ) ポインタ : 転送されるデータの入っているメモリ番地を 指示するもの : 2 バイト命令や 3 バイト命令の 2 バイト目や 3 バイト目の内容 : レジスタベア : H L レジスタベアで指示されるメモリ番地 ( 本文参照 ) 47 MOV A, M MVI A, B2 表 3 に一覧表として掲げます。 ◎ 1 バイト・データの転送 次に表 2 の右側の各命令を説明しましよう。 す。 して , そのアドレス内容の転送を行なうというもので これはスタックポインタの内容をアドレスパスへ出 スタックポインタをポインタとする転送 そのアドレス内容の転送を行なうというものです。 これはレジスタベアの内容をアドレスパスへ出して , レジスタベアをポインタとする転送 出し , そのアドレス内容を転送するというものです。 C P U の中にもってきて , あらためてアドレスパスへ ことです。つまり , 2 バイト目と 3 バイト目を一度 令の 2 バイト目と 3 バイト目がポインタであるという これは , 言いかえれば , 3 バイト命令である転送命 タとする転送 プログラムカウンタの指示する番地の内容をポイン 2 バイト目が転送データであることを示します。 言いかえれば , これは 2 バイト命令である転送命令の 地の内容を転送データとして指示することになります 法です。つまり , オペコードの入っていた次のメモリ番 この時のプログラムカウンタの内容をポインタとする方 タの内容がひとつ増えることは先月号で説明しました。 C P U がオペコードを読んだ後 , プログラムカウン プログラムカウンタをポインタとする転送 て説明します。 この場合 4 種類ありますが , まずこれらについ ということにします。ポインタは表 2 の左欄に示すよ 転送先のメモリのアドレスを指示するものをポインタ 転送されるデータの入っているメモリのアドレスや インタの種類によって分類したもの 表 2 メモリから A レジスタへテータを転送する命令をポ
アドレス ド オペコ 0 0 0 0 0 0 0 1 図 12 正しいコーディング例 B レジスタ 1 1 1 1 1 1 MOV B,C MOV C,B C レジスタ 0 0 図 13 図 12 のプログラ乙を走らせた様子 アドレスオペコード 0 0 0 0 79 0 0 01 0 0 0 2 ーモニック オペランド MOV MOV C,B B,C ラ習題を解いてましな。まちがっ z いるとごラがあったら教ラて下さい。 オペコード アドしス ーモニックオペラ冫 Möv C,B 0 0 0 0 48 0 0 0 1 41 MOV B,C 1 1 1 1 れ滄今 , 次のことがわ力、らないの z えて 下さい . をれは , ごプログラムをマイコンに入れたと オると , B し c をあしちあとでマイコンは とラなのてカ ) マイコ冫のごとがよ ( カカ、らなし乙よラ しくあ源ルます . ーモニック オペランド MOV MOV MOV 14 正しいプログラム例 い先頭のアドレスを決めて , それを最初のアドレスの 欄に書き込みます。次に ーモニックとオペコード の対照表 ( 先月号掲載 ) を見て , ひとつ目のニーモニ ックに対応するオペコードをオペコード欄に書き込み ます。次に , このニーモニックが何バイト命令かを考え て , ふたつ目のニーモニックが入るアドレスを確認して , 2 行目のアドレス欄に書き込みます。次に , ふたつ目 のオペコードを書き込みます。このようにしてできた のが図 14 です。どんな長いプログラムもこの順でコー ディングしていきます。図 14 を参考にして , あなたも 一度コーディングしてみて下さい。 さて , 最後に質問にお答えしましよう。たとえば 図 14 のプログラムをマイコンに入れたとしても , 確か に B レジスタと C レジスタの内容は変わりますが , そ のあとは誰にもわかりません。つまり暴走してしまい ます。そこで次の命令語を憶えましよう。 ーモニック 呼び方ホルト (HaLT) 機能プログラムの実行停止 1 バイト命令 オペコード 76H 図 11 演習問題 1 の解答例 ( K 県・ F 君の場合 ) ランドの書き方が違っているのです。先月号で説明した MOV 「 1 , 「 2 のうち、、 MOV 〃の部分がニーモニックで , 、、「 1 , 「 2 〃の 部分がオペランドなのです。そこでこのプログラムを 正しく書きなおすと , 図 12 のようになります。 次にプログラムそのものを見てみましよう。結論か ら言いますと , C レジスタには B レジスタの内容が入 りますが , C レジスタの内容は B レジスタどころか , どこにもなくなってしまいます。そして B レジスタに は , C レジスタに一度入れた B レジスタの内容が入っ しまうことになります。この辺のことを図 13 に示し ます。これは B レジスタの内容をすぐにレジスタに 入れたために , その時に C レジスタの内容が消えてし まう ( 正確には B レジスタの内容に変わってしまう ) からです。 それでは , どうしたら C レジスタの内容が消えない ようにできるでしようか。それには C レジスタの内容 を別の所へとっておけばよいのです。たとえば一時保 管場所として A レジスタを使うことにしてプログラム を考えてみましよう。つまり , C を A に入れて , B を C に入れて , A を B に入れるということをすればよい のです。もちろん , A レジスタにもともと入っていた 内容は消えてなくなります。 では , これをコーディングシートに書いて , コーデ イングシートを完成させる方法を説明しましよう。ま ず , ーモニックとオペランドの欄へ , 考えたプログ ラムを書き込みます。次に このプログラムを入れた 46 今度から F 君のような誤りのないように , どこまで がニーモニックで , どこまでがオペランドか示すこと にしました。オペコードは 76H です。図 14 のプログラ ムではアドレス 803 H に 76 H を入れれば , そこで C PU は実行をやめてくれます。これはコーディングにおい て忘れやすい命令ですから気をつけましよう。
C M T からのロードがうまくいった場合 > L LOAD POINT 800 先頭 アドレス ; B 最終アドレス ( b) C M T からのロードに失敗した場合 > L LOAD ERROR.e 図 6 L コマンド実行時のメッセージ メッセージが表示され , ユーザープログラムの実行を 開始したいアドレスをキーインすると , そのアドレス から実行します。ユーザープログラムの最後には , モ ニタに制御を返すためのステップか , 例の「 B R A E N D L 」を入れておく必要があります。なぜならユ ーザープログラムを実行した後 , 次に何を実行すれば よいかということを C P U に指示しておかなければ , 暴走してしまうからです。これはマイコンキットに内 蔵されているモニタでも , M I K B U G でも同じこと です。 * L コマンド * L コマンドは上記 4 ) の機能を持ちます。つまり A ー 1 ではカセットテープ上にストアされたプログラムや データをメモリ上に移すために使用します。 L コマン ドを入力するとテープが走り始め , ロードが終わると テープが止まり図 6 のようなメッセージが表示されま > S SAVB TOP ADDRESS( ? ) ; ■ セープする先頭アドレスをキーインする。 > S SAVB TOP ADDRESS( ? ) ; 刊 88 SAVE BOTTOM ADDRESS( ? ) : ■ セープする最終アドレスをキーインする。 > S SAVE BOTTOM ADDRESS( ? ) ; FBFF SAVE TOP ADDRESS( ? ) :. F88 60 図 7 S コマンド実行時のメッセージ SAVE COMPLETE テープ走行スタート , 停止。 す。すなわちロードに成功した場合には図 6 (a) のメッ セージが , 失敗した場合には図 6 (b) のメッセージが表 示されます。 * S コマンド * S コマンドはメモリ上のプログラムやデータをカセ ットテープ上に移すためのコマンドです。 S コマンド を入力すると画面に図 7 のようなプロンプトメッセー ジが表示されます。セープする先頭アドレスと終了ア ドレスをキーインするとテープが走行し始め , セープ が終わるとテープが止まり , 画面に終了メッセージが 表示されます。 * B コマンド * B コマンドは上記 6 ) のプレークポイントの設定 , 解 除を行なうためのコマンドです。 B コマンドを入力す ると図 8 のようなプロンプトメッセージが表示されま すから , ユーザープログラムの実行を中断したいアド レス ( プレークポイントと呼ぶ ) をキーインします。 次にそのユーザープログラムの実行開始 ( スタート ) ア ドレスをキーインします。回をキーインすると , ユー ザープログラムの実行が開始され , プレークポイントで 実行を中断します。実行が中断されると図 8 ( c ) のよう に C R T 画面上にプレークポイントで中断した時の各 レジスタの内容が表示されます。続いて国キーを押せ ばプレークポイントを解除し , プレークポイントが設 定されていたアドレスからユーザープログラムの実行 (a) (b) BREAR ADDRESS( ? ) ; ■ プレークポイントアドレスをキーイン。 > B BREAK ADDRESS( ? ) ; 刊 98 START ADDRESS( ? ) ; ・ ューザープログラムの実行開始アドレスをキーイン する。 PC X A B CCR SP 刊 901. 0080 OA F 0 C 0 7F0 中断された時の プログラムカウンタの内容 インデックスレジスタの内容 アキュームレータ A の内容 アキュームレータ B の内容 コンディションコードの内容 スタックポインタの内容 図 8 B コマンド実行時のメッセージ
これに対し , 通常モニタと呼ばれるものはプログラ ムサイズが 0.25 ~ 1 K B と小さく , R O M の形でメモ リエリアの一角に常駐しています。そして I P L など は関係なく電源オンでいきなりモニタへジャンプする ようになっています。私達の A ー 1 の場合にも先月号で 述べましたように P R O M ( 2716 ) に入れておいて , ア ドレス F 800 ~ F F F F に配置しておきます。図 2 の ように F F F E ~ F 番地にモニタブログラムのスター トアドレスを格納しておけば , 電源オンでモニタを起 動させることが可能となります。ようやく『にわとり』 の住みかも決まりましたから , モニタの内容について 勉強してゆくことにしましよう。 第 2 章 モニタのコマンド T K -80 などのマイコンキットのモニタはだいたい 下記のような機能を有しています。 1 ) 指定した番地のメモリの内容を表示する。 2 ) 指定した番地のメモリの内容を変更する ( 新しい F800 F D 0 0 FFFE F L ( ロード ) S ( セープ ) 2716 (PROM) 0 0 F ワ フ。ログラム モニタメイン 図 2 入り R 0 M A ー 1 モニタ ( に力とり 1 号 ) にモニ々フ。ログラ 4 の リス々ートべクトルエリア アドしスを入れてみ乙。 メイ冫ノし一チン先兎頁 図 2 ^ ー 1 のモニタの起動 データを格納する ) 。 3 ) ューザープログラムの実行。 4 ) プログラムやデータのセープ ( カセットテープや 紙テープに出力する ) 。 5 ) プログラムやデータのロード ( カセットテープや 紙テープからメモリ上に移す ) 。 6 ) プレークポイントの設定 , 解除。 また , これら以外に P R O M ( 2716 ) に書きこみを行な 号 ) にも上記の 6 機能を持たせることにしましよう。 有していますので , 私達の A ー 1 のモニタ ( にわとり 1 ( テレタイプ ) べースのモニタも上記と同様な機能を 6800 用の M I K B U G , 6502 用の T I M などの T T Y M コマンドというのは上記 1 ) , 2 ) の機能を持つコマ M コマンド * 計してゆくことにしましよう。 ます。図 3 を参照しながら順に各コマンドの機能を設 図 3 に A ー 1 モニタのコマンドの一覧表を載せておき うためのコマンドもつくっておきます。 コマンド名 機能 ADDRESS(?)%• アドレスをキーインする 1 データを入力すると F801 : A5 800 ; 5A キーを押すと F88 番地のデータ 知 800 冫 5Å■ ADDRESS( ? ) : 800 M ( メモリチェンジ ) 指定された番地のメモリの内容を表示 , 図 3 ^ ー 1 モニタ ( にわとり 1 号 ) のコマンドー覧表 プランチ命令のオフセット値の計算を行 4 桁の 16 進数の加算 , 減算を行なう。 ニタに制御を移す。 ユーザープログラムの実行を中止し , モ リの内容をダンプする。 指定されたアドレスより 64 バイトのメモ タを P R 0 M に書きこむ。 指定されたアドレスより 2 K B 分のデー 行なう。 プレークポイントの設定 , 実行 , 解除を る。 C M T へプログラムやデータをセープす する。 C M T よりプログラムやデータをロード ラムを実行する。 指定されたアドレスよりユーザープログ 変史する。 G ( ゴー ) 0 ( オフセット ) X ( へキサ ) E ( 工スケープ ) D ( ダンプ ) P ( P ROM ライト ) B ( プレイク ) 800 : 5A 800 ; A6 ィ ン 図 4 新しいデータが 表示される > G ッセージ M コマンド実行時のメ ンドです。 M コマンドを入 力すると C R T 画面に図 4 のようなプロンプトメッセ ージが表示されます。 16 進 数でアドレスを入力すると , その番地のメモリの内容が C R T 画面上に表示されま す。データを変更する場合 には 16 進 2 桁のデータをキ ーインします。いすれの場 合 ( データの変更を行なお うが行なうまいが ) も続い て回キーを押すと次のアド レスのデータが表示されま す。国キーを押すと M コマ ンドは終了します。キー のかわりに亘キーを押 すと , ひとつ前のアドレス のデータが表示されます。 * G コマンド * G コマンドは上記 3 ) に相 当する機能を持ちます。 G コマンドを入力すると画面 に図 5 のようなプロンプト START ADDRESS( ? ) ; ■ 図 5 G コマンド実行時のメッセージ 59
表 3 メモリからレジスタへ 1 バイトのデータを転送する命令 これらは先月号のムープ命令と同様に , オペランド のコンマの右側から左側へ転送することを示します。 そして B2 には転送したいデータを 16 進数で書きます。 たとえば A 0 H というデータなら , MOV A, OAOH というように書きます。データの上の桁が A ~ F で始 まる時はその前に 0 をつけて 16 進数であることを示し ポインタ プログラム カウンタ プログラムカウ ンタの指示する 番地の内容 レジスタベア M, A ーモ ニック MVI LDA LDAX MOV オペ ランド A,B2 B3 B2 「 p A,M 説 明 アドレス オペコード 3 A 57 13 ーモニック L D A オペランド 1 3 5 7 H 呼び方ムープイミディエート (MoVe lmmediate) 機能 ( A ) ←く B2 〉 2 バイト命令 1 バイト命令 機能 (A) ←〔 (H)(L) 〕 memory) (MOVe from 呼び方ムープフロムメモリ 1 バイト命令 機能 (A) ←〔 (rp) 〕 indirect) (LoaD Accumulator インダイレクト 呼び方ロードアキュムレータ 3 バイト令今 機能 ( A ) ←〔く B3 > く B2 〉〕 direct) (LoaD Accumulator ダイレクト 呼び方ロードアキュムレータ 図 15 LDA B3 B2 のコーディング例 LDA B3 B2 ます。 LDAX rp この命令でレジスタベアとして指定できるのは , C と D E だけです。 H L の時には , MOV A, M B この命令ではひとつ注意しなくてはなりません。そ れはオペコードの書き方です。この命令をコーディン グする場合 , 2 バイト目と 3 バイト目には転送したい データの入っているメモリ番地を書くのですが , 上 2 桁は 3 バイト目に書き , 2 バイト目には下 2 桁を書か なければなりません。ということはメモリへプログラ ムを書き込む時にこの順でなくてはいけないというこ とです。これは C P U の動作や構造として決められた ことなのでしかたありません。まちがえないように しましよう。例を図 15 に示します。 5 メモリとレジスタの間のテータ転送 ( その 2 ) 今までは , A レジスタ←メモリ という転送命令を見てきました。今度は逆に A レジスタ→メモリ という転送命令を見てみましよう。表 4 に示します。 表 3 と比べていただければ対応関係がよくおわかり になると思います。表 3 の M V I に対応する命令はあ りません。 1 バイト転送には , 先に述べたように , A レジスタ 以外を相手にした命令があります。それを表 5 に示し ます。これらは説明するまでもないでしよう。 1 バイト・データの転送の最後として , レジスタ相 手ではない転送命令を示しておきましよう。 ーモ ポインタ ニック プログラムカウン タの指示する番地 STA オペ ランド B3B2 説 明 こで M というのは H L レジスタベアで を用います。 指示されるメモリ番地の内容のことを示します。 B C レジスタベアで指示されるメモリ番地の内容を A レジ スタにいれるには , LDAX B というように B だけで B C レジスタベアであることを 示します。 では , なぜ H L レジスタベアをポインタとする時に は別の命令を使うのでしようか。それは H L レジスタ ペアの特典によるものです。 B C と D E をポインタと してデータを転送できるのは A レジスタ相手の時にし かできません。ところが , H L をポインタとした時に は A ~ L のどのレジスタを相手にしてもできるのです。 48 の内容 レジスタベア STAX MOV 呼び方ストアアキュムレータ ダイレクト ( STore AccumuIator direct ) 機能〔く B3 〉く B2 〉〕← ( ) 3 バイト命令 呼び方ストアアキュムレータ インダイレクト ( STore Accumulator indirect ) 機能〔 (rp) 〕← CA) 1 バイト命令 呼び方ムープトゥーメモリ (MOVe to memory ) 機能〔 (H)(L) 〕← CA) 1 バイト命令 表 4 レジスタらメモリへデータを転送する命令 ( 転送されるデータは 1 バイト )
☆マイコン付実習通信講座受講生募集中 . 〃 使えるマイコ ン RMC - 1007 イコン RMC -1007 は、学習しやす いように、 CPU 部、メモリ部など プロック別に配列されています。入門 者にはわかりやすいと好評てす。 《 RMC -1007 の主な仕様》 CPU: 8080A / クロック周波数 : 2.04 8 MHz / ROM : 1 K バイト ( モニタブ ログラム他内蔵 ) /RAM : 256 バイト ( 本体基板上て 1 K まて拡張可 ) / 入力 : キー入力 ( 16 進キーとファンクショ イコンに興味を持ったら、さっそく 0 他社と比べて下さい マ ンキー 4 ) / 出力 : 6 桁セプンセグメ マイコン付の当講座て学習をお始め ントによる 16 進表示 ( アドレス 4 桁、 講座なら、マイコン十電源に、通信 当 ください。入門者に最適のワンボードマ データ 2 桁 ) / 動作モード : シングル 講座の受講料まで、すべてを含めて ステップ、 R U N をスイッチにて切り イコンと指導て、短期間に基礎原理から 88 , 000 円です。しかも、この内容、教材。 替え / 電源 : 外部電源十 5 V 士 5 他社と比べても決して劣るところはあり プログラミング、応用・使いこなしまて、 % 2 A 十 12V 士 5 % 0.1 A / オーデ ません。 イオカセットインターフェース内蔵 : マイコンのすべてがマスターてきます。 入門者、初心者には見逃せない、通信 市販のカセットテープレコーダて、プ 講座です。 ログラム、データのストックがてきる 短 / 期 / 速 / 習 / か / マ / サイズ : 310mmX180E 周波装置 : 《教材と学習内容》 ( オプション ) T V インターフェースポ ・テキスト : B 5 判 2 色刷全 6 巻十 ダイグ決 / .. ード、フルキーポード、拡張メモリポ 別巻総計約 600 ページ・モニタ ードがあります。 プログラム集他 ・ RMC -1007 は完成品て、す。組立途中 ・マイコンの動作と構成・プログラ のミスはありません。しかも、電源付 講座て、は、初めてマイコンの学習をする 当 ムテクニック・入出力の方法・応 て、すから、どなたにも十分にご満足い 人も無理なく学習てきるようにテキスト 用プログラム他基礎から応用まて、 ただけます。 を始め各教材が作られています。 を網羅 . 〃 あなたは、自宅て、テキストを読み、その指 △マイコン付で 示に従ってマイコンを操作してください。マ 88 , 000 円 イコンの持つ機能を一つ一つ理解し、マスタ ーしていくことがてきます。通信教育てすか ら、疑問点は担当講師が、十分納得て、きるよ うに解答いたします。この解答がテキストの 学習をより内容のあるものにしてくれ ます。 わかる の活用 0 、 0 多無進呈 ・とじ込みハガキに住所・ 氏名など必要事項を記入し、お送りください。 すぐに「案内書」をお送りいたします。 内 〒 7 東京都杉並区荻窪 5 ー谷 03 ( 393 ) 4325 DG 電子技術教育協会月一
電電 6 単位テレタイプを T 日 0 日 S に接続する 山形データー通信クラブ 奥山昌男 せる , ④ TK ー 80BS のプログラム ( マシン語 ) を TTY の 紙テープに出力し , そのプログラム ( 紙テープ ) をテー プ・リーダーから TK-80B S に入力するシステム , ⑤ アマチュア無線応用のハードコピー等に使用しており ます。 今回はその内 , TK ー 80BS のディスプレイ内容のハー ドコピーを電電 6 単位 TTY を使って作るプログラム , TTY のフルキーより CPU へ入力するプログラムを , イ ンタフェイスも含めて , 紹介します。 6g の住 電電 6 単位 TTY は , 現在 , 各官公庁 , 各会社関係で 使用している , いわゆる加入電信ページ式テレックス (TEX-A3 号 , 2 号 ) です。実際は公衆回線を使用して , 情報の交換 ( ハードコピー ) をしているわけです。通信 速度は低速で 50 ボーです。通信速度とコード ( 穿孔コ 1 文字伝送時間 : 20msX8bit=160ms 1 分間に送受信可能な文字数 : - ーーⅨ 60 = 375 文字 / 分 1 分間当りの平均 WORD 数寺 62.5WORD / 分 1 WORD は平均 6 文字 1 X103 = 50 ボー 通信速度 : 20ms 通信電流 : 20mA プリント文字数 : 1 行 72 文字 最近 , マイコン・システムの外部デバイスとしては , フルキーボード , CRT ディスプレイが主流をしめてい ます。その理由は , ①安価である , ②容易に自作でき る , ③ボーレイトの設定が自由にできる , ④瞬時に結 果がディスプレイできる等があげられます。これらは , キャラクタ表示やゲーム用として , 広く使用されてい ます。しかし , これらには記録性がないという欠点が あります。 そこで , ハードコピーを残すプリンタがほしくなり ます。ところでシリアル・ドットプリンタは , 騒音も なくスピードも高速で良いのですが , なにぶん , 高価 私たちホビーストにとっては , 高嶺の花的 ですので , 存在です。 私たち山形データー・通信クラブでは , 安価に入手 できる電電 6 単位 TTY を使用して , ①メモリダンプ , ② CRT 内容のハードコピー , ③ TTY で BASIC を走ら ク マ 20 20 6 STOP BIT 20 20 20 20 20 20 START 1 3 BIT スペース①ー 5 4 2 START bit > lbit ずつ STOP bit 図 1 電電 6 単位 TTY 通信速度 TTY コード 15 のシリアウト 88
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ BAS ℃全盛の今・ マイコンの原点にもどって ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 岡本竹久 プロクラムを書くために その 2 岐早大学・マイコン研究会 「・一 1 章プログラ乙を書くために 使用ヴる文字・数字とその書き方 / フロクラ乙とコ ' 80 1980 年 1 月号からこの連載を開始したわけですが , ーアインクシートの見方と書き方 / 2 ハイト命令と 年 3 ハイト命令 / 〇 PU はどうフロワラ乙を実行して ' 80 年代の幕明けから 80 系のマシン語の勉強を始めると い < のガ いうのも何ガ縁起がよさそうです ( ゴロがいいだけガ 第 2 章転送命令について な ? ) 。では , 連載第 2 回目を始める前に , 先月号の復 〇 PU のレジスタどうしての転送 習をしてみましよう。ます , コーティンクシートに書 〇 PU のレジスタとメモリ間ての転送 / 1 ハイトの く文字 , 数字 , 内容を他の人に説明できますガ。 C P 転送・ 2 ハイトの転送 / メモリとの間ての転送のと U の中にはどんなレジスタがあって , それぞれどんな 崋 きどう転送先を指定ヴるのガ 崋 役目をしていますガ。転送命令のうち , 乙ープという 第 3 章増減・演算命令について 命令はどんな機能をもっていますか。先月はこの他に 3 2 の補数とは何ガ / 2 進数の加減算はどう行なわれ CPU がどのようにプロクラ乙を実行するガも説明し 月 るのガ / フラクとは何ガ , どんなときにセット , リ セットされるのガ ました。 第 4 章ジャンプ・コール・リターン命令についてを では , 先月の「第 2 章転送命令について」「 1 レジ 4 ジャンフはいつ , どんな時に行なわれる / ジャンプ スタ間のテータ転送」に引きつづき , 今月は転送命令 月とコールはどこガらガうガ / スタッワとは何ガ / ス の続きを説明していきましよう。 タッワをどう使うのガ を第 5 章その他の命令 を 5 2 ~ 4 章て説明しなガったものを説明ヴる を月 2 コーディングシートの書き方 ( 演習問題の解答 ) 第 6 章まとめ 先月号で次のような演習問題を出しました。 演習問題 1 B レジスタと c レジスタの内容を交換 です。 ます , プログラムの方を見てみましよう。コーディ しなさい。 この解答を解説しながらコーディングシートの書き ングシートは必要最小限で , メモの欄がありませんが , 方を説明しましよう。 オーソドックスな欄の並べ方をしていますね。ところ この問題に対し , さっそく K 県の F 君から解答と質 が書き込み方に誤りがあります。先月号で詳しく説明 問が来ましたのでそれを見てみましよう。図 11 がそれ しなかった僕が悪いのですが , ーモニックとオペラ 訂正とお詫び : 一月号 P. 58 の右段下から 4 行目の「 1 は「 2 の誤りです。訂正してお詫び致します。 ( 編集部 ) 45 はしめに 1 2 第 2 章転送命龕について ( 続き )
遜明キャッフ。 6 «—AT N と 書いた細なし。 イメ 一番上キー 右立岩の列の で画面に「にわとり 1 号」が起動したことを知らせるメ し込んで下さい。配線に間違いがなければ , 電源オン と紫外線に注意して , 先月号で増設したソケットに差 ず御了承下さい。 PROM が手許に届いたら , 静電気 付き」のまま送るわけにはゆきませんので , 悪しから 頃になると思います。遅れて申し訳ありませんが , 「虫 間が必要なので , 皆さんの手許へ届くのは次号の発売 図 15 キーに名札をつける 番タト編 クリアプログラム ( ただし FCOC ~ 刊 F 刊 F だけ ) った時にキャリーを見てループをぬけ出すようにつく ンデックスレジスタの内容が F F F F から 0000 に変わ つまり問題のプログラムでは I N X をくり返し , イ ければいけないのです。 きます。このプログラムは正しくは図 1 7 のようにしな はありませんでした。問題をもう一度図 1 6 に示してお 「ダイクストラ先生もがっくり」という感じで , 正解で 1 通のみ ( 石井義人さん ) でした。石井さんの解答も 昨年の 11 月号の宿題の解答は , 前記しましたように 2 表 1 キーポード用へッダーピンの⑦ピンと P I A の①ピン ( CA 2 ) をつなぐ。 P I A@, @ピン間のジャンバを切断する。①ピンに 接続されていたワイヤ ( CPU の - 〒 - 0 ④へつながっ ている ) を⑦ピン (TTQ ・ B ) につなぎかえる。 P I A@ピン ( 丁て A ) と c p U ⑥ピン ( N MI ) をつな ぐ。 P I A ①ピンと AQ—51- 口をつなぐ。 ( AQ— 51 ーロ側は ハンダ付 ) アテンションキーをつけるための c p U ボードの改造 ッセージが表示されます。 次夛 , 次々号で , モニタブログラムを使ったカセッ トインタフェイスのテスト , 調整などや , モニタの内 容の勉強をすることにしましよう。どうも A ー 1 のオ ーナーはソフトウェアに弱いようで , 宿題 ( 79 年 11 月 号 ) に対する解答はまだ 1 通 ( 79 年 11 月末現在 ) しか 来ておりません。 「 A- 1 が泣いてますがな」 ( S ん M 00 ん 0 ) られています。しかし ' 79 年 2 月号の命令セットの項で も説明したように I N X や I N C , I N C A, I N C B 命令などではキャリー ( C ビット ) はまったく変化し ません。したがって I N X を続けてインデックスレジ スタの内容が F F F F から 0000 に変化した時点でも C = 1 とはならないのです。したがって問題のプログラ ムを実行させれば , CLR 命令でいつもキャリーがリ セット ( C = 0 ) されますから , メモリエリアを 00 に するループから脱出できなくなります。そのうちプロ グラムの入っているエリア ( F C 00 ~ A ) も自分でこ わしてしまい , このループから脱出 ( というより暴走 ) 下 COO FC03 FC05 C06 刊 C08 FCOA 6 08 25 20 COO FCOC 02 F9 ORG LDX # MAIN CLR -INX BCS BRA ENDL BRA $ FCOO $ FCOC 0 , X ENPL MAIN ENDL 図 16 11 月号の宿題 クリアプログラム ( ただし FCOC ~ FFF だけ ) FCOO C03 C05 FC06 C08 CE 08 26 20 FCOO FCOC FB MAIN ENDI., ORG LDX # CLR INX 月 NE BRA 図 17 $ COO $ FCOC 0 , X MAIN ENDL 解答 ・刊 COO からスタート ・ # $ FCOC—・一→ IX ・ X 十 1 ーーーーーーーー→ I X ・ C = 1 なら終わり ・ MAIN へジャンプ ・ C00 からスタート ・ # $ FCOC—»IX ・ X 十 1 = 0 なら終わり することになるはずです。 乱数の宿題の方はモニタブ ログラム内に含まれているサ プルーチンを使って , 次号か 次々号あたりで解決すること にしましよう。 63
を再開します。国キーのかわりに回キーを押せば , プ レークポイントを解除し , そこでユーザープログラム の実行を中断してモニタの制御に戻ります。 * P コマンド * P コマンドは私達のモニタ ( にわとり 1 号 ) のオリ ジナルです。 2 K バイトの P R O M ( 2 7 1 6 ) にプロ グラムを書きこむためのコマンドです。 P コマンドを 入力すると図 9 のようなメッセージが表示されます。 P R O M 内に移すべきデータが格納されているメモリ 工リアの先頭アドレスをキーインすると , そこから 2 K B 分のデータが P R O M ( P R O M ライター上の ) に 01 08 書きこまれます。もし P R O M が消去されていなかっ たり , 書きこみ不良を起こした場合には図 9 ( b ) , (c) の ようなエラーメッセージが表示されます。書きこみが うまくいった場合には図 9 (d) のようなメッセージが表 (a) F800 番地 ( 例 ) からのメモリダンプ表示 > D DUMP TOP ADDRESS( ? ) ; 刊 88 CE 8C C6 E6 DF EF FO 2 8F CE 7C 7 刊 8D FF 00 00 0 55 59 0 26 86 26 59 59 D6 59 80 8 DF DF DE DE A7 59 7C 7E 7E C4 DF DE 57 8D EC EO 09 7E 08 7E 8D ED 20 D7 8C 01 ・ 39 ・ 示されます。 * D コマンド * ので , とりあえす , メモリダンプは C R T 画面上のみ しては何も決めていません ( 種類 , 信号伝送方式など ) の実行を終了します。現時点では , まだプリンタに関 の内容を表示します。回をキーインすると D コマンド 国をキーインすると , 続いて次の 64 バイト分のメモリ 16 進で表示します。 64 バイト分の表示が終了した後 , 面上に先頭アドレスから 64 バイト分のメモリの内容を インすると , 図 10 ( a ) のようなフォーマットで C R T 画 マンドに続いてメモリダンプする先頭アドレスをキー D コマンドはメモリダンプ用のコマンドです。 D コ RAM 上のデータ工リアの先頭アドレスをキーインする。 SAVE TOP ADDRESS ( ? ) : 2716 WRITER としておきました。 * ERACE 刊 R 日 0 / / 消去不良時のエラーメッセージ * WRITE ERROR / / 書きこみ不良時のエラーメッセー * WRITE COMPLETE 成功時のメッセージ ン 図 9 P コマンド実行時のメッセージ 図 10 D コマンド実行時のメッセージ E コマンド * 61 OFFO 図 11 X コマンド実行時のメッセージ FFFF ー 00 刊 HEX CALUCULATE ( 例 ) F F F F ~ F 0 0 F を実行した場合 ンドを使ってもできますが , 「サービス」として一発で のオフセット値の算出です。この計算は前記の X コマ ンドアセンプル ) する際に厄介なのは , プランチ命令 私土がソースプログラムを「手」でアセンプル ( ハ * 0 コマンド * ます。 っと田または三をキーインすると演算結果が表示され セージが表示されますから , 4 ケタの 16 進データふた X コマンドを入力すると図 11 のようなプロンプトメッ 演算もたし算とひき算だけあればよいことになります。 は 0000 ~ FFFF までの範囲の符号なし数値でよく , アドレスの計算にだけ使うことにすれば , 扱う 16 進数 風に使えるようなコマンドをつくっておきましよう。 行なうと何かと間違いやすいので , A- 1 を 16 進電卓 アドレスの計算などを 16 進数で行なう場合 , 筆算で * X コマンド * ドをつくっておくことにしました。 がイニシャライズされてしまいますので , このコマン 押し下げてもよいのですが , その場合には CRT 画面 御を戻すには A ー 1 のバネル上のリセットスイッチを プログラムの実行を強制的に中止させて , モニタに制 てモニタに制御を戻すためのコマンドです。ューザー で , 現在実行中のユーザープログラムの実行を中断し E コマンドというのは「エスケープ」コマンドの略