Ruby Red Sandbox

ESP32を利用して、mrubyによるPC不要の独立したゲーム開発環境を開発中です。

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

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

FabGL demo
FabGL demo

mrubyボード構想

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

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

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

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

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

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

設計はじめ

最大の技術課題が解決しそうなので、具体的な設計を始めてみました。
まず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としてラップする作業があります。

周辺調査

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

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

Posted by kishima