CPUエミュレータ Athrill(アスリル) とは?


これまで、シミュレーションハブ・箱庭という技術を中心にお話をしておきましたが、閑話休題、Athrillについてお話をしたいと思います。

Athrillとは?

Athrillは、「ワクワク」の英訳です。CPUエミュレータ Athrillは、ワクワクしながらマイコンシミュレータを作ったという体験を名前にしたものなんです。

そして、Athrill は PC上で手軽に組込み系プログラムをデバッグできるようにするための CPU エミュレータです。

きっかけ

もう8年くらい前の暑い夏の日のことです。ぼくはとあるプロジェクトでTOPPERS OS を V850 に移植するというお仕事をしておりました。ただ、移植に必要な開発環境の調達がなかなかできず、最悪、デバッガなしでの開発になる可能性が高まっていました(やばいプロジェクト感満載でした)。

その当時、このまま開発環境が調達できないとどうなるか、脳内シミュレーションした結果はこんな感じでした。

  • 外部入出力(デジタル入出力等)だけで OS のデバッグはきっと無理!
  • 多重割り込み系のテストも多分無理
  • 実機は1台しかないので,万が一壊したら開発が止まる…
  • OS 上で動作するデバイスドライバやミドルの結合検査を複数人で実施できない(空き稼働のリスク)

さらに、その当時、実機動作確認できる場所が屋外しかなかったため、真夏日に外でテストし続けると倒れそう…

必死で調べました

そんな不安があったため、V850 の開発環境を必死で調べました。

  • 前提
    • V850 CPU命令エミュレーション可能
    • 周辺デバイスのエミュレーションは必須(割り込みコントローラ含む)
    • 開発環境にかけることができる予算は数十万円以内!
  • 既製品
    • 開発スケールさせようと思うと、予算にはまらない。
  • オープンソース
    • 規模が大きすぎて無理(ソース理解している間に開発終わりそう…)
    • QEMU/SkyEye 等ありましたが,V850 は未サポート

最低,何があれば良いか?

OS 移植とは言っても、TOPPERS OS の場合は、すべてアセンブラで記述する必要はありません。C言語で書かれたところは x86 でビルド&デバッグは可能です。なので、最低、以下をデバッグできる環境があれば良いことに気づきました。

  • スタートアップルーチン
  • 割り込み/例外処理
  • タスクディスパッチ処理

これらを PC 上で動作確認するための何かを自作すれば良いのだと思えました。

はじめの一歩はスタートアップルーチン

これらの中で、一番取り組みやすいのは、なんと言ってもスタートアップルーチンです(下図)。

    .section .text
    .align  4
    .global __start
__start:
    di                                  /* 割り込み禁止 */

    /*
     * 各種ポインタの初期化(SP/TP/EP/GP/CTBP)
     */
    GET_CID r4
    shl     2, r4
    Lea     _ostkpt_table, r3
    add     r3, r4
     :

必要な命令数もそれほど多くないですし、命令の内容もそんなに複雑ではない。
なので、それらのアセンブラ命令をデコードして、疑似的な CPU レジスタに値入れて、動作確認するだけでも全然違うだろうと思えました。

要するに、簡単なパーサーを作るようなものだと思えてきました。実機投入前にそれを使用して動作確認できれば、実機トラブルは激減するに違いない。こういうストーリーがぼくの中で出来上がりました。過去の偉人たちも 自作CPU や 自作エミュレータ を作ったわけだし、『いっちょやってみるか!』というモチベーションに切り替わっていったわけです。

そして、運良く、V850 はマニュアルがしっかりしており、機械語のデコード仕様が明確になっていました。あとは、その仕様をソフトウェアで実現するだけというわけです。

あれやこれやと命令を追加していくうちに、やり方がわかってきて、割り込みコントローラや周辺デバイス(CAN, A/D変換器等など)必要なものは自分で作れるようになっていました。
自分で作るからこそ、必要な機能作成やチューニングができる点が良いですね。

その当時は、自作エミュレータでのデバッグはやはり大変でしたが、日々わくわくしながら仕事してました。そんな中、自作エミュレータ上で移植した OS が PC 上で動かすことができたときは本当に嬉しかったです。下図は、その当時の OS 起動メッセージです。

TOPPERS/ASP3 Kernel Release 3.2.0 for V850-ESFK3 
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2017 by Embedded and Real-Time Systems Laboratory
            Graduate School of Information Science, Nagoya Univ., JAPAN

さらに、その OS を実機上に焼き込み、エミュレータと同じように起動⇒ CAN データの送受ができたときの感激はずっと忘れないと思います(とても暑い日でした)。

Athrillの資料公開

ぼくにとっては、オープンソース開発することになった原点とも言えるAthrillですが、実はあまり資料がまとまっていません。そこで、少しずつ、箱庭と同じように、Athrillの解説資料を整理しようと思い始めました。以下、現時点で再整理・公開した資料になります。いずれ、オンライン・イベント等でも解説していきたいと思います。

Athrill(アスリル) Overview

この資料では、CPUエミュレータ Athrill の概要を整理しています。

• Athrillとは?
• Athrill誕生の背景
• Athrillの機能概要
• Athrillの全体アーキテクチャ
• Athrill開発リポジトリ


“CPUエミュレータ Athrill(アスリル) とは?” への1件のコメント

  1. […] 今回の参加を通じて、2022年4月3日(日曜日)に悩んでいたことを思い出しました。当時、箱庭のシミュレータといえば、単体ロボットシミュレータであり、箱庭コア機能はUnityスクリプトとしてC#で実装されていました。これは、Unityで実装されたロボットとCPUエミュレータ Athrillを連携させるためのプロトタイプだったからです。 […]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP