WinELC1Sim実行ファイル WinELC1Sim.exe
WinELC1simの起動画面を図1に示す。レジスタの値などは、図1とは異なっている場合がある。
|
| 図1. マイクロプロセッサELC-1シミュレータWinELC1simの起動画面 |
画面にしたがって、機能を順に説明する。
実行クロックカウンタは、ELC-1が命令を実行中に経過するクロックの数を累計するカウンタである。 実行クロックカウンタはELC-1の外部にあり、ELC-1から値を読み取ったり値を変更したりすることはできない。
命令定義ファイル、アセンブリ言語プログラムファイルとも、ファイル名の拡張子は自由に付けてよいが、命令定義ファイルの拡張子は".ops"、アセンブリ言語プログラムファイルの拡張子は".asm"とすることを推奨する。 これらの拡張子をつけたファイルは、以下のファイルメニューによるファイル読み込みの際に、自動的に命令定義ファイル、あるいはアセンブリ言語プログラムファイルであると認識される。
|
| 図2. WinELC1Simのファイルメニュー |
|
| 図3. 読み込む命令定義ファイルを選択 |
「開く」ボタンをクリックすると、命令定義ファイルの読み込みを行う。 命令定義に誤りがある場合は、エラーを示すウィンドウが表示されるので、命令定義ファイル中の誤りを訂正し、再度命令定義ファイルの読み込みを行う。
|
| 図4. 読み込むアセンブリプログラムファイルを選択 |
プログラム読み込みが完了すると、直ちにアセンブルを行う。 図5に、プログラムを読み込み、アセンブルが終了したあとのWinELC1Simの画面を示す。
|
| 図5. 「プログラム読み込み」によりアセンブリプログラムを読み込んだ様子 |
WinELC1Simウィンドウ中央のプログラムリスト表示領域には、以下の項目が左から順に表示される。
|
| 図6. 「メモリデータ書き出し」により書き出すデータ、ファイル名を指定 |
書き出すファイルの形式はCSV形式であり、各行に2個ずつ、すなわち列を2つ有する表形式でデータを出力する。
第1列、第2列に書き出すメモリデータの先頭アドレス、ならびにデータ数を10進数で指定する。
[書き出し]ボタンをクリックすると、シミュレータ実行ファイル(WinELC1Sim.exe)と同じフォルダにファイルを作成する。
ボタンをクリックするとELC-1はリセットされる。
リセットを行うと
リセットを行った様子を図6に示す。 マイクロプロセッサELC-1および実行クロックカウンタだけがリセットされ、メモリの内容は保存されることに注意。
|
図6. ボタンによりELC-1をリセット
|
ボタンをクリックすると、
プログラムカウンタPCの現在の値をメモリアドレスとする位置にある命令を1つだけ実行する。
|
|
|
図7. ボタンにより1命令実行
|
レジスタ値は、各レジスタについて左から順に
レジスタの値を変更するには、16進数、2進数、2の補数表現による符号つき10進数、符号なし10進数のいずれかの欄をマウスでクリックするとカーソル(縦棒)が現れるので、キーボードを操作して所望の値に書き換え、Enterキーを押す。 書き換えた欄の解釈方法にしたがってその他の欄の表示は正しく更新される。
例えば、図8のようにアキュムレータACの10進数表示の欄で値を書き換えてEnterキーを押すと、符号なし10進数'200'を16進数に変換した'C8'、2進数に変換した'11001000'、符号付き10進数に変換した'-56'がそれぞれの欄に表示されるとともに、ACにはビットパターン'11001000'が設定される。
|
| 図8. レジスタの符号つき10進数の値を書き換え |
|
| 図9. Enterキーを押すと値の変更が反映される |
状態フラグの値は、チェックボックスによって表されており、
チェックが付けられた状態がフラグ値1、チェックのない状態がフラグ値0を意味する。
チェックボックスをクリックするごとにフラグ値の1と0を入れ替えることができる。
|
stepコマンドとレジスタ値設定
プログラムカウンタPCの値を変更すると、変更後の値がいずれかの命令のアドレスを指している場合には矢印'=>'の表示も更新される。
PCをはじめとするレジスタや状態フラグの値を設定して |
|
| 図10. 「(click)」をクリック |
|
| 図11. メモリアドレスを登録 |
メモリ・ウォッチに表示されるデータは、以下に説明するメモリ・ブラウザと同じである。
|
| 図12. メモリ・ブラウザ |
メモリ・ブラウザには、以下の項目が左から順に表示される。
例えば図12では、アドレス00のメモリ内容は2進数の'10001110'であり、これを16進数表示すると'8E'である。 アドレス00のメモリ内容である2進数'10001110'を2の補数表現による符号なし10進数表示すると'142'、符号付き10進数表示すると'-114'である。 さらに、アドレス00の次のアドレス01の内容である'00000000'を連結して得られる16ビットデータ'1000111000000000'を符号なし2進数と解釈すると10進数では'36352'、2の補数表現による符号付き2進数と解釈すると10進数では'-29184'であることを表している。
現在のアドレスが16進数の1FF(10進数の511)の場合は、次(+1)のアドレスはアドレス000(10進数の0)を意味する。
メモリ内容を書き換えたい行をクリックすると、図11のようにメモリデータ書き換え用の小さなウィンドウが表示される。
|
| 図13. メモリデータの書き換え |
メモリデータ書き換えウィンドウに表示されている情報は、メモリ・ブラウザの表示に加えて、メモリ内容(8ビット)を文字コードとする文字が表示される。 「2バイト」と書かれた欄は、現在のアドレスの内容と次(+1)のアドレスの内容を16ビットの符号なし10進数と解釈した値である。 その下の「符号付」と書かれた欄は、現在のアドレスの内容と次(+1)のアドレスの内容を16ビットの符号付き10進数と解釈した値である。 なお、現在のアドレスの内容を上位8ビット、次(+1)のアドレスの内容を下位8ビットとする。
メモリデータ書き換えウィンドウで、所望の欄において値を書き換えてEnterキーを押すことでメモリの内容の変更が可能である。 「2バイト」およびその下の「符号付」の欄で値を書き換えると、現在のアドレスの内容だけでなく、次(+1)のアドレスの内容も書き換えられるので注意のこと。
|
注意
プログラムが格納されているメモリアドレスの内容も書き換え可能であるが、プログラムリスト表示は変更されない。 プログラムが格納されているメモリアドレスの内容を書き換えると、メモリ内容とプログラムリスト表示が矛盾することになり、その状態でプログラムを実行すると混乱を生じる。 |
ボタンをクリックすると、プログラムカウンタPCの
現在の値が指すアドレスからプログラムを実行する。
ボタンをクリックして、
プログラム実行を中断する以外の操作はできない。
プログラムミスにより発生した無限ループに入った場合にも外部からELC-1を停止する手段はないので、WinELC1Sim自体の実行を強制終了する必要がある。
なお、暴走などにより、プログラムカウンタPCの値がプログラム範囲以外のメモリアドレスとなった場合には、未定義命令エラーによりELC-1が停止することもある。
ボタンをクリックしてプログラムを実行すると、
プログラムカウンタPCの値がブレークポイントの設定されている命令のアドレスになったとき、ELC-1は停止する。
再度
ボタンをクリックすることで、プログラム実行を再開することができる。
もちろん、
ボタンによりブレークポイント位置の命令を実行することも可能である。
ブレークポイントを設定するには、設定したい命令の行をマウスでクリックする。 ブレークポイントが設定された命令は、図14に示すように左端に赤色の丸印が表示される。 ブレークポイントが設定されている命令の行を再度マウスでクリックすると、ブレークポイントは解除される。
|
| 図14. ブレークポイントの設定 |
「実行」ボタンをクリックしてプログラムを実行すると、ブレークポイントにおいて実行が停止する。 例えば、図15に示すようにブレークポイントが設定されているアドレス02Cの命令の読み出しの直前でELC-1が停止する。 ブレークポイントで停止した時点では、そのブレークポイントが設定された命令は実行されていないので注意のこと。
|
| 図15. ブレークポイントにおいて実行中断 |
|
| 図16. WinELC1Simのウィンドウメニュー |
LEDパネルには、2個の7セグメントLEDと8個の単体LEDがあり、それぞれデータを表示するメモリアドレスを設定することができる。 アドレスを設定するには、図17に示すようにアドレス設定欄右端のボタンをクリックすると表示されるドロップダウンリストで、LEDにデータを表示したいアドレスを選択する。
|
| 図17. アドレスの指定 |
|
| 図18. データ表示モードの7セグメントLED |
◆パターン表示モードでは、指定したアドレスの8ビットデータのうち、下位7ビットを7つのセグメントに対応させてセグメントLEDの点灯/消灯を行う。
2個の7セグメントLEDにそれぞれメモリアドレスを指定することが可能であり、アドレス1は左側の7セグメントLED、アドレス0は右側の7セグメントLEDに対応している。
また、各データのLSB(最下位ビット)がセグメントa、その上位ビットがセグメントbというようにビットとセグメントが順に対応している。ただし、MSB(最上位)ビットはセグメントに対応していない。
以下の例では、アドレス015(16進数)のデータは2進数で00011011、アドレス016(16進数)のデータは2進数で10100101であり、これらのデータに基づいて各セグメントが点灯/消灯した結果が図19の7セグメントLED表示である。
|
| 図19. パターン表示モードの7セグメントLED |
|
| 図20. WinELC1Simのウィンドウメニュー |
ドットマトリクスは縦に8個のLEDが並んだ列が横に16列並んでいる。
列は左から順に列0、列1、...とし、右端が列15となる。
ELC-1が列指定アドレスに書き込む8ビットデータの下位4ビットの2進数をXとすると、列XのLEDが点灯可能となる。
ELC-1がデータアドレスに書き込む8ビットデータの各ビットは、8個の行に順に対応し、MSBが行7、LSBが行0となる。ビット値が1のときにLEDが点灯可能となる。
例えば、列指定アドレスに$nA(nは任意の16進数)、データアドレスに$21を書くと、行0列10と行5列10のLEDが点灯し、その他のLEDは消灯する。
|
| 図21. ドットマトリクスLEDの仕組み |
このように、同時に点灯可能なLEDは1つの列だけなので、ドットマトリクスのすべてのLEDを利用するには、LEDを点灯する列を順次切り替え、それに伴って行データを適切に切り替える必要がある。
人間がドットマトリクスLEDを見る場合、残像現象により同時に複数の列が表示されているように認識し、全体として16×8個のLEDの点灯/消灯パターンが見えることになる。
WinELC1Simは残像をシミュレーションし、列切り替えが十分速く行われれば以下のように表示される。
|
| 図22. ドットマトリクスLED表示例(プログラム実行中) |
プログラムが終了もしくはブレークポイントで停止したときは、現在指定されいている列のLEDのみが現在のデータに従って点灯し、その他の列のLEDはすべて消灯する。
|
| 図23. ドットマトリクスLED表示例(プログラム停止中) |