WSL + Alacritty で Powerline を使う

Windows 10 の WSL (Windows Subsystem for Linux) は Linux 環境が Windows 上で簡単に使えるため、UNIX 系の OS と親和性の高い開発系を持つウェブなどのプログラミングに大変便利です。

自分はこの WSL 環境に高速ターミナルエミュレーターである Alacritty から接続して使っていますが、日本語や Powerline を使う上でいくつか必要な設定がありますのでここに記載しておきます。(なお、残念ながら Windows 版ではまだ日本語のインライン入力はできません)

Alacritty の設定

Alacritty の設定ファイルは以下の位置にあります。(なお、AppData は隠しフォルダーです)

C:\Users\[ユーザ名]\AppData\Roaming\alacritty\alacritty.yml

Alacritty 起動時に cmd.exe ではなく WSL を直接起動する設定:

shell:
  program: /Windows/System32/wsl.exe

Windows の新しい API(conPTY / Windows 10 October 2018 update 以降)を有効にして、Powerline や vim でカーソル位置がずれないようにする:

enable_experimental_conpty_backend: true

Powerline を使うため Ricty Diminished w/ Powerline patched フォントを設定する:

font:
  normal:
    family: Ricty Diminished Discord for Powerline

WSL の設定

WSL と WSL 2(現在 insider build)の Ubuntu 18.04 で有効です。

標準で ja ロケールが入っておらず文字化けするのでロケール追加:

$ sudo locale-gen ja_JP.UTF-8
$ sudo /usr/sbin/update-locale LANG=ja_JP.UTF-8
$ echo $LANG # 設定されていなければいったんターミナル再起動
ja_JP.UTF-8

ネットワークがプロキシ配下の場合は以下を実施:

# for curl
echo 'proxy = "http://example.com:8080"' > ~/.curlrc

# for wget
echo 'http_proxy=http://example.com:8080' >> ~/.wgetrc
echo 'https_proxy=http://example.com:8080' >> ~/.wgetrc

# for other (include nodejs/pip)
echo 'export HTTP_PROXY="http://example.com:8080"' >> ~/.bashrc
echo 'export HTTPS_PROXY_="${HTTP_PROXY}"'  >> ~/.bashrc

# for apt
sudo echo 'Acquire::http::proxy "http://example.com:8080";' >> /etc/apt/apt.conf
sudo echo 'Acquire::https::proxy "http://example.com:8080";' >> /etc/apt/apt.conf

# for jvm (optional)
# export JAVA_OPTS="-DproxyHost=example.com -DproxyPort=8080"

Powerline を導入(WSL 1 は速度が遅いので、素早く動作する Rust 製の powerline-rs を使っています):

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
$ sudo apt install pkg-config libssl-dev
$ cargo install powerline-rs

powerline-rs を .bashrc にてプロンプトに設定:

$ vi ~/.bashrc # 一番下に追加
prompt() {
    PS1="$(powerline-rs --shell bash $?)"
}
PROMPT_COMMAND=prompt

以上、あとは tmux などを入れてあげると便利なターミナル環境になると思います。

なお、powerline-rs は tmux のステータス行には対応していませんので、tmux も powerline 化した場合は pip3 から powerline-status も導入すると良さそうです。

WSL 1 では git リポジトリがあるディレクトリなどで powerline がちょっと遅くなりますが、powerline-rs ならほぼほぼ問題ない速度で動作するようです。WSL2 ではファイルシステムの速度が大幅に速くなっていますので、普通の Linux と遜色ない速度で動作しています。

本題とはあんまり関係ないですが、Poweline 設定導入後 VSCode から WSL に VSCode WSL Extention で接続すると次のようになります。 (VSCode のターミナルも powerline フォントを設定してあげます)

xterm.js すごい。

Maixduino K210/RISC-V マイコンでメガドライブエミュレーターを動作させる

twitter を眺めていましたらスイッチサイエンスさんから、かねてより興味があった RISC-V SoC のマイコンボードが発売されていましたので買ってみました。 LCD 付きで 4000円くらいなり。 🙂

CPU クロック 400MHz(600MHz)・メモリー 6MB(8MB) とかなり高性能なマイコンですので、ESP32 では諦めていたメガドライブのエミュレーターを動作させることに hello world がてら挑戦し、まずは起動できました。やった〜。

まだ起動するだけのものですがソースコードを github にコミットしています。

https://github.com/h1romas4/maixduino-genplus

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 版を使っています。

Maixduino Arduino コアのドキュメントはありますが現在は書きかけっぽいです。ライブラリの example のソースコードを参照するのがよいと思います。

この記事のメガドライブのエミュレータープロジェクトでは、勉強がてら Maixduino の Arduino コアを使わずに直接 kendyte-standalone-sdk を使ってプログラミングしました。

SDK のサンプルが以下から参照できます。

また K210 プログラミングガイドやペリフェラルなどの資料は次からダウンロードできます。

環境の構築はツールチェイン類を PC 上に配置して、

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 が動いてる!すごい!

ボード付属のカメラで画像認識なんかもできるようなので、引き続き遊んでみようと思います。 🙂

関連

YM2612 + SN76489 メガドライブ音源を ESP32 で鳴らす (基板製作編)

すごいぞメガドライブミニ!(2回目)

というわけで「YM2612 + SN76489 メガドライブ音源を ESP32 で鳴らす (基板製作編)」です。この記事で使われているソースコードや結線などは github で公開しています。

https://github.com/h1romas4/esp32-genesis-player

esp32-genesis-player (work in progress)

ここまでブレッドボードでがんばってきましたが、回路もそろそろ良さそうかな…ということでプリント基板を注文してみました。

github のほうに結線は書いていましたが、オーディオブロックも入れて回路は次のようにしてみました。(素人がかいていますのでおかしな部分はご容赦ください…)

KiCAD にて作成です。この流れから基板を注文できるようガーバーデーターをつくりました。

いくつかミスっていたり課題がありますのでガーバーデーターは Rev.B の時にコミットしたいと思います。

注文したのは FusionPCB さんで送料込み 5枚 $12 くらいでした。自分の基板がこんなに簡単につくれるようになってよい時代です。 🙂

ゴールデンウィーク & 労働節にかぶってしまいましたのでちょっと遅れましたが、待つこと 2週間くらいで… キター。

早速部品をはんだ付けです。

どきどきしてマイコンにつなぐも鳴らなくてしょんぼり(ソフト側を間違ってました…)

てなわけで基板が無事動作をはじめましたので、予てからやってみたかった、古代祐三さんが公開されている MUCOM88 データーを再生してみました。

https://www.ancient.co.jp/~mucom88/

MUCOM88は、古代祐三が自ら開発した、NEC PC-8801mkⅡSR以降に搭載されたYM2203及びYM2608(サウンドボードⅡ)を対象とする楽曲制作用ツールです。

https://onitama.tv/mucom88/

2018年、OBSLive年末生放送内で発表された、MUCOM88 Windowsのページです。
このページで公開されているアーカイブ内に、MUCOM88 Windowsフルセット、及び古代祐三氏サンプル曲データが含まれています。


現在この基板用の制御プログラムは VGM データーを再生するものになっていますので、MUCOM データーを VGM データーに変換する mucomMD2vgm を使わせていただいております。

https://github.com/kuma4649/mucomMD2vgm

このツールは、ユーザーが作成したmucom形式のMMLファイルを元にVGMファイルを作成します。

自分の VGM パーサーでは PCM 再生系で未対応のコマンドがありましたので(hack ですが)いくつか処理を追加して github にコミットしています。

というわけで…

Original Music Data (BARE KNUCKLE 2 Go Straight)
Copyright : (C) Yuzo Koshiro
License : CC BY-NC-ND 4.0
Name : MUCOM88 Windows Sample Music Data
Version : Ver1.7a
https://www.ancient.co.jp/~mucom88/
https://onitama.tv/mucom88/

MUCOM VGM Convert
mucomMD2vgm
https://github.com/kuma4649/mucomMD2vgm

感動です…。いろいろ蘇ってきて泣きそうです…。

というわけで、基板の方ですが、マイコンからのノイズのってしまっていたり、痛恨のコネクターを誤ってハーフピッチにしてしまうミスがあったりしますので、もう少しいじりながら改良していきたいと思います。

また、この基板は M5Stack など ESP-WROOM-32 機と接続できますので、無線 LAN や Bluetooth を使って遠隔で演奏させたり、BLE-MIDI で MIDI 音源にすることも(メインメモリーが許せば)できるかもしれません。 😀

関連