ちょっとだけCASLⅡとCOMETⅡ絡みのおべんきょがあった
流石に4日だけじゃ0からスタートして浮動小数点のIOと四則演算の実装なんてのは無理だったな
内容
ひみつ♡(もうちょい経ったら後悔するかも)
CASLⅡとCOMETⅡのシミュレーション環境といえば
IPA本家のライブラリ(Javaで動く)
こ↑こ↓ でもオラJava使ったことはねぇし,Java SE 8はライセンスがダメで無料じゃ使えねぇって聞いたぞ… 触ったことのねぇJDKってやつやOpenJDKってやつやAdoptOpenJDKってやつに立ち向かって環境構築して,そっから更にCASLⅡとCOMETⅡに触れるってのは,いくらなんでも素人には無理があっぞ!
いろんなWebサイト
でもオラ途中でぜってぇ嫌になっぞ!VSCodeとterminalでパチパチやりてぇんだ!
古の謎exeファイル
macOS Catalinaが実行を許すわけねぇだろ!?
救いの手
最強のCASL2/COMET2環境 by @maxfie1d ひゃ〜,こりゃどえれぇガチプロ様に出会った!オラとてもラッキーだ! npmなら昨年ちょこっと触ったことがあったからな!いける気がすっぞ!
方針
npm
があるといいよねnode
はそんなに関係しないよ
direnv
で環境を組み分けようnode-casl2-comet2
を利用させていただく- ついでに
VScode
の機能拡張についてもだな… - すみません,まだ
bash
を使っています…- そもそも開発者ではないので…nodeあたりのツッコミどころ満載ですよね.すんません
準備
homebrew
を揃える
同じような情報はいっぱいあるだろう,それを踏まえながら公式サイトを見れば良いのではないか…?
node
,nodenv
,npm
を揃える
$ brew install nodenv
ここで$PATH
チェックだ
export PATH=$HOME/.nodenv/shims:usr/local/bin/nodenv:$PATH
$ source ~/.bashrc
人によっては違うかもしれねェが…ウチのnodenv
もnode
もnpm
もコレで動き続けている…
$ nodenv install -list
今回はそこまで関係ないと思うが,取り敢えず新しいものを入れておこう…
$ nodenv install 15.3.0
すると勝手にnpm
がついてくるはずだ…ということで
$ node -v $ npm -v
を打ってちゃんとバージョンが表示されたら成功だ…
direnv
を揃える
今回のサブ主役だ…
$ brew install direnv
ここで$PATH
チェックだ
詳しい動作はあとでやるがここでおまじないだ,この文
eval "$(direnv hook bash)"
を.bashrc
に付け加えてからもう一度
$ source ~/.bashrc
詳しい解説はいまさら direnv の解説 by @ngyuki にある,そちらを参照されたし…
更にこれが有名かどうかわからないので公式ドキュメントを貼っておく.
bash
にhook
したのは見てわかるけど,なんでコレで動くのかがわからない…
node-casl2-comet2
を揃える
$ npm install @maxfield/node-comet2
なお,npm init
をする必要はないもよう
えっグローバルインストールじゃないやん
たしかにIPAの試験に立ち向かうためならいっそ気合入れてグローバルインストールしても良いかもしれません. その場合は
$ npm -g install @maxfield/node-comet2 $ npm root -g
でちゃんとパスを確認して,通ってなかったら同じ要領でパスに追記してあげてください…
そしたらdirenv
の出る幕もないと思われます…
(私はただ-g
に入れた後の管理をやりたくないからやめといただけです)
VSCodeのインストール
同じような情報はいっぱいあると思うけど,とりあえず公式サイトを読めばわかるんじゃないかな…?
ここで$PATH
チェックだ
⌘+Pで出てきた場所に>Shell
って打つとShell Command: Install 'code' command in PATH
って出るのでやっておこう,/usr/local/bin/code
のシンボルが生成されるのでbash
の$PATH
のレンジに入る
ここで$EDITOR
チェックだ
更にさっきの要領で
export EDITOR=code
を継ぎ足して
$ source ~/.bashrc
…これでデフォルトの$EDITOR
がVSCodeになったよ!他のエディタ?知りませんね…
direnv
の本領発揮
node-comet2
のシンボルは./node_modules/.bin
にあるがそんなパスは用意していないし,かと言ってわざわざ.bashrc
に書き込む気も起きない,だからディレクトリごとにそこら辺を弄れるdirenv
を召喚した…!
(だからこういう場所で何も考えずに連打してもcommand not found
しか出ない,node
とは事情が違う)
.envrc
を作る
$ direnv edit
ここで$EDITOR
が通ってなくてエラーを吐かれてしまった…あると一発でVSCodeが開く
.envrc
を書く
export PATH=$PATH:./node_modules/.bin
保存OK?
direnv
を起動させる
その場で
$ direnv allow
はい,これでこのディレクトリの変数が書き換わりましたっ…!
ちなみにそこから出ると
direnv: unloading
また入ると
direnv: loading ~/xxx/yyy/.envrc
実験
ここからがようやくいよいよアセンブラの世界だ…
ファイル生成
$ touch test.cas
アセンブリファイルの拡張子は.cas
で固定っす.
ファイル編集
超絶簡単なモノで良いっすか?
IO START IN INPUT, INPUTL OUT INPUT, INPUTL RET INPUT DS 256 INPUTL DS 1 END
本当にただ吸って吐くだけなんですけど… (アセンブラそのものに関しては,ちゃんとすごい人の記事をみなさま読んでください,私も読もうとしています)
コンパイル
$ node-casl2 example.cas
これでよし (オプションとかは製作者様のgithubを参照)
実行
$ node-comet2 example.com
実行ファイルの拡張子は.com
で固定っす.
するとこんな画面が現れます
PR #0000 ( 0) [IN #0007, #0107 ] STEP 0 SP #FFFF ( 65535) OF: ↓ SF: ↓ ZF: ↓ GR0 #0000 ( 0) GR1 #0000 ( 0) GR2 #0000 ( 0) GR3 #0000 ( 0) GR4 #0000 ( 0) GR5 #0000 ( 0) GR6 #0000 ( 0) GR7 #0000 ( 0) > s > argaethasjtsrjryjs PR #0003 ( 3) [OUT #0007, #0107 ] STEP 1 SP #FFFF ( 65535) OF: ↓ SF: ↓ ZF: ↓ GR0 #0000 ( 0) GR1 #0000 ( 0) GR2 #0000 ( 0) GR3 #0000 ( 0) GR4 #0000 ( 0) GR5 #0000 ( 0) GR6 #0000 ( 0) GR7 #0000 ( 0) > s argaethasjtsrjryjs PR #0006 ( 6) [RET ] STEP 2 SP #FFFF ( 65535) OF: ↓ SF: ↓ ZF: ↓ GR0 #0000 ( 0) GR1 #0000 ( 0) GR2 #0000 ( 0) GR3 #0000 ( 0) GR4 #0000 ( 0) GR5 #0000 ( 0) GR6 #0000 ( 0) GR7 #0000 ( 0) > s
> s
は実行オプションで
h 対話モードのヘルプを表示します。 q プログラムの実行を終了します。 r 対話モードを終了してプログラムを実行します。 s 命令を1つ実行します(ステップ実行)。
のどれかを押してEnterすると進みます
そう,レジスタや関係する主記憶の動きを刻々と追跡できる!これはすげぇ…
経過が要らないなら
$ node-comet2 -r example.com
それでも入力が求められた時は流石に止まりますけど…
感想
ライブラリが整備されているCってとっても高級な言語なんだなぁと… 符号付き整数のIOの実装だけで苦しみました,浮動小数点のIOの実装なんて今の私には全く無理でした…ヒェッ…
おま○け
CASLⅡ・COMETⅡむけのVSCodeの拡張機能!…も,@maxfie1d様製だった… これがガチプロの世界か… (色々やれることが多すぎてまーったく使いこなせてないけど補完は助かる)