---
title: okarev-pluspim
tags: 
author: [hinshi](https://www.docswell.com/user/hinshiba)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/PJR9PGDN79.jpg?width=480
description: okarev-pluspim by hinshi
published: May 16, 26
canonical: https://www.docswell.com/s/hinshiba/5R8GDN-2026-05-16-171745
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/PJR9PGDN79.jpg)

MIPS エミュレータを作ってみた
岡山大学電子計算機研究会 : 瀕死 @hinshiba
2026 -05 -16


# Page. 2

![Page Image](https://bcdn.docswell.com/page/PEXQ3X18JX.jpg)

自己紹介
2
◼ ID: hinshiba
◼ Name: 柴田 晴
◼ 岡山大学 電子計算機研究会
部長
◼ B3
旧Twitter &amp; GitHub
@hinshiba
https://hinshiba.net/


# Page. 3

![Page Image](https://bcdn.docswell.com/page/3EK9YW2LED.jpg)

過去作品
3
TUI 画像整理
numpy だけの
左手デバイス
ニューラルネットワーク
電子ペーパー + サーボモーターの制御
ハッカソン
Unity でレースゲーム
NO
IMG
Discord bot
セキュリティ・キャンプ
Cの標準ライブラリのみで独自言語
冬コミ C107 での出店予定
コネクト 2025
NO
IMG
笠岡市との共同プロジェクト
?


# Page. 4

![Page Image](https://bcdn.docswell.com/page/L73W914675.jpg)

Outline
◼ 制作物
◼ 目的
◼ 実装
◼ Demo
◼ おわり
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/87DKGXQMJG.jpg)

Outline
◼ 制作物
◼ 目的
◼ 実装
◼ Demo
◼ おわり
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/VJPK3PLQE8.jpg)

製作物
6
◼ PlusPim : MIPS エミュレータ
◼ 主な目的はデバッグ
◼ Debug Adapter Protocol
に準拠
◼ バックステップ実行もサポート
◼ VSCode 拡張機能部分も作成


# Page. 7

![Page Image](https://bcdn.docswell.com/page/2EVV42QPEQ.jpg)

エミュレーション
7
◼命令エミュレーション
◼疑似命令の展開
◼一部のアセンブラ指令の対応
◼複数ファイルの読み込み
◼cp0 による正確な例外処理


# Page. 8

![Page Image](https://bcdn.docswell.com/page/57GL1RWQEL.jpg)

エミュレーション
8
必須レベルの一部のアセンブラ指令への対応
◼命令エミュレーション
◼疑似命令の展開
◼一部のアセンブラ指令の対応
◼複数ファイルの読み込み
◼cp0 による正確な例外処理


# Page. 9

![Page Image](https://bcdn.docswell.com/page/4EQYDV3WJP.jpg)

エミュレーション
9
◼命令エミュレーション
◼疑似命令の展開
◼一部のアセンブラ指令の対応
◼複数ファイルの読み込み
◼cp0 による正確な例外処理


# Page. 10

![Page Image](https://bcdn.docswell.com/page/KJ4WZM1171.jpg)

エミュレーション
10
◼命令エミュレーション
◼疑似命令の展開
◼一部のアセンブラ指令の対応
◼複数ファイルの読み込み
◼cp0 による正確な例外処理


# Page. 11

![Page Image](https://bcdn.docswell.com/page/LE1YR8G57G.jpg)

エミュレーション
11
◼命令エミュレーション
◼疑似命令の展開
◼一部のアセンブラ指令の対応
◼複数ファイルの読み込み
◼cp0 による正確な例外処理


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GEWG1ZKWJ2.jpg)

デバッグ機能
12
◼ステップイン
◼ステップオーバー
◼ステップバック
◼イミディエイトウィンドウ
◼コールスタック
◼例外フィルタ


# Page. 13

![Page Image](https://bcdn.docswell.com/page/47ZLP1Z2J3.jpg)

デバッグ機能
13
◼ステップイン
◼ステップオーバー
◼ステップバック
◼イミディエイトウィンドウ
◼コールスタック
◼例外フィルタ


# Page. 14

![Page Image](https://bcdn.docswell.com/page/YJ6WML86JV.jpg)

デバッグ機能
14
◼ステップイン
◼ステップオーバー
◼ステップバック
◼イミディエイトウィンドウ
◼コールスタック
◼例外フィルタ


# Page. 15

![Page Image](https://bcdn.docswell.com/page/GJ5MZ195J4.jpg)

デバッグ機能
15
◼ステップイン
◼ステップオーバー
◼ステップバック
◼イミディエイトウィンドウ
◼コールスタック
◼例外フィルタ


# Page. 16

![Page Image](https://bcdn.docswell.com/page/LE3W91Y5E5.jpg)

Outline
◼ 制作物
◼ 目的
◼ 実装
◼ Demo
◼ おわり
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/8EDKGX5Y7G.jpg)

目的
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/V7PK3PG2J8.jpg)

目的
18
QtSPIM が使いずらい
個人の感想です


# Page. 19

![Page Image](https://bcdn.docswell.com/page/2JVV426XJQ.jpg)

QtSPIM
19
◼ステップオーバーがない
◼例外のポップアップが消えない
◼ファイルの読み込み順に依存
◼別のGUI を開く必要がある
◼フォントが見ずらい
◼etc


# Page. 20

![Page Image](https://bcdn.docswell.com/page/5EGL1RNRJL.jpg)

PlusPim
そういうわけで作成しました
https://github.com/hinshiba/PlusPim
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/4JQYDVQY7P.jpg)

PlusPim
マーケットプレイスにあります
https://github.com/hinshiba/PlusPim
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/K74WZMNZE1.jpg)

Outline
◼ 制作物
◼ 目的
◼ 実装
◼ Demo
◼ おわり
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/LJ1YR85DEG.jpg)

命令の実行
23
命令列
.text
MIPS アセンブリ
0: RTypeInst(add ,Reg::Sp, Reg::Sp, -24)
1: MemInst(store, 4, Reg::Ra, 20, Reg::Sp)
…………
.data
47: JrInst()
メモリイメージ
Dict {
0x10000000: 0x61,
0x10000001: 0x62,
……
}


# Page. 24

![Page Image](https://bcdn.docswell.com/page/GJWG1Z5872.jpg)

命令の実行
クライアント
pc
(変数)
24
StepIn
Request
命令Index に
変換
命令を取得
0: ……
1: ……
……


# Page. 25

![Page Image](https://bcdn.docswell.com/page/4EZLP1N973.jpg)

命令の実行
25
Stopped
Event
命令を取得
0: ……
1: ……
……
クライアント
実行して
状態を更新
メモリ
IInstruction::Execute
レジスタ
インターフェース越しに実行


# Page. 26

![Page Image](https://bcdn.docswell.com/page/Y76WML8D7V.jpg)

命令の実行
例外が発生
ブレークポイント
スタックフレームが減少
(StepOver のみ)
26
Stopped
Event
続行
pc += 4
pc -&gt; Index
0: ……
1: ……
……
IInstruction::Execute
クライアント


# Page. 27

![Page Image](https://bcdn.docswell.com/page/G75MZ19874.jpg)

ステップバック実行
RTypeInst
◼$rd をスタックに保存
◼インターフェース経由で
Undo
命令ごとに逆操作を定義
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/9J29R12VER.jpg)

ステップバック実行
RTypeInst
Why
ループ内
◼$rd をスタックに保存
◼インターフェース経由で
28
同じインスタンスが実行される
Undo
命令ごとに逆操作を定義


# Page. 29

![Page Image](https://bcdn.docswell.com/page/DEY4DZYQJM.jpg)

ステップバック実行
RTypeInst
Why
ループ内
◼$rd をスタックに保存
◼インターフェース経由で
29
同じインスタンスが実行される
Undo
命令ごとに逆操作を定義
面倒なバグに


# Page. 30

![Page Image](https://bcdn.docswell.com/page/VJNY63P278.jpg)

例外
30
pc -&gt; Index
0: ……
1: ……
……
IInstruction::Execute
AdEL : ロードアドレスエラー
RI
: 無効な命令
Ov
: オーバーフロー
MemInst::Execute
AdES : ストアアドレスエラー
Syscall::Execute
Sys: システムコール


# Page. 31

![Page Image](https://bcdn.docswell.com/page/YE9PL93DJ3.jpg)

例外
例外発生
31
Stopped
Event
フィルタの設定
例外ハンドラへジャンプ
各種レジスタの設定
停止する場合
続行
クライアント
Step


# Page. 32

![Page Image](https://bcdn.docswell.com/page/GE8DX9M5ED.jpg)

例外
例外発生
32
Stopped
Event
フィルタの設定
例外ハンドラへジャンプ
各種レジスタの設定
続行する場合
続行
StepBack も可能
クライアント
Step


# Page. 33

![Page Image](https://bcdn.docswell.com/page/LELM8W337R.jpg)

Outline
◼ 制作物
◼ 目的
◼ 実装
◼ Demo
◼ おわり
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/4JMY69DMJW.jpg)

Demo
34
10 の階乗を計算して 5倍し， 2116516 を足すプログラム


# Page. 35

![Page Image](https://bcdn.docswell.com/page/PJR9PG4L79.jpg)

利用
講義が終わるまでに実装完了しなかった
35
:(
3年の講義でMIPS アセンブリを書くらしい


# Page. 36

![Page Image](https://bcdn.docswell.com/page/PEXQ3XZ6JX.jpg)

利用
36
講義が終わるまでに実装完了しなかった
:(
3年の講義でMIPS アセンブリを書くらしい
最初の2回しか MIPS 使わなかった :(


# Page. 37

![Page Image](https://bcdn.docswell.com/page/3EK9YW8GED.jpg)

利用
37
講義が終わるまでに実装完了しなかった
:(
3年の講義でMIPS アセンブリを書くらしい
最初の2回しか MIPS 使わなかった :(


# Page. 38

![Page Image](https://bcdn.docswell.com/page/L73W912575.jpg)

余談
残りの講義では独自ハードウェア記述言語を書く
38


# Page. 39

![Page Image](https://bcdn.docswell.com/page/87DKGXZYJG.jpg)

余談
39
残りの講義では独自ハードウェア記述言語を書く
同じ運命になりそう


# Page. 40

![Page Image](https://bcdn.docswell.com/page/VJPK3PD2E8.jpg)

Outline
◼ 制作物
◼ 目的
◼ 実装
◼ Demo
◼ おわり
40


# Page. 41

![Page Image](https://bcdn.docswell.com/page/2EVV421XEQ.jpg)

MIPS エミュレータを作ってみた
岡山大学電子計算機研究会 : 瀕死 @hinshiba
2026 -05 -16
ご清聴ありがとうございました
マーケットプレイス
https://marketplace.visualstudio.com/items?itemName=hinshiba.pluspim
リポジトリ
https://github.com/hinshiba/PlusPim


