Family mruby

2019-11-07

Family mruby project

 

ESP32を利用して、PC不要で、mrubyでゲームなどを気軽に開発できる環境を開発中です。

現在試作基板が概ね固まり、少量の量産を準備中です。

最新のデモ動画

開発ボード上にVGAディスプレイ、PS/2キーボードを接続して、以下のようなこと行っているデモです。

  • 自作したエディタ上でのmrubyのコードを編集
  • コードのバイトコンパイル
  • VM上でのプログラムの実行(現在は描画系のAPIをC言語拡張を用いて実装しています)

プロジェクトの目的とコンセプト

  • 目的
    • Family BASICのようなmruby開発環境で、プログラミング初心者にも気軽にRubyに親しんでほしい
  • コンセプト
    • Rubyのコードで開発
    • PC要らず
    • 簡単なゲームを作れる環境にする(描画や音楽のAPIを充実させる)
    • Linux使わない(自己満足)
    • きるだけ安く作る(ある程度量産したいので)
Family mruby system
Family mruby system

Naryaボード

Family mrubyのためのオリジナルボードを制作します。

指輪物語でガンダルフがはめていた3つの指輪のうちの一つ、Naryaを名前にお借りしています。

FabGLというライブラリを利用して、ESP32 WROVER-Bだけでモニタ制御、キーボード入力を実現しているのが特徴です。

Narya board block diagram
Narya board block diagram

開発ボードの作り方

開発ボードの作り方を同人誌にまとめて技術書典7で頒布しました。

mruby_device_book_top
mruby_device_book_top

BOOTHで通販もしています。

https://silentworlds.booth.pm/

FabGLとは

画面の出力には、VGAを利用し、入力にはPS/2キーボードを使用します。この部分にはFabGLというライブラリを利用しています。

↓はそのライブラリを実際に手元のESP32で動かしてみた様子です。

FabGL demo
FabGL demo

構想時のお話

ESP32 WROVER-Bの発売を知ったときから、mruby専用ボード作ってみたいな、という構想が昨年からありましたが、映像出力のハードルが高くて足踏みしていました。そこに一番の技術課題を解決してくれる素晴らしいライブラリが現れました。

構想は、もともとIchigoJamや、MachiKaniaを知って、mruby版を作ってみたい、思ったところから始まっています。

もう一つのきっかけは、中学生のころ学校に置いてあったFM-TOWNSのF-BASIC386にあります。
私は、F-BASIC386でプログラミングの楽しさを知ったので、ああいう環境が作れないかな、ずっと昔から思っていました。

F-BASIC386の良いところは、当時流行りの「マルチメディア」に強かったことがあります。MMLで音楽を再生したり、画像を読み込んだり、描画したり、スプライトを動かしたり、複数レイヤーの描画とか、CDの再生とかが、BASICの関数として提供されていて、ちょっとしたゲームを作るのに最高の環境でした。

最近はパソコンさえあれば無料でプロ並みの開発環境が整う時代になりましたが、自由度が高いぶん、ちょっとキャラクターを動かしてみたり、音を出してみたりするのに、何らかのライブラリのインストールをしたり、どうしてもひと手間掛かってしまいます。
オールインワンの環境でそんなハードルを下げたいな、というのが基本的なモチベーションです。
これはきっと、IchigoJamとも近いものだと思います。

BASICは先駆者がおられるので、じゃあ、自分はmrubyでやってみようかと思ったわけです。

「Narya」というコードネームで開発中です。

設計はじめ

最大の技術課題が解決しそうなので、具体的な設計を始めてみました。
まずESP32の入出力の割り当てです。

my plan for mruby board
my plan for mruby board

64色出力すると、出力PINがかなり厳しいです。

PIN map for my project
PIN map for my project

細かく割り当て考えて見ました。あと出力が一つあればI2Cで機能拡張できそうなのですが、難しそうです。

残りのハード関連課題

  • 音楽
    やはりゲームに音楽は欠かせません。I2Sがまだ1チャンネル余っているはずなので、I2S→DACで音声出力したいです。ファミコン音源の仕様を真似しようと思っています。ここがうまくいくかどうかが次のハードルです。
  • SDカード
    スクリプトやデータの保存場所として、内蔵のフラッシュだけだと心もとないので、SDカードを使いたいと思います。ライブラリもあるので、SPIモードで接続するのはきっとすんなりうまくいくと期待しています
  • 量産
    今回のこれは何かのイベントでHW頒布することを目標にしてるので、量産方法の検討も必要です。部品実装の外注にもトライしてみたいと思っています。

そして、次にmrubyの移植と、システム周りのアプリ実装、ボード固有のAPIをmrubyのmrbgemとしてラップする作業があります。

試作基板v1

VGAコネクタとmini D-SUBコネクタを載せた基板を試作しました。

narya board v1
narya board v1
narya board v1
narya board v1
narya board v1 demo
narya board v1 FabGL demo

試作基板v1.2

Narya dev board v1.2
Narya dev board v1.2

周辺調査

mrubyの仕様も勉強しようと思って、勢い余って同人誌も書いてしまいました。

https://silentworlds.booth.pm/items/1326363

Posted by kishima