経緯
僕の大学では入学時にPCを買うとVirtualBoxを入れさせられ、学校の授業用に何やら設定を施されたubuntuが配布されます。
1、2年生の間は特に配布されたubuntuにありがたみは感じないものの、3年生になると「sep3asm」というオリジナルプログラムを授業内で使うことになります。
これは我が校の教授が教育用に作ったオリジナルCPU、「SEP-3」(モデルは過去の名機PDP-11らしい)で用いるアセンブラのプログラムをアセンブルするもので、いうまでもなく学校で配布されたubuntuにしか入っていません。
ここまでの話は正直どうでも良いという人がほとんどだと思いますが、僕はこの「sep3asm」をMacでどうにか使えないかと考えました。
言い忘れていましたがこの「sep3asm」はコマンドで動くものでLinux用バイナリでした。
したがってMacで動かすには少々工夫が必要でしたが、今回の設定は他の場面でも使えると感じたので方法をシェアしたいと思います。
作業の流れ
コマンドの場所を確認(Linux上)
↓
コマンドのファイルをMacへ移動
↓
実行権限を加える(Mac上)
↓
noahをインストール
↓
コマンドのファイルを所定の位置に移動
↓
rootでnoahを起動
↓
コマンド実行
コマンドの場所を確認
コマンドをMacに移すにはまずコマンドのファイルの場所を特定しなければいけません。
$ where sep3asm
/usr/local/bin/sep3asm
上記のコマンドで探すことができます。
コマンドのファイルを移動
方法はお任せします。
僕の場合はubuntuがVirtualBoxに入っているので共有フォルダでWindowsに移してからLineでMacに送りました。
実行権限を加える。
$ chmod a+x sep3asm
chmod
コマンドは、ファイルやディレクトリのアクセス権を変更するコマンドです。引数のa+x
の意味を一応解説しておきます。
自分なりの認識なので間違っていたらすみません。
chmod
の引数は
<誰に> - <何の> 権限を与える、という構造になっているようです。
<誰に>の部分は4種類
記号 | 意味 |
---|---|
u | 所有者(user) |
g | グループ(group) |
o | その他(other) |
a | 上の三つ全て(all) |
<何の>の部分は3種類
記号 | 意味 |
---|---|
r | 読み込み権限 |
w | 書き込み権限 |
x | 実行権限 |
今回の場合は<全ての者に> - <実行権限>を与えているわけです。
noahをインストール
Macでは、Linux用バイナリを実行できません。したがってこれに関しては何らかの対策を講じる必要があるのですが、色々調べてみるとすごく便利なものを見つけてしまいました。
Noahというアプリケーションは、MacOS上でLinuxOS用アプリケーションを動かすことのできる優れものです。
apt-getやLinux向けgcc、自作のLinuxアプリケーションが、そのままMacOSで動作します。
ということで、早速インストールします。
$ brew install linux-noah/noah/noah
初めて起動するとこんな感じ
$ noah
Noah is installing the initial filesystem in ~/.noah/tree. Proceed? [Y/n] Y
Password:
(中略)
Noah is still under development, so please enable it at your own risk! [y/N] y
(中略)
I have no name!@username:~$
適当にyを押しておきます。
コマンドを所定の位置に移動させる
sep3asmを所定のいちに移動させます。
$ sudo cp sep3asm /bin/sep3asm
コマンドのファイルを/bin
に入れる動作はrootでしかできないのでsudo
でやります。
一応、移動させたら確認してみてください。
$ which sep3asm
/bin/sep3asm
こんな感じになっていたらOK。
rootでnoahを起動
$ sudo noah
Password:
groups: cannot find name for group ID 61
groups: cannot find name for group ID 80
groups: cannot find name for group ID 701
groups: cannot find name for group ID 98
root@username:~#
起動画面はこんな感じです。
もうこのままコマンドが打てる状態です。
試しにプログラムをアセンブルしてみましょう。
今回アセンブルするプログラム
. = 0x1FF
. WORD 0x0A0A, 0xF0F0
MOV #0x200, R6
MOV R6, R0
HLT
アセンブルします。
$ sep3asm sample.s
アセンブル結果がこちら
000001FF: 0A0A
00000200: F0F0
00000201: 43E6
00000202: 0200
00000203: 40C0
00000204: 0000
ちゃんと動作していますね!