vm2gol v2 製作メモ(16) 簡単なコード生成

目次ページに戻る 前回からの差分をまとめて見る 条件分岐とループができて、 サブルーチンの呼び出しができて、引数が渡せて、 結果を返せて、ローカル変数が使えるようになった!!! ので、これくらい揃えばもうなんでもできるんじゃね!?!? みたいな…

vm2gol v2 製作メモ(15) ローカル変数 / sub_sp

目次ページに戻る 前回からの差分をまとめて見る 今回はローカル変数をやります! これまでスタックをこんな風に使っていました。 ベースポインタ 戻り先アドレス 引数1 引数2 入れ子の呼び出しがある場合はこう: ベースポインタ 戻り先アドレス 引数1 引数2…

vm2gol v2 製作メモ(14) 複数の引数を渡す / スタックオーバーフロー対策 / 返り値

目次ページに戻る 前回からの差分をまとめて見る 前回は引数を 1個だけ渡すサブルーチン呼び出しができるようになりましたが、 今回はそれを 2個にしてみます。 それから、返り値の渡し方を調べたところ、 とりあえずは reg_a にセットすればよさそうでした…

vm2gol v2 製作メモ(13) サブルーチンに引数を1個渡す / add_sp

目次ページに戻る 前回からの差分をまとめて見る 前々回と前回でいろいろ片付いたので引数やります! 引数はスタックに置いて渡すそうです! まず引数を1個だけ使うのをやってみます。 次のようにサブルーチン呼び出し(call)の直前でスタックに push しま…

vm2gol v2 製作メモ(12) リファクタリング / cp

目次ページに戻る 前回からの差分をまとめて見る 道具が用意できたので引数渡しをやりたい! のですが、今回はリファクタリング回にします。 前回やっつけで追加した copy_sp_to_bp と copy_bp_to_sp を整理して、 せっかくのリファクタリング回なので他の部…

vm2gol v2 製作メモ(11) 引数渡しの準備 / bp, push, pop

目次ページに戻る 前回からの差分をまとめて見る さて、ダンプ表示が改善されたところで次に進みます。 call, ret で(多段の)サブルーチン呼び出しができたところまでやったので…… 次はサブルーチンに引数で値を渡せるようにします (ここらへんから「C言…

vm2gol v2 製作メモ(10) ステップ実行 / ダンプ表示の改善

目次ページに戻る 前回からの差分をまとめて見る さて、多段のサブルーチン呼び出しなんかやったりして、だんだん育ってきました。 それに連れてちょっとずつプログラムも長くなってきて、実行時の動きに不満が出てきましたので、 今回は本題の方をいったん…

vm2gol v2 製作メモ(9) 2段以上のサブルーチン呼び出し / スタック領域とスタックポインタ

目次ページに戻る 前回からの差分をまとめて見る 前回簡単なサブルーチンをやりましたが、 今回はサブルーチンからまた別のサブルーチンを呼ぶ、 というのをやってみたいです。 これも普通にできてほしい。 今の状態ではこれはできません。 なぜかというと、…

vm2gol v2 製作メモ(8) サブルーチンの呼び出し(call, ret)

目次ページに戻る 前回からの差分をまとめて見る どんどんプログラムっぽくしていきましょう。 プログラムといえばサブルーチン! サブルーチンやりましょう! 最初は簡単なのがいいので、 reg_a に値をセットするだけの サブルーチンをやってみます。 call …

vm2gol v2 製作メモ(7) ラベルとアセンブラ

目次ページに戻る 前回からの差分をまとめて見る さて、機械語コードをいくつか書いてきて、 ジャンプ先のアドレスを調べて修正するのに慣れてきた一方で、だんだん面倒にもなってきました。 プログラムを修正するたびに調べるのも面倒だし、書きなおすのも…

vm2gol v2 製作メモ(6) if文っぽい条件分岐

目次ページに戻る 前回からの差分をまとめて見る 前回 compare と jump_eq を使っていきなりカウンタを作ってしまいましたが、 この2つがあれば、 a = 0 b = 0 if a == b c = 2 else c = 3 end a = 4 みたいな普通の if 文っぽいことができそうです。ちょっ…

vm2gol v2 製作メモ(5) 条件分岐(compare, jump_eq)

目次ページに戻る 前回からの差分をまとめて見る チンタラやっててなかなか進みませんが一歩ずつやっていきます。 ループができるようになったら、次は条件分岐ですよ! プログラムといえば条件分岐! 条件分岐はどうやるかというと…… compare と jump_eq と…

vm2gol v2 製作メモ(4) カウンタ / プログラムをファイルに

目次ページに戻る 前回からの差分 コンピュータのようなものを作っているので、 何か compute させようということで、足し算をさせて、 regチカのときのループと組み合わせてカウンタを作ってみます。 reg_a の値を 1, 2, 3, ... と増やしていくというもので…

vm2gol v2 製作メモ(3) regチカ(jump)

目次ページに戻る 前回からの差分: https://github.com/sonota88/vm2gol-v2/compare/02...03 プログラムといえばループ! ですね(※1)。 ループをやりましょうということで、 jump 命令を追加して regチカをやりましょう。 (※1 ……と書いてはいますが、実際…

vm2gol v2 製作メモ(2) プログラムカウンタとVMの骨組み

目次ページに戻る 前回からの差分: https://github.com/sonota88/vm2gol-v2/compare/01...02 第一回はさすがにあっさりすぎたのでどんどんやっていきます。 今の状態では vm = Vm.new した後に vm に対して外部から指示してあれこれやらせていて、 あんまり …

vm2gol v2 製作メモ(1) 最初のVM

目次ページに戻る いきなり始める とりあえずアレですよね? レジスタとメモリがあるんですよね? などといって適当に書き始めます。 慣れていてサッと始められるので Ruby です。 サッと始められるの大事です。 # coding: utf-8 require "pp" class Vm def …

vm2gol v2 製作メモ

RubyでオレオレVMとアセンブラとコード生成器を2週間で作ってライフゲームを動かした話 の製作過程を雑にダラダラ書きます。 下書きっぽいものは用意しているので、打ち切りにならずに完走はできると思います(2019-10-05 完走しました!) 予定では全38回 …

RubyでオレオレVMとアセンブラとコード生成器を2週間で作ってライフゲームを動かした話

きれいにまとまってないですが、箇条書き+α程度で雑にメモ。 できたもの https://github.com/sonota88/vm2gol-v1 2018年5月のゴールデンウィーク残り2日というところ(5/5)で思い立って初めて、 5/18 完成。 もっと早く公開したかったんですが仕事が忙しく…

Plumo: pure Ruby + WEBrick + Comet + Canvas で手軽にお絵描き

自分が使うのに必要なものを最低限雑に実装してパッと出した、という感じのものです。API 固まってないです。 sonota88/plumo https://github.com/sonota88/plumo コンセプト的なもの (動きのある)2Dグラフィックを手軽にやりたくなる時がある 何か思いつ…

もっとお手軽な機械可読テキストテーブルフォーマット

前回の Mrtable の紹介エントリ を書いてたときにもっとお手軽なものを思いつき、「あれっ、桁を揃えるだけならひょっとしてこんなので良かった?」と思ってしまったのでメモ。 こんなの: [ "c1" , "c2" , "c3" , "c4" ] [ 1 , "a" , "" , null ] [ " " , "n…

Mrtable: 機械可読なテキストテーブルフォーマット

概要 機械可読でプレーンテキストなテーブルのフォーマット mr = machine readable machine readable かつ human readable(というのが欲しくて考えました) 簡単な説明 ベースは GFM(github flavored markdown)のテーブル 各セルの内容は JSON の文字列と…

Sinatra + WEBrick + Comet で簡単なチャット

サンプルチャット 試しにということで最低限の骨組みだけのものを書いてみました。チャット初めて書きました。Thread::Queue も初めて使いました。 sonota88/sinatra-webrick-samplechat https://github.com/sonota88/sinatra-webrick-samplechat 現時点( …

Scalatra 2.12.6 で auto reload

sinatra/reloader みたいなの。 sbt を起動して ~jetty:start でよかった。 $ sbt (snip) sbt:My Scalatra Web App> ~jetty:start 一応書いておくと sbt は 1.2.8。 参考 No aux-compile task in sbt console in scalatra project - Stack Overflow https://…

SPA メモ

SPAに関する雑なメモ。 「ハンマーを持つ人にはすべてが釘に見える」になっていないか 要件 保守性 学習コスト 2019-11-02 私たちはなぜ SPA で開発するのか / Why you choose SPA - Speaker Deck https://speakerdeck.com/potato4d/why-you-choose-spa UX要…

webpack --watch でインクリメンタルビルドの完了時に任意のコマンドを実行する

「任意のコマンドを実行」としたけど、要するに完了にフックして通知がしたい。 単純な watch の実行: $(npm bin)/webpack --watch --config webpack.config.js これだけだと(差分)ビルド完了の検出がやりにくそうなので、 --info-verbosity verbose を追…

Vagrant + Ubuntu 18.04 + anyenv + Renv + グラフをSVG出力

R

ホストは Ubuntu 16.04(まだ 18.04 に移行してない……)。 VirtualBox のインストールについては割愛。 $ apt list --installed | grep -i virtualbox WARNING: apt does not have a stable CLI interface. Use with caution in scripts. unity-scope-virtua…

(2018-10, 一応solved) Ubuntu 16.04 + VirtualBox / RTR3InitEx failed with rc=-1912 / VERR_VM_DRIVER_VERSION_MISMATCH

VM を起動しようとするとこういうメッセージが出る。 メッセージの通りに modprobe vboxdrv しても解消せず。 インストールされている VirtualBox は以前 apt でインストールして、上記のエラーが解消しないのでインストールし直したりした状態(ここらへん…

SQLのブロックコメントのネストについて軽く調べてみた(PostgreSQL, MySQL, SQLite3)

SQL

前回(SQLのブロックコメント終端がバックスラッシュエスケープできるか軽く調べてみた(PostgreSQL, MySQL, SQLite3))のを調べていたときに PostgreSQL のドキュメントに これらのブロックコメントはC言語とは異なり、標準SQLで規定されているように入れ…

SQLのブロックコメント終端がバックスラッシュエスケープできるか軽く調べてみた(PostgreSQL, MySQL, SQLite3)

SQL

仕様・ソースコードレベルまでは調べてなくて実際の挙動を見ただけ。ブロックコメント終端は2文字あるので、この3パターンを確認すればよさそう。 (1) \*/ (2) *\/ (3) \*\/ 結果 コメント終端として認識される or 認識されない | | PostgreSQL | MySQL | SQ…

(Ruby) PTY.spawn("bash -i")でコマンド実行してプロンプトをexpectしつつ途中の出力も随時表示する

expectで素朴にプロンプトを待つだけだとコマンドの実行が完了するまで途中の出力が表示できなくていまいちだったのであれこれ試して下記のようにしてみた。 プロンプトのパターンに改行が含まれる場合はもうちょい工夫(途中の出力をバッファリングしておく…