okarev-pluspim

337 Views

May 16, 26

スライド概要

profile-image

主に参加したLTの資料を上げます. hinshiba.net 経由で他のスライドも見えます.

Docswellを使いましょう

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

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

2.

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

3.

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

4.

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

5.

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

6.

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

7.

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

8.

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

9.

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

10.

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

11.

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

12.

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

13.

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

14.

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

15.

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

16.

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

17.

目的 17

18.

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

19.

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

20.

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

21.

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

22.

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

23.

命令の実行 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, …… }

24.

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

25.

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

26.

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

27.

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

28.

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

29.

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

30.

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

31.

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

32.

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

33.

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

34.

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

35.

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

36.

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

37.

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

38.

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

39.

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

40.

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

41.

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