起動は,K-COM.exeを実行すればよい.K-COMはシェアウェアなので未登録なら図4.2の画面が開く.キャンセルを押すと図4.3のウィンドウが開く.未登録でも全ての機能が使えるが,登録するときは本体のReadme.txtを参照して登録料を支払い,送られてくる登録キーを入力すれば図4.2のメッセージは出なくなる.
以下の基本操作は,ウィンドウ上のボタンにより行える.
・右下のステップ実行または自動ボタンで、ステップ動作または自動動作を切り替える.
・フェッチ/実行は、ステップ動作時、命令読み込み(フェッチ)と実行(エグゼキュート)を交互に行う。
・リセットボタンで、各レジスタをリセットする。(停止状態からの復帰)
・入出力ポートが用意されており,左下のチェックボックスより入力を行うことができる.右側が出力ポートである.
・プログラムを入力するには、メインメモリのボタンを押す。すると、メモリマップのウインドウが開くので直接機械語を入力できる。ファイルによる機械語の入出力も行える.
メニューより以下の操作を行うことができる.
・K-COMで使われる計算機構成パーツの動作確認にために作成したアプリケーションをパーツメニューから呼び出すことができる.
・クロックスピードは、オプションメニューのクロックスピードでウエイト無しの最速から10秒までを選択できる。
・外部入出力装置とのデータ交換も可能である.オプションメニューの外部入出力で”許可する”を選択すると、クリップボードを介した外部入出力装置とのデータ交換が可能となる。
・専用アセンブラはアセンブラメニューから起動できる。
・外部入出力装置を利用するに便利なように図4.4の様にK-COMウィンドウのサイズをオプションメニューから変更できる.(サイズ変更の際,全ての情報は引き継がれないので変更後はプログラムの再読込,リセットが必要な場合がある.)
適当なプログラムを入力後,ステップ動作または自動動作を行うと,動作内容をテキストボックスに示すとともに、動作中のデータの流れをラインの色を変えて表示するようになっている.
動作の一例として,サンプルとして収納されているプログラムをファイルよりメモリに読み込み,実行する手順を示す.
(1)ウインドウ上のメインメモリをクリックする.すると,図4.5の様にメモリ内容が表示される.起動してすぐのメモリ内容は全て”00”になっている.ここで,メモリマップ上に直接機械語プログラムを入力することができる.また,機械語プログラムについて1行コメントをつけることができる.
(2)ファイルボタンをクリックすると,図4.6のウィンドウが表示される.これにより,直接入力した機械語プログラムを保存するか,もしくは以前作成した機械語プログラムを入力することができる.また,アセンブラにより別個に作成したプログラムも読み込むことができる.ここで,K-COMフォルダの中のSampleフォルダを選択し,”keyin_out.hex”ファイルを選択する.これは,入力ポートからアキュームレータにデータを取り込み,出力ポートにデータを出力するプログラムである.
(3)読込ボタンでファイルが開き,メモリマップ上へプログラムが転送される.ファイルにコメントがついていれば表示される.
(4)メモリマップを閉じ,K-COMウインドウの”フェッチ/実行”ボタンを押す.すると命令のフェッチ動作が行われる.
(5)続けて”フェッチ/実行”ボタンを押すと,次は取り込んだ命令の実行が行われる.最初の命令はロード命令であるので,コントローラ中の命令デコード結果"LD"が点灯し,ロード動作が行われる.
(6)”自動”ボタンを押すと,フェッチ,実行サイクルが自動で繰り返される.実行スピードは前述のようにオプションメニューで設定できる.
(7)入力ポートのチェックボタンをクリックすると入力信号をHighレベル(1)又はLowレベル(0)に変化できるので,入力された信号がアキュームレータに取り込まれ,その内容が再び出力ポートに転送される過程が確認できる.(それ以外の動作は,条件ジャンプ命令を用いた繰り返しのための命令実行が行われている.)
レジスタ(図4.7)
D-FF8個からなるレジスタであり,入出力をスイッチとLEDにより入力及び表示することができる.
ALU(図4.8)
論理・算術演算ユニットである.IRの値により行う演算が決まり、000のADD命令から011のSHIFT命令までが入力されたとき演算動作を行い,その他の入力の時は,ALUはアキュームレータのデータを素通しする.この演算動作は,クロックに同期して行われる.演算結果は,ALUに備えられているラッチ(一時記憶レジスタ)と,フラグに出力される.
メインメモリ(図4.9)
主記憶装置である.アドレス信号を受け,00Hから1DHまでのアドレスが選択されたとき,メモリの読み出し,書き込みを行う.読み出し時は,メモリ内容がデータバスにセットされる.書き込み時は,データバスにセットされた内容が所定のアドレスに書き込まれる.
プログラムカウンタ,命令レジスタ(図4.10)
命令レジスタとプログラムカウンタの動作を示している.通常は制御構造の信号によりプログラムカウンタの値が1ずつ増加し,命令を順に読み込んで行くが,条件ジャンプ命令の実行により,ジャンプが行われると,プログラムカウンタにはオペランドのアドレス値がロードされる.
I/Oポート(図4.11)
アドレスデコーダにより1EHまたは1FHのアドレスが選択されると,入力または出力ポートがそれぞれ選択され,外部装置との入出力が行われる.外部入力はチェックボックスにより設定でき,アドレスデコードを受けるとデータをバスに出力する.出力は,アドレスデコードを受けてデータバスの信号を出力ポートのD−FFの入力に受けた状態で,クロック信号によりデータをラッチし,出力をポートに保持する.
コントローラ(図4.12)
マイクロプログラム制御方式の制御構造である.制御論理回路には,命令レジスタ上位3ビットの命令コード,フラグ,及びマイクロコードROMが入力され,クロックに同期して次の状態がステータスレジスタに出力される.ステータスレジスタの値はデコードされ,マイクロコードROM内に記憶された制御信号が各回路の入出力ゲートに送られる.
”LD”はロード命令であり,指定された番地のメモリ内容をアキュームレータ(ACC)に転送する命令である.オペランドは”&H1E”である.この”&H”は16進数を記述するとき数値の前につける識別記号である.1E番地はメモリでなく入力ポートに割り当てられているので,入力ポートよりアキュームレータに値を取り込みむ動作を行う.オペコードとオペランドの間は,ラベルの後と同様に1つ以上のスペースまたはタブが必要である.
8行目のST命令は,アキュームレータの内容を指定された番地のメモリに転送する命令である.今の場合オペランドの1F番地はメモリでなく出力ポートに割り当てられているので,アキュームレータの値を出力ポートに出力する動作を行う.
9行目の”NAND”命令は,アキュームレータの値と指定されたアドレスの内容との論理演算NANDを行い,結果をアキュームレータに代入する命令である.オペランドには11行目のラベル”D0”が記述されている.
11行目の命令”DB”は補助命令と呼ばれるものである.アセンブラはこの命令のかかれている番地に1バイト分の領域を確保し,オペランドの数値を置く.よって,9行目のNAND命令はアキュームレータの値と0とのNANDをとり,アキュームレータの値に関わらず,0が結果として与えられる.
10行目のJPNZ命令は直前の演算結果が0か否かで条件ジャンプを行う命令である.直前のNAND演算では,結果が0なのでジャンプを行う.K-COMでは命令数の都合で無条件ジャンプ命令を用意できなかった.無条件ジャンプが必要なときにはこの例の様に,必ず条件が一致するような演算を直前に行ったのち条件ジャンプを実行することで,無条件ジャンプとすることができる.JPNZ命令の飛び先は,先に示したラベル”LOOP”の行であり,本プログラム例は”LD”から始まる以上の動作を繰り返すプログラムである.
同プログラムのアセンブル結果を図4.15に示す.
1行目はプログラム例の1行目の”;”を除いたものである.このように,機械語ファイルの先頭には必ずコメント行が1行はいる.直接機械語ファイルを記述する際は,最初の行に必ずコメントまたは空白行を入れなければならない.
2行目の”9E”はLD命令のアセンブル結果である.3行目以降,同様にアセンブル結果が入る.6行目の”0”は補助命令”DB”により置かれた定数データである.
”9E”はメモリの0番地に,以降同様に”0”はメモリの4番地に置かれる.5行目の”E0”はラベルに従い,0番地にジャンプする命令である.
K-COMのオプションメニューより外部入出力を”許可する”を選択する。すると、クリップボードを介した外部アプリケーションとのデータのやりとりが可能となる。先ののプログラム例,”keyin-out.hex”を実行すれば,パッドより入力した値がLEDに出力される.
その他,制御の演習用パーツとして,図4.17に示す油温コントロールのシミュレータを用意した.容器に油が入れられ,容器下面にヒータがセットされている.ヒータに電力を供給するとヒータが加熱され,油の温度が上昇する.ヒータ電力はボタンにより直接加減できる.油の温度は周囲温度とヒータ電力,及び時間経過により決まる.周囲温度,油の温度,ヒータ電力はウィンドウ内のテキストボックスに表示されている.
この油温制御系において,外部に接続されたコンピュータにより温度制御を行うには,コンピュータは温度センサから入力を得て,ヒータの出力制御を行えなければならない.
チェックボックスの選択により外部入出力を”使用する”にする.すると,油温制御系とK-COMが仮想的に接続される.K-COMの出力ポートの信号がヒータへの入力電力となり,油温がK-COMの入力ポートの信号となる.
油温を目標値に一定となるような制御を行うプログラムをサンプルとして用意した.Sampleフォルダから"oilcontrol.hex”という機械語プログラムをメモリにロードし,外部入出力をK-COM,油温コントロールともに可能にしてプログラムを実行すると,油温が100℃一定になるように温度制御が行われる.クロックスピードを変えると,目標値に対する温度のふれ幅が変化することが分かる.
K-COMを用いて,様々なプログラミング演習を行うことができる.演習を通して,コンピュータの構造について基礎的な知識が習得できれば幸いである.以下に簡単な演習課題を用意したので各自演習を行ってほしい.
課題1 用意された2値の足し算を行うプログラムを作成せよ.また,桁上がりが生じた際,どのような結果になるか確かめよ.
課題2 用意された2値の引き算を行うプログラムを作成せよ.結果が負の数になる時の結果について調べよ.
課題3 用意された2値のかけ算を行うプログラムを作成せよ.
課題4 用意された2値のわり算を行うプログラムを作成せよ.ただし,結果は整数値とし,余りは無視してよい.
課題5 I/Oパッドを用いて,キー入力値の2倍の値をLEDに出力するプログラムを作成せよ.
課題6 I/Oパッドより入力された値を足してLEDに出力するプログラムを作成せよ.
課題7 油温コントロールにおいて,油温が目標値に出来るだけ近い値になるように,制御方法を工夫せよ.