萌えハッカーニュースリーダー

2025/06/20 03:59 Show HN: Turbine – 16-bit CPU Architecture and Emulator built in C

出典: https://www.errorcodezero.dev/blog/building-my-own-cpu-isa-and-virtual-machine/
hakase
博士

ロボ子、今日はturbineという面白いプロジェクトについて話すのじゃ!

roboko
ロボ子

turbine、ですか。どのようなプロジェクトなのでしょうか、博士?

hakase
博士

これは、独自のカスタムCPUアーキテクチャ用の仮想マシンをC言語で構築するプロジェクトなのじゃ。githubで公開されておる。

roboko
ロボ子

C言語で仮想マシンですか!それは興味深いですね。どんな特徴があるんですか?

hakase
博士

まず、CPUには汎用レジスタとしてAからEまでがあって、それぞれ2バイトじゃ。それに、命令ポインタ、スタックポインタ、ベースポインタ、ステータスレジスタ、アキュムレータがあるぞ。

roboko
ロボ子

レジスタの種類が多いですね。命令セットにはどんなものがあるんですか?

hakase
博士

`LOAD`、`DUMP`、`MOVE`、`LDD`、`PUSH`、`POP`、`ADD`、`SUB`、`NOT`、`OR`、`AND`、`CMP`、`JUMP`、`HLT`などがあるのじゃ。メモリからレジスタにデータをロードしたり、レジスタからメモリにデータをダンプしたりできるぞ。

roboko
ロボ子

かなり基本的な命令が揃っていますね。`JUMP`命令はステータスフラグによって分岐するんですね。

hakase
博士

そうじゃ!`CMP_EQUAL_TO`、`CMP_GREATER_THAN`、`CMP_LESS_THAN`などのステータスフラグを使って、条件分岐を実現するのじゃ。

roboko
ロボ子

レジスタフラグもたくさんありますね。`RA_BYTE`や`RA_TWO_BYTES`など、レジスタのサイズを指定するんですね。

hakase
博士

その通り!データバスは16ビットで、ワードサイズは8ビットじゃ。

roboko
ロボ子

デバイスのシステムもあるんですね。メモリアドレス0x0の変更を監視してコンソールに出力するデバイスがあるとのことですが、これはデバッグ用でしょうか?

hakase
博士

おそらくそうじゃな。それと、Luaスクリプトで記述された簡単なアセンブラもあるらしいぞ。命令やフラグを値に置き換えるためのルックアップテーブルを使っているみたいじゃ。

roboko
ロボ子

Luaでアセンブラですか。手軽に拡張できそうですね。

hakase
博士

このプロジェクトの目標は、githubのスターを集めてshipwreckedの資格を得ることらしいぞ。

roboko
ロボ子

なるほど、面白い目標ですね。turbine、私も少しコードを読んでみようと思います。

hakase
博士

そうじゃな!しかし、ロボ子よ、このCPUで動くプログラムを書くのは、なかなか骨が折れそうじゃな。まるで、迷路のようなコードになりそうじゃ…

roboko
ロボ子

博士、もしかして、迷路で道に迷うのが得意なご自身を重ねていますか?

hakase
博士

な、な、何を言うのじゃ!私は天才じゃぞ!迷路くらい、一瞬で解いてみせるわい!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search