Mac環境で、IPA提供シミュレータを使って、アセンブリ言語「CASLII」の「テストファイル」を動かした話

##この記事の対象者
- Mac環境で、IPA提供シミュレータで、CASLIIの「テストファイル」を動かしたい人

##概要
基本情報技術者試験（FE）の午後試験としてアセンブリ言語の1種「CASLII」の勉強をしようと思いました。
**CASLIIを動かせるシミュレータをIPA※からダウンロード**しました。
私はMacを使用していますが、**IPAからダウンロードしたフォルダの中には「Windows環境の取扱説明書」しかありません。**
Macだとどう動かせばいいんだ。。。せっかくダウンロードしたし動かしたい。
いろいろ試して、とりあえず**mac環境下でも「テストファイル」が動いた**のでここに記載します。

※IPA…独立行政法人情報処理推進機構
→　https://www.ipa.go.jp/

##注意
この記事のメインはあくまでも、**「Mac環境で、IPA提供のCASLIIテストファイルを、IPA提供のシミュレータで動かす」**です。

- それ以外のファイル、例えば、自分で作成した.casファイルを動かしたい人は、「[テストファイルじゃなくて、普通の.casファイルを実行したいんだけど](#テストファイルじゃなくて普通のcasファイルを実行したいんだけど)」を見てください！
- いや、そもそもIPAのシミュレーター以外に使えるものないの？って方は、「[いや、ターミナルでいちいちめんどくさいわ！](#いやターミナルでいちいちめんどくさいわ)」を見てください！

##私の環境
- macOS Big Sur バージョン11.4
- OpenJDK 15.0.2
- 今回ダウンロードしたCASLIIシミュレータのバージョンは ver2.0

##IPA提供のシミュレータを使って、IPA提供の「テストファイル」を実行するまでのステップ
1. [Javaをダウンロード&インストールする](#1-javaをダウンロードインストールする)
2. [IPAからシミュレータをダウンロード&解凍](#2-ipaからシミュレータをダウンロード解凍)
3. [アセンブラバッチファイル（CASL2.bat）、実行バッチファイル（RUN.bat）の編集](#3-アセンブラバッチファイルcasl2bat実行バッチファイルrunbatの編集)
    1. 拡張子の変更
    2. パスの変更とターミナルの指定
    3. 拡張子を変更したファイルのパーミッションの変更   
4. [テストファイルsmain.cas、count1.casのアセンブル](#4-テストファイルsmaincascount1casのアセンブル)
5. [テストファイルsmain.casの実行](#5-テストファイルsmaincasの実行)

以上です。
以下で１つ１つ説明します。

##1. Javaをダウンロード&インストールする
IPAが提供しているシミュレータはJavaでアセンブルと実行をしてくれるのでJavaの環境が必要です。
なのでJavaをインストールします。
以下からインストールできます。

https://java.com/ja/download/help/mac_install.html

その後、ターミナル上で

```
java -version
```
のコマンドを打って、ちゃんと入ったかわかります。

（参考）私のやつ↓

```
MacBook-Pro ~ % java -version
openjdk version "15.0.2" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 15.0.2+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 15.0.2+7, mixed mode, sharing)
```

##2. IPAからシミュレータをダウンロード&解凍
以下からダウンロードできます。
https://www.jitec.ipa.go.jp/1_20casl2/casl2dl_001.html

ダウンロードして解凍すると以下のような中身になっています。
![スクリーンショット 2021-06-20 9.36.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731109/fe000ff3-5e29-d795-7d1a-8b95f16b2031.png)
（Manual.pdf抜粋）

##3. アセンブラバッチファイル（CASL2.bat）、実行バッチファイル（RUN.bat）の編集
CASL2.bat、RUN.batはMac環境では動きません。
Mac環境で、.batファイルと同じようなものは、.shのファイルのため.shファイルを作成します。

*（バッチファイル（英: batch file）とは、MS-DOS、OS/2、Windowsでのコマンドプロンプト（シェル）に実行させたい命令列をテキストファイルに記述したもの。バッチファイルを実行すると、シェルプログラム（一般にCOMMAND.COMやcmd.exe）がそのファイルを読み、その中のコマンドを（通常）一行ずつ実行する。バッチファイルはUNIX系オペレーティングシステムのシェルスクリプトに相当する。（wikipedia抜粋））*

そのため、以下の処理をしていきます。
###1.拡張子の変更
- アセンブラバッチファイル:　CASL2.bat　　　→　CASL2.sh
- 実行バッチファイル:　　　　RUN.bat　　　　→　RUN.sh


####2. シェルの記述の変更
取説（Manual.pdf）には、
![スクリーンショット 2021-06-19 18.12.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731109/70bde201-eaf0-81a5-12e3-678359386144.png)

とありますが、
Macで動かす方は以下３つやってください。

1. 各スクリプトを実行するのに使用するシェルを、それぞれのファイルの１行目に書いてください。（私はzshなので、#!/bin/zsh) 
2. 二行目に　「java -jar [それぞれのファイルがある場所] %1 %2 %3 %4 %5」
3. %1 %2 %3 %4 %5 の「%」を全部「$」に変更   

　【参考】わたしのやつ↓

```CASL2.sh
#!/bin/zsh
java -jar /Users/misuzz/projects/javaCASL2_2.0/casl2.jar $1 $2 $3 $4
```

```RUN.sh
#!/bin/zsh
java -jar /Users/misuzu/projects/javaCASL2_2.0/run.jar $1 $2 $3 $4
```

###3. 拡張子を変更したファイルのパーミッションの変更 
今のままだと、２種類の.shファイルは実行権限がないので、
以下の通りターミナルでコマンドを打って、パーミッションを変えてください。

【パーミッション変更前】↓

```
MacBook-Pro TestProgram % ls -l
-rw-r--r--  1 misuzz  staff   79  6 19 16:16 CASL2.sh
-rw-r--r--  1 misuzu  staff   77  6 19 16:17 RUN.sh
```

【パーミッション変更後】↓

```
MacBook-Pro TestProgram % chmod 764 CASL2.sh
MacBook-Pro TestProgram % chmod 764 RUN.sh
MacBook-Pro TestProgram % ls -l
-rwxrw-r--  1 misuzu  staff   79  6 19 16:16 CASL2.sh
-rwxrw-r--  1 misuzu  staff   77  6 19 16:17 RUN.sh
```

↑自分の実行権限（x）が増えました。

【参考】
※ls -l…カレントディレクトリ内の中身の詳細を一覧表示するコマンド
※chmod…ファイルのパーミッションを変更するコマンド

##4. テストファイルsmain.cas、count1.casのアセンブル
上記項番３で.shファイルを作成したので、以下のコマンドをターミナルに打って、テストファイルをそれぞれアセンブルしてください。

```
MacBook-Pro TestProgram % ./CASL2.sh smain.cas
MacBook-Pro TestProgram % ./CASL2.sh count1.cas
```
【参考】実行結果↓

```
MacBook-Pro TestProgram % ./CASL2.sh smain.cas
CASLⅡ Assembler -V2.00(2005/05/27)- ( Date : 2021/6/19 )

  Label:COUNT1   Def:external.       Ref:   6

オブジェクトプログラムを smain.obj へ出力しました。
END CASLⅡ Assembler.
MacBook-Pro TestProgram % ./CASL2.sh count1.cas
CASLⅡ Assembler -V2.00(2005/05/27)- ( Date : 2021/6/19 )

オブジェクトプログラムを count1.obj へ出力しました。
END CASLⅡ Assembler.
```
これで.objファイルができたので次で実行できます！

##5. テストファイルsmain.casの実行
以下のコマンドで実行してください！

```
MacBook-Pro TestProgram % ./RUN.sh smain.obj
```
【参考】実行結果↓

```
MacBook-Pro TestProgram % ./RUN.sh smain.obj
COMETⅡ Emulator -V2.00(2005/05/27)- ( Date : 2021/6/19 )
* *Result* *    PR:0004 [ DREG ]  FR:0(OF:0 SF:0 ZF:0) SP:F000
GR0:0004 GR1:1111 GR2:0000 GR3:0000 GR4:0000 GR5:0000 GR6:0000 GR7:0000
END COMETⅡ Emulator.
```

以上です！！

（ごめんなさい、中身の意味は今勉強中なのでわかんないです、、、）

##テストファイルじゃなくて、普通の.casファイルを実行したいんだけど
そんな方は、**今までご紹介した処理は別に必要ないです。**
IPAから取ってきたら、以下のコマンドで実行できます。
例えば、"Hello,World"と出てくるhello.casファイル新規作成して、実行します。
（[JavaCASL2（IPA公式(？)のCASL IIシミュレータ）クイックガイド for Linux (Ubuntu 10.04) and Windows XP](https://eel3.hatenablog.com/entry/20120108/1326031631#fn-3bd4d232) よりお借りしました。）

```hello.cas
; hello.cas
MAIN    START
        OUT     MSG,LEN
        RET
MSG     DC      'hello, world'
LEN     DC      12
        END
```

コンパイルします↓
 
```
java -jar casl2.jar hello.cas
```

これでhello.objファイルができるので、以下コマンドで実行してください。

```
java -jar run.jar hello.obj
```

【参考】実行結果↓

```
MacBook-Pro javaCASL2_2.0 % java -jar run.jar TestProgram/hello.obj
COMETⅡ Emulator -V2.00(2005/05/27)- ( Date : 2021/6/16 )
hello, world
END COMETⅡ Emulator.
```

以上です！

##いや、ターミナルでいちいちめんどくさいわ！
っていう効率重視の方は、こちらもあるのでお使いください。
[CASLシミュレータ （CASL II 対応）](https://www.officedaytime.com/dcaslj/)


即アセンブルしてくれるし、汎用レジスタに何入ってるか表示してくれるし、楽です。

##私の宿題
- .batファイルにあった「%1 %2 %3 %4」の意味がわからない。smain.casとcount1.casのファイルをつなぐためかなんかの指示を出してそう、と予想してます。
- .shファイルを実行したけど、書き方が分かれば、.shファイルを作らずに、`java -jar casl2.jar $1 $2 $3 $4 smain.cas`みたいな感じのコマンドで実行できるのかもしれない。言語上できないかもしれない。
- そもそもテストファイルの中身ってなにしてたんだろう。（今後勉強していくので、今後わかるようになると信じてます）

##以上です！
ここまで読んでいただきありがとうございます。
ツッコミありましたらお願いします。

##参考記事
- [MacでのJavaのインストール方法](https://java.com/ja/download/help/mac_install.html)
- [どうすればアプレットを実行せずにどのJavaバージョンがWindowsまたはMacにインストールされているかを確認できますか。](https://java.com/ja/download/help/version_manual.html#cmdline)
- [バッチファイル](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)
- [パーミッションについて](http://web.tku.ac.jp/~densan/local/permission/permission.htm)
- [chmod【コマンド】](https://wa3.i-3-i.info/word11204.html)
- [【 ls 】コマンド――ファイルを一覧表示する](https://www.atmarkit.co.jp/ait/articles/1606/27/news018.html)
- [最初のプログラム作りを支援する「高校生だからUnixプログラミング」「中学生でもUnixプログラミング」](http://cacao.chips.jp/NewWeb/resources_programing.html)
- [JavaCASL2（IPA公式(？)のCASL IIシミュレータ）クイックガイド for Linux (Ubuntu 10.04) and Windows XP](https://eel3.hatenablog.com/entry/20120108/1326031631#fn-3bd4d232)