レガシーコード生産ガイド

私に教えられることなら

asm

AmeLisp開発日誌

GitHubリポジトリ アセンブリでLISP開発日誌(完)の最後に書いた目標3つのうち VM/Aに継続、限定継続を実装する(VM/S上で動いてるのでたぶん大丈夫) Copying GCに切り替えて文字列・配列・バイト配列を扱えるようにする Windowsで動かす 1はその後実装できた…

アセンブリでLISP開発日誌(完)

バグ山ほど出しながらも、なんとかLispを動かせた。ここから先はアセンブリでのVMが主目的では無いので、単にAmeLisp開発日誌となるでしょう。なったらいいな。 リポジトリの名前も変えた。 github.com 振り返り 前回からやったことを思い出してみる。 まず…

アセンブリでLISP開発日誌 (2)

前回からとにかくVM命令を追加していった。さらにSchemeで作ったVM側でコンパイラを作っていた(後述)。現時点でアセンブリで2500行ほど。 github.com Forth処理系を作った経験から、 とにかく早めに色がついたREPLを作る 内部情報をイイカンジに出力する で…

アセンブリでSECD machine LISP 開発日誌

振り返りに書いたように、アセンブリ(NASM/Linux64bit)での実装に挑戦してた。 github.com ようやくVMインストラクションのREPLが動いたので記録。 方針は とにかくシンプルに作る かっこいいことはまた今度にする です。 今のところ 8bit下位タグ付きポイン…

Glypher - Windows,Forth,FASM

FASM(flat assembler)の練習にForthを書いていて、マクロの書き方がわからないので探していたら見つけた github.com FASMで書かれた、Windows用のゲーム作成用Forthっぽい。 Charles Childers氏(Retroの作者)のリポジトリだけど、作者は別の人で、RetroForth…

ForthでC関数ワード定義とSSEレジスタメモ

そろそろ全くわかってない浮動小数点数をどうにかしよう、と思い立って浮動小数点数スタックをRFR64に実装した。 前後するけど、その前にRFR64でもC関数をdlopen経由で使えるようにしていたので、浮動小数点数の表示をprintfに任せてみることにした。 C関数…

サブルーチン・スレッディングのForth処理系作った

RFR64 github.com Linux 64bit向け、アセンブリで書いたForthは2個目。 VFX ForthとSwiftForthめっちゃ速い - レガシーコード生産ガイドで、Disassembleするとどちらの処理系もサブルーチン・スレッディングを使ってるので気になってた。ので作った。MovingF…

64bit Linuxでアセンブリで書いたForthからC言語の関数を呼ぶ

ForthからSDLやAllegroを使って何かやりたいな、と思い立ったんだけど、基礎知識が無いので調べるのに苦労した。ので、記録しておく。 結論としては gccで-ldlフラグを追加し、dlopen/dlsymを使えるようにする スタックから各引数のレジスタにpopしてcallす…

NASM / Linux x86-64でForth開発日誌4

mkforth4-jsで作ってたVocabularyとRegionに加えて、ワードをインライン展開ワードに変えるinline!を作ってみた。 といっても仕組みは単純で、対象ワードと同名のimmediateワードを作り、 コンパイルモードの場合は、対象ワードのdfaからreturnの前までを辞…

NASM / Linux x86-64でForth開発日誌2

流石に土日を徹夜で潰すわけには…… →誘惑に勝てなかった Local Variable、Quotation、あとツールを作った。エスケープシーケンスで色つけて良かった、見た目が楽しいほうが楽しい。 残るはPrivateとVocabulary、Region。流石に仕事に支障が出るから今週は1日…

NASM / Linux x86-64でForth開発日誌

そろそろjonesforth名乗るのもな、というカンジになってきたのでとりあえず日記のタイトルを変えた。 いよいよ楽しい自己拡張タイムになったので、気づいたら今日一日中ひっきりなしに触ってた。今のところ、Forth処理系作ってて最も楽しいとこは、最初のワ…

NASM / Linux x86-64でjonesforthを移植してみる 5

コロン定義(コンパイル)までできた!これで一番重要なところは終わりかな? https://github.com/phaendal/jf64 $ ./forth : hoge 64 ; : hoge hoge emit ; : hoge hoge cr ; hoge @ bye $ 他にもLisp好きでjonesforthを64bitに移植した方がいる、という情報…

NASM / Linux x86-64でjonesforthを移植してみる 4

ようやく詰まってたところを突破して、ネイティブワードとDOCOLワードが動くようになった! https://github.com/phaendal/jf64 DOCOLワードが動かなかった原因は EXIT(return)の存在を忘れていた call後にjmp先のDOCOLでraxレジスタを使うんだけど、それを忘…

NASM / Linux x86-64でjonesforthを移植してみる 3

前回 phaendal/jf64 · GitHub ようやくワード名を入力して解釈実行するようになった。長かった…… 64bitだから8bit * 8で8byteでしょ!と安易にアライメントしてたんだけど、計算が合わなくて苦しんだ。動くようにはなったけど、どう間違ってたかまだわかって…

NASM / Linux x86-64でjonesforthを移植してみる 2

昨日の続き。 https://github.com/phaendal/jf64/ 1文字入力、1文字出力、トークンの読み取り、文字列の出力、などを実装して、以下のようにdefwordで命令列を定義して実行できるようになった。 defword "test", 4, 0, test ; @を出力する dq lit dq 60 dq l…

NASM / Linux x86-64でjonesforthを移植してみる 1

アセンブリの勉強どこから始めていいかわからないので、とりあえず動作を理解している(と思ってる)jonesforthのコードの移植を通じて、必要な知識を得ようとしてみる。 phaendal/jf64 · GitHub とりあえず今日は昨日書いたHelloWorldに、リターンスタックの…

NASM / Linux x86-64 でHello World

asm

VMもいいけど、やっぱり本当にマシンを直に触りたいな、ということでアセンブラ触ってみることにした。 昔jonesforthをLinuxザウルスに移植した記憶があるんだけど、それっきりなのでちゃんと調べてみる。アセンブラはNASMを選択。gasとどっちがいいのかは不…