twitter を眺めていましたらスイッチサイエンスさんから、かねてより興味があった RISC-V SoC のマイコンボードが発売されていましたので買ってみました。 LCD 付きで 4000円くらいなり。 🙂
CPU クロック 400MHz(600MHz)・メモリー 6MB(8MB) とかなり高性能なマイコンですので、ESP32 では諦めていたメガドライブのエミュレーターを動作させることに hello world がてら挑戦し、まずは起動できました。やった〜。
まだ起動するだけのものですがソースコードを github にコミットしています。
Genesis-Plus-GX をエミュレーターのコアとして使わせてもらい、YM2612/SN76489 もエミュレーションされていますので、I2S にサンプリングバッファを流せば音も発声すると思います。
ちょっと原因不明ですが、まだ特定の条件でプログラムがダウンしてしまうことがあるようです。要調査。 アライメント関係の不具合で修正することができました。
また ROM のサイズは 128K 〜 640K バイトのものであれば最初の malloc には成功して起動します。大きなものはスタックオーバーフローするかもです。1Mバイト(ソニック2 などの 8M ROM) 以上は残念ながらメモリー不足で初期の malloc で落ちてしまいます。
さて、この記事では Maixduino 及び K210/RISC-V の開発環境の構成と、製作中に気がついた事をメモがてらまとめてみます。
開発環境の構成
Maixduino は SoC として K210 を使った開発ボードです。 Maixduino が提供する開発環境及びライブラリーは Arduino コアとして提供されています。
インストールガイドとソースコード
PlatformIO で Sipeed MAIXDUINO の設定がありますので、おそらく導入はこれを使うのが一番簡単です。
Maixduino Arduino コアは、K210 SoC 提供元の Kendryte が提供する K210 SDK とツールチェインに依存しています。K210 の SDK は OS なしの standalone 版と FreeRTOS 版があります。 Arduino コアでは standalone 版を使っています。
- Kendryte GNU Toolchain (コンパイラ・リンカ)
- kflash.py (書き込み用 UART ISP ユーティリティー)
- kendryte-standalone-sdk
- kendryte-freertos-sdk
Maixduino Arduino コアのドキュメントはありますが現在は書きかけっぽいです。ライブラリの example のソースコードを参照するのがよいと思います。
この記事のメガドライブのエミュレータープロジェクトでは、勉強がてら Maixduino の Arduino コアを使わずに直接 kendyte-standalone-sdk を使ってプログラミングしました。
SDK のサンプルが以下から参照できます。
また K210 プログラミングガイドやペリフェラルなどの資料は次からダウンロードできます。
環境の構築はツールチェイン類を PC 上に配置して、
- Kendryte GNU Toolchain (コンパイラ・リンカ)
- kflash.py (書き込み用 UART ISP ユーティリティー)
SDK をダウンロードしてきて、src ディレクトリの下に自分のプロジェクトを作成し、cmake して make すればOKです。
詳しい手順が上記のサイトの Usage にあります。
メガドライブエミュレータープロジェクトでは、ビルドに使う SDK のバージョンを固定したかったため、SDK をおなかに抱える構成としています。ビルド手順なども以下に記載していますのでご参考まで。 🙂
製作中に気がついた点
箇条書きにて。
- Maixduino は K210 SDK Demo で使われているボードとペリフェラルの構成が異なり、LCD と SD カードはそれぞれ SPI0 と SPI1 に割り当てられている。また LCD コントローラーも異なる。 Arduino コアを参考に移植しました。
- K210 は RISC-V * 2 と AI コアと呼ばれる 3コア構成。このうち AI コアを有効にすると 2MB SRAM が追加で使えるようになる。こことここを参考
- static 領域をおく .bss 領域が大きくないため、エミュレーターの移植では大きな static を動的に malloc するように修正。
- それでもエミュコアがメモリー不足でしたので、使わない機能を disable できるようにコアのソースを修正してなんとか起動。
- CPU のクロックは 400MHz が標準設定だが、600MHz まで上げることができる。
- いろいろやっているも先人の方がおられることに気がつく。 Quake や DOOM、MMD が動いてる!すごい!
ボード付属のカメラで画像認識なんかもできるようなので、引き続き遊んでみようと思います。 🙂