自作VM– tag –
-
C言語で作る小さなシステム
【低レイヤ入門】C言語で作る自作VMを少しOSらしくする: Welcomeプロンプトから外部バイナリを起動する | UNIX Cafe
前回は、小さな自作VM上で、Enterまでの入力をVM内メモリに保存する line-buffer.bin を追加しました。 line-buffer.bin では、SYSCALL 2 で1 byteずつ入力を読み、STB [R1], R0 で memory[0x180] から順番に保存しました。最後に 0x00 を書くことで、入力... -
自作VM開発記
【低レイヤ入門】C言語で作る自作VMに入力バッファを追加する: Enterまでの文字をメモリに保存する | UNIX Cafe
前回は、小さな自作VM上で動く外部プログラムに、起動メッセージとhelp表示を追加しました。 boot-message.bin では、命令列の後ろに0終端文字列を置き、SYSCALL 1 でまとめて表示しました。起動時には Welcome to Handmade VM を表示し、h を入力するとhe... -
自作VM開発記
【低レイヤ入門】C言語で作る自作VMを少しOSらしくする: Welcome表示とhelp/qコマンド | UNIX Cafe
前回は、小さな自作VM上で動く外部プログラムに、入力を待ち続けるループを追加しました。 command-loop.bin では、まず > を表示し、そのあと1文字だけ入力を読みました。そして、読んだ文字が h なのか、q なのか、Enterやspaceなのか、それ以外なの... -
自作VM開発記
【低レイヤ入門】C言語で作る自作VMを少しOSらしくする: プロンプトへ戻る1文字コマンドループ | UNIX Cafe
前回は、小さな自作VM上で動く外部プログラムに、最初の「コマンドらしい反応」を実装しました。 それまでのプログラムは、入力された1文字をそのまま表示するだけでした。たとえば A を受け取ったら A を表示する、という確認です。 前回の one-char-comm... -
自作VM開発記
【低レイヤ入門】C言語で作る自作VMを少しOSらしくする: 1文字コマンド判定 | UNIX Cafe
前回は、小さな自作VMにおいて、外見を少しだけ「入力待ち(プロンプト)」の状態に近づけました。 その前の段階では、host側の標準入力から1 byteを読み、読み込んだ値をそのまま画面に表示するだけでした。 SYSCALL 2 SYSCALL 0 HALT 前回の prompt-echo... -
自作VM開発記
【低レイヤ入門】C言語で作る自作VMを少しOSらしくする: プロンプト付き1文字echo | UNIX Cafe
前回は、小さな自作VMに「外から1文字を受け取る入口」を作りました。 それまでのプログラムは、MOVI R0, 65 のように、表示したい値をあらかじめ命令の中に書いていました。つまり、VMが表示している A は、プログラム内に固定で埋め込まれた値でした。 ... -
自作VM開発記
【低レイヤ入門】C言語で自作VMに入力系SYSCALLを追加して、1文字echoを動かす | UNIX Cafe
前回は、小さな自作VMを、少しだけ「本物のVM」らしい形に近づけました。 これまでは、実行対象の命令列を notes/vm.c 内に直接記述していました。単一の命令動作を確認する段階ではこの手法が有用でしたが、命令列を変更するたびにVM自体のソースコードを... -
自作VM開発記
【低レイヤ入門】C言語で自作VMに外部バイナリローダーを追加して hello.bin を実行する | UNIX Cafe
前回は、小さな自作VMにADD、SUB、CMP、JUMP、JZ、JNZ、CALLI、RETといった命令を追加しました。 これにより、VMはただ上から順番に命令を処理するだけでなく、CMP の結果に応じた条件分岐(ジャンプ)や、CALLI と RET によるサブルーチン呼び出しができ... -
自作VM開発記
【低レイヤ入門】マルチタスクと仮想メモリの仕組み:コンテキストスイッチとページテーブルを散髪屋コントで理解する | UNIX Cafe
この記事では、OSのマルチタスク、コンテキストスイッチ、仮想メモリ、ページテーブル、ページフォルトの関係を、低レイヤ初心者向けに一つのたとえで整理します。 OSやCPUの資料を読んでいると、最初に引っかかる不思議な部分があります。 タスク1も、タ... -
自作VM開発記
【低レイヤ入門】C言語で自作VMに計算・比較・分岐・CALL/RETを追加する | UNIX Cafe
前回は、小さな自作VMにSTDI、INC、DEC、MOV、PUSH、POPを追加しました。 値をメモリへ書く、レジスタ同士でコピーする、スタックへ退避する、というところまで進みました。 ただし、この段階のVMは、まだ基本的には上から順番に命令を実行するだけです。 ...
