# Turbo Modula-2 Reloaded について --- tags: Borland TurboPascal Modula-2 TurboModula-2 created_at: 2021-07-14 updated_at: 2021-07-14 --- # はじめに **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](./images/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](./images/4364c84d-08ac-0c1a-cd59-6ebfd7c3fb8d.png) C:\TM2 に `cygwin1.dll` をコピーしておきます。 ![image.png](./images/8bd2f726-f193-ba49-5f86-3b4085f28690.png) ## ■ 実行 ### WSL の場合 1. WSL で cd /mnt/c/tm2 2. WSL で ./m2 m2.dsk ![image.png](./images/8600c122-f05c-e21c-1f9d-0335a349134a.png) ### Cygwin の場合 1. cd C:\TM2 2. M2.EXE m2.dsk ![image.png](./images/b1c4598e-db22-98f9-b83f-0709169f77fa.png) M2.EXE のパラメータとして `m2.dsk` を渡して実行するだけです。ショートカットをつくっておくといいでしょう。 ![image.png](./images/512767bd-0836-bf76-2c90-9a4d66d7274f.png) ## ■ Turbo Modula-2 Reloaded の使い方 **Turbo Modula-2** や **Turbo Pascal 3.x** と同じような使い方です。 ![image.png](./images/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](./images/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](./images/1d6c9ed7-afeb-fee8-5077-03e1ee6d2fc7.png) **実行:** ![image.png](./images/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)](./8e8be01f749915167a91.md) - [Delphi の例外処理〔裏〕(Qiita)](./096779a7296d7cabe57b.md)