CASLIIのアセンブラとCOMETIIのシミュレータ。
日経ソフト2009年2月号に、「CPUで作るCPUシミュレータ」という記事がありました。そこではCOMETIIのC言語のエミュレータが公開されています。
今回、そのエミュレータをJavaで作成いたしました。また、今回のJava版では、C言語同様シングルスレッドのものと、入出力命令をスレッドにしたマルチスレッド版を用意しました。マルチスレッド版は、大学院の授業でごく簡単なマルチプログラムOS(MICROS)を作るためのものです。
本エミュレータの構成
CPUEMファルダーには次の3つのフォルダーが入っています。
(1) sth:シングルスレッドを意味し、日経ソフト2009年2月号のCPUエミュレータをJAVAで書き直したものです。オリジナルにはIN命令に誤りがあるため、一部修正しています。
(2)mth:マルチスレッドを意味し、IN命令とOUT命令をスレッドで実行するものです。INとOUTがメインと並列動作するので、スレッドの実行時間を考えてプログラムする必要があります。デバッグのために
mthは、そのままでは使うには工夫が必要です。例えば、入出力命令をスレッドに頼んだままメインの処理が終わってしまったりします。今回は、IN命令のチェックのた、CASLIIにWAITという命令を追加しました。これは、「IN命令が完了するまで次の実行を待つ」命令です。
mthは、元々、次のinthの基本形として作成したものです。
(3)inth:inthはIN命令のスレッド化と院の教材を意味します。MICROSでは、IN命令の入力待ちの間に他のプロセスを走らせます。そのため、OUT命令は従来のものを使いIN命令だけスレッドを使います。
院生は、inthでMICROSを作ります。
使い方:
コンパイルと実行の方法を紹介しますが、実行には、付属のバッチファイルを使用すると便利です。実行時のクラスファイルの指定などがいらなくなります。
バッチファイルは、(WindosXPの場合)コマンドプロンプトの画面を開いて、コマンドプロンプトにバッチファイルをドラッグしてEnterキーを押すだけで実行できる便利なものです。
(注:バッチファイルをただダブルクリックすると、一瞬コマンドプロンプト画面が出てすぐ消えてしまいます。)
要するに、 実行コマンドを毎回入力しなくてよい。起動パラメータの設定を保持できる(一度行えばよい)というような感じです。
(注:XPでは確認しましたが、VISTAではバッチファイルが動きません、バッチファイルのそばに「実行命令.txt」というファイルがあるので、そこからjava…..という命令をコピーし、)
(注:以下\は、半角¥マークを意味する)
step1(コンパイル): emuの格納されているディレクトリで、以下を実行 (スレッドの有無に関わらず同様)
javac emu/*.java
(すべてのjavaファイルをコンパイル)
例) C:\home\emu/〜.java となっている場合
ディレクトリ移動 cd C:\home
コンパイル javac emu/*.java
step2:クラスパスを設定
バッチファイルの以下の箇所を編集
set classpath=XXXX
例) C:\home\emu/〜.java となっている場合
set classpath="C:\\home"
※ /(スラッシュ)は、\\
クラスパスの書き方は、同ディレクトリーの古谷用があるので、参考にしてください。古谷用は、CドライブにCPUEMというフォルダーがある。
step3:アセンブラソースファイル名を設定
バッチファイルの以下の箇所を編集 set filename=XXXX
例) C:\home\file\test.txt となっている場合
set filename="C:\\home\\file\\test.txt"
※ /(スラッシュ)は、\\
/*私の場合、
C:\CPUEM\sth\emu\~.javaというディレクトリ構成なので、
***
REM ファイル名(絶対パス)
set filename="C:\\CPUEM\\testfile\\FILE_CASL2.txt"
REM デバッグモード(-t:デバッグON、ブランク:デバッグOFF)
set debug=
REM クラスパス
set classpath="C:\\CPUEM\\singth"
***
となります。
*/
step4:デバッグモードを設定
バッチファイルの以下の箇所を編集
set debug=-t (デバッグモードON)
set debug= (デバッグモードOFF)
※ デバッグモードOFFの場合は、何も設定しない
(マルチスレッド用では、デバッグモードがどう動くか不明)
step5:実行
コマンドプロンプトにバッチファイルをドラッグ
なお、step1〜4は、一度行えばOKです。
コマンドラインからプログラムを実行する場合は、
emuディレクトリが格納されているディレクトリに移動して、以下を実行してください。
(デバッグモードONの場合) emu.CpuEmulatorMain アセンブラソースファイル名 –t
(デバッグモードOFFの場合) emu.CpuEmulatorMain アセンブラソースファイル名
コマンドラインからの実行の場合、パスとクラスパスの設定が別途必要になります。
バッチファイルと並んだ古谷用「実行命令.txt」を参照
==