Turbo Modula-2 Reloaded について

# はじめに

**Turbo Modula-2 Reloaded** は CP/M 版 **Turbo Modula-2** のリバースエンジニアリングから生まれた Linux で動作する Modula-2 です。

 - [Oric4ever/Turbo-Modula-2-Reloaded (GitHub)](https://github.com/Oric4ever/Turbo-Modula-2-Reloaded)

# Turbo Modula-2 Reloaded
Turbo Modula-2 Reloaded は CP/M 版 Turbo Modula-2 のクローンと考えていいと思います。言語仕様も CP/M 版 Turbo Modula-2 に準じています。

## ■ ビルド＆インストール
Linux 環境でリポジトリの `vm_linux` フォルダ内をビルドします。Windows の場合、**WSL / WSL2** を使うか、**Cygwin** でコンパイルします。

**See also:**

 - [Windows Subsystem for Linux (Wikipedia)](https://ja.wikipedia.org/wiki/Windows_Subsystem_for_Linux)
 - [Cygwin (Wikipedia)](https://ja.wikipedia.org/wiki/Cygwin)

###  WSL の場合

 1. リポジトリを ZIP で DL。
 2. vm_linux サブフォルダの中味を C:\TM2 にコピー
 3. m2.dsk を C:\TM2 にコピー
 4. WSL で cd /mnt/c/tm2
 5. WSL で make

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/565b8aee-fbdc-dec3-c4f7-a706672fdb96.png)

### Cygwin の場合

 1. リポジトリを ZIP で DL。
 2. vm_linux サブフォルダの中味を C:\TM2 にコピー
 3. m2.dsk を C:\TM2 にコピー
 4. Cygwin で cd /cygdrive/c/tm2
 5. Cygwin で make

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/4364c84d-08ac-0c1a-cd59-6ebfd7c3fb8d.png)
C:\TM2 に `cygwin1.dll` をコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8bd2f726-f193-ba49-5f86-3b4085f28690.png)


## ■ 実行

### WSL の場合

 1. WSL で cd /mnt/c/tm2
 2. WSL で ./m2 m2.dsk

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8600c122-f05c-e21c-1f9d-0335a349134a.png)

### Cygwin の場合

 1. cd C:\TM2
 2. M2.EXE m2.dsk

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/b1c4598e-db22-98f9-b83f-0709169f77fa.png)
M2.EXE のパラメータとして `m2.dsk` を渡して実行するだけです。ショートカットをつくっておくといいでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/512767bd-0836-bf76-2c90-9a4d66d7274f.png)


## ■ Turbo Modula-2 Reloaded の使い方

**Turbo Modula-2** や **Turbo Pascal 3.x** と同じような使い方です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/9652f6a1-4949-062a-ed31-dec3ef22f211.png)
CP/M のような仮想環境で実行されています。

### メインメニュー

| ショートカット | 説明 |
|:---|:---|
| 〔Alt〕+〔F〕 | ワークファイルの指定 |
| 〔Alt〕+〔R〕 | 実行 |
| 〔Alt〕+〔O〕 | オプション |

### コマンド

`#` プロンプトで実行します。 

| コマンド | 説明 |
|:---|:---|
| E〔Enter〕 | エディタの起動 (ワークファイルを開く)|
| E ファイル名〔Enter〕 | エディタの起動 (ファイルを開く)|
| C〔Enter〕 | ワークファイルをコンパイル |
| C ファイル名〔Enter〕 | 指定ファイルをコンパイル |
|DIR〔Enter〕| ディレクトリを表示します。|
|CD ディレクトリ〔Enter〕| カレントディレクトリを変更します。|
|REBOOT〔Enter〕| Turbo Modula-2 Reloaded の終了|

※他にもコマンドがあります。 `SHELL` フォルダや `SYSUTILS` フォルダを確認してみてください。


### エディタ

| ショートカット | 説明 |
|:---|:---|
|〔Ctrl〕+〔S〕| ファイルの保存|
|〔F10〕| エディタの終了|

### サンプル (FIZZBUZZ)

**編集:**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/955ab113-756b-c0f0-57c2-1629d3f0cdd7.png)

```pascal:FIZZBUZZ.MOD
MODULE FizzBuzz;
FROM InOut IMPORT WriteString, WriteInt, WriteLn;
VAR
  i: INTEGER;
BEGIN
  FOR i:=1 TO 100 DO
    IF ((i MOD 3) + (i MOD 5)) = 0 THEN
      WriteString('FizzBuzz');
      WriteLn
    ELSIF (i MOD 3) = 0 THEN
      WriteString('Fizz');
      WriteLn
    ELSIF (i MOD 5) = 0 THEN
      WriteString('Buzz');
      WriteLn
    ELSE
      WriteInt(i, 1);
      WriteLn
    END
  END
END FizzBuzz.
```

**Turbo Modula-2** には **Turbo Pascal** 互換の READ / READLN / WRITE / WRITELN (すべて大文字で記述) が実装されているため、次のようにも書けます。

```pascal:FIZZBUZZ.MOD
MODULE FizzBuzz;
VAR
  i: INTEGER;
BEGIN
  FOR i:=1 TO 100 DO
    IF ((i MOD 3) + (i MOD 5)) = 0 THEN
      WRITELN('FizzBuzz')
    ELSIF (i MOD 3) = 0 THEN
      WRITELN('Fizz')
    ELSIF (i MOD 5) = 0 THEN
      WRITELN('Buzz')
    ELSE
      WRITELN(i:1);
    END
  END
END FizzBuzz.
```


**コンパイル:**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/1d6c9ed7-afeb-fee8-5077-03e1ee6d2fc7.png)

**実行:**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/47318434-0521-660b-d7c5-51253d80c585.png)

# おわりに

**Turbo Modula-2** についての私の認識は次の通りです。

 - **Turbo Modula-2** は開発は Borland。CP/M 版は Echelon 社が販売した。
 - MS-DOS 版は未完成のものが JPI 社に買い取られ、完成後に **TopSpeed Modula-2** として販売された。
 - 同時期に **FTL Modula-2** という **Turbo Modula-2** よりも安価な製品があった。
 - **FTL Modula-2** は CP/M 版と MS-DOS 版があり、日本国内ではサザンパシフィック社が販売した。
 - **Turbo Modula-2** は日本国内で発売される事はなかった。
 - MS-DOS 用としては他に **N.J.K Modula-2 / 86** があった。中味はおそらく **LOGITECH Modula-2 / 86**。

間違いがありましたらコメ欄でご指摘ください。

**See also:**

 - [Borland Turbo Modula-2 Manual (CPCWiki)](http://www.cpcwiki.eu/imgs/6/64/Borland_Turbo_Modula_2.pdf) - PDF
 - [割と簡単に '標準 Modula-2 / Oberon-2' を試してみたい (Qiita)](https://qiita.com/ht_deko/items/8e8be01f749915167a91)
 - [Delphi の例外処理〔裏〕(Qiita)](https://qiita.com/ht_deko/items/096779a7296d7cabe57b)