見出し画像

東方BGM on VGS(実機版)

私は、2013年の春先頃から東方BGM on VGS(東方VGS)というスマートフォンアプリ(iOS, Android)を配信しています。

VGSとは、2012年ごろに私が開発した波形メモリ方式のチップチューン音源です。

小さな容量で音楽を鳴らす仕組みを作る必要があると考え、ソフトウェアシンセサイザー方式でチープな音源機能を実装

記事「東方BGM on VGSができるまで」より抜粋

そして、東方VGSは東方Projectの楽曲をVGS向けに耳コピ&アレンジしたものを配信するスマホアプリ(東方Project二次創作)です。

2013年〜2016年の間、当時の東方Projectの二次創作ガイドラインではスマホでのマネタイズがグレーだった(正確にはWebメディアか何かのインタビューでZUNさん本人が「無料ならOK」と仰っていた)ため、一切マネタイズをせず完全無料で配信していたのですが、AppStoreの年間$100のショバ代を払うのが辛かったので、一時期アプリストアでの配信を停止していました。

しかし、いつの間にか最新のガイドラインで広告を用いたマネタイズと広告解除アイテムの販売が許可されていたので、「広告収入があればAppStoreのショバ代ぐらいは払えるかも?」と淡い期待を懐き、2022年1月から配信を復活させてみました。

その結果、有り難いことに月2〜3万円程度の売上が安定的に得られるようになりました。ですが、年間4〜5万円ぐらい稼げれば十分だと思っていたので、少し儲かりすぎかもしれません。

そのような背景がある中、今年(2023年)は東方VGSの配信10周年ということもあって「スペシャルな何かを創ろう」と思い立ち、最近かじり始めたIoT技術を応用して実機版の東方VGS(同人ハードウェア)を創ってみることにしました。

以下、最初にコンセプトめいたものを長々と書いていますので、本題を読みたい方は「部品と工具の調達」の章からお読み下さい。


コンセプト

東方VGS実機版のコンセプトは、初心者や子ども(中高生ぐらいを想定)でも組み立てられるシンプルなゲーム機を創ることで、中高生のお小遣いぐらいの金額感で購入できるようにすることを特に重視しました。

同人ハードウェアはお値段が「ザ・大人の趣味」のものがままあり、子どもにとっての参入障壁が高いと思われます。

ターゲットユーザーの年齢層が高ければそれでも問題ないかもしれませんが、東方Project(原作)は幅広い年齢層から支持されており、その二次創作物である東方VGSも当初私が想定したターゲット層(チップチューン好きなオッサン世代)よりも大分若い世代にも使われているので、数万円もするような高額な価格設定は避ける必要があると考えました。

そこで、「中高生がお小遣いで買える玩具」の目安として新品のファミコンカセットぐらいの価格設定(5千円前後)に抑えることを目標に検討をすることにしました。

※最近の中高生はお小遣いでファミコンカセットを買うことはないかもしれませんが目安ということで😅

価格戦略

そもそも何故、同人ハードのお値段が割高に見えてしまうのか?

ハードウェアの製造単価は量産化をすることで下げられますが、量産化には莫大な資本(金型製作費、原材料費、工場稼働費など)が必要で、加えて在庫リスク(一定数売らないと赤字になる営業ノルマや保管費用など)も発生してしまうので、基本的には趣味で製作される同人ハードは「少ロット製造」になります。

同人(趣味)なら基本的に(外注等をしない限り)人件費が無料なので、企業と価格面で張り合う上でのアドバンテージはその点に限られます。

ソフトウェアであれば原価の大半が人件費なので、企業が開発したソフトよりも同人ソフトの方が価格面で圧倒的に有利ですが、ハードウェアの場合は人件費以外にも多くの費用が掛かるため、プロジェクトオーナーの人件費が無料になったところでアドバンテージはほぼ有りません。

そのため、ハードウェアの分野で同人が企業とガチンコで価格勝負をするには、製造費用全般の圧縮を考える必要があります。

製造費用 = ①初期費用/製造数量 + ②材料費 + ③加工費 + ④管理費

TOKYO精密機械部品「発注ミニ知識」より抜粋

それについて無い知恵を絞った結果、プリント基板やシェルなどの専用部品を全て省略して既に量産化&流通している低価格&入手が容易な部品と工具のみで製造できるようにしつつ、電子工作入門ネタのような形(本書)で情報のみ提供することで、原材料費、組み立てに掛かる人件費、在庫リスク等を排除できると考えました。

ハードウェアの製造販売を行う企業には、任天堂(ゲーム機)やARM(CPU)など、工場を持たない形(ファブレス)にすることでコストを抑えている企業がありますが、その進化系(?)で在庫すら持たない形(ストックレス)にすることで、同人でも価格面で企業よりも優位に立てる筈…という戦略です。(もちろん、大きな資本をベッドしてガッツリと量産化できる大企業には勝てないと思いますが)

汎用部品の選定

東方VGSを動かすのに最低限必要な電子部品は以下の3点です。

  • CPU + RAM + FlashROM (SoC)

    • コンピュータの心臓部

  • タッチパネル付き液晶ディスプレイ (LCD)

    • 元々がスマホアプリなので画面出力+タッチ入力が必要

  • Digital to Analog Converter (DAC)

    • デジタルの音声波形データ(PCM)をアナログな音声に変換する装置(音楽を再生するために必要)

SoCの選定

SoC に 高性能なもの(RaspberryPi Zero や RaspberryPi 4Bなど)を使えば簡単に東方VGSを完全移植できますが、それについては色々と思うところがあり(後述)、敢えてRaspberryPi Pico(ARM Cortex M0+ 133MHz x 2 cores + 264KB RAM)という極限まで低スペックなSoCを採用しました。

「コンピュータの性能が良くて困ることはないのでは?」と思われるかもしれませんが、性能が良いハードには調達コスト環境負荷(消費電力量など)が増大するデメリットがあります。

消費電力量については、RaspberryPi ZeroはPicoの7.5倍程度で、RaspberryPi 4B はPicoの85倍程度らしいです。

・Apple M2 Ultra = 490mA〜3300mA (49W〜330W)
・Intel Core i7-13700 = 2570mA (257W)
・RaspberryPi 4B = 1700mA (1.7A)
・RaspberryPi Zero = 150mA (0.15A)
・ESP32 = 80mA
・RaspberryPi Pico = 20mA

Google検索で適当に調べたSoC等の消費電力
(※100W=1AとしてmAに基数変換)

環境負荷については、どれもどんぐりの背比べにしか見えないのであまり気にする必要は無いかもしれません。(4Bは電力喰い過ぎですがZeroなら十分低消費電力だと思われます)

曲がりなりにも「新規のゲーム機」を創ろうとしている私が最も気にしたポイントは、ゲームソフト開発の分野ではハード性能が良すぎると対応ソフトの開発コストが顕著に増大するという傾向がある点です。

ゲームソフトの開発費用は、ゲーム機の性能に比例して上昇します。例として、ファミリーコンピュータで1000万円、スーパーファミコンで3000万円、プレイステーションで1億円、プレイステーション2では2~3億円となります。また、プレイステーション3で本格的なソフトを作るには数十億円が必要になると言われています。

記事「ゲームソフトの開発費」より抜粋

ソフトの開発コストが増大するとリクープライン(損益分岐点)が上昇するため、結果的に赤字になる可能性が低い「一定数の売上が見込める無難なソフト」ばかりが発売されることになり、消費者視点では似たようなソフトばかりが発売されることでマンネリ化(そして、ゲームを卒業)しやすくなるデメリットがある…というのが持論です。

良い大人が幾歳になってもビデオゲームを遊び続けるのも如何なものか?とも思われるので、暗黙的であれ適度なタイミングで卒業できる現在の生態系は一概に悪いとは言えないかもしれませんが、私は生涯ビデオゲームを遊び続けたいと思っているので困ります。

ただし、逆に性能が悪すぎても駄目な事例も過去にあった(アタリショック等)のでバランスが難しいところです。

単なる私の好みの問題かもしれませんが、SG-1000やファミコンあたり(BAC; Budget At Completion 1000万円規模)だと今の時代に真剣に遊ぶと少し物足りない印象があり、メガドライブやスーパーファミコンあたり(3000万円規模)が一番バランスが良く、初代プレステやセガサターンあたり(1億円規模)がチャレンジングなタイトルを新規開発できるギリギリの投資規模で、プレステ3以降(数十億円〜)は明らかに過剰投資のように思われます。

その点を踏まえ、SoCには東方VGSが完全移植できるギリギリのラインのものを採用することに拘りました。

最近のスマホのSoCの性能は 2GHz x 8 cores  + 2GB RAMぐらいなので、RaspberryPi Pico(RP2040)の処理性能はその1/60以下、RAMのサイズは約1/8000程度という超絶低スペックなSoCですが、東方VGSの完全移植は性能的にギリギリ可能と判断しました。

結果的には思っていたよりも余力を残して完全移植できたのですが、RP2040より低性能なArduinoシリーズやIchigoJamへの完全移植は性能的に不可能なので、現在調達できるSoCラインナップ内でのギリギリOKのラインはRP2040ということで間違いなさそうです。

IchigoJamへの完全移植は性能的に不可能と記述してしまいましたが、2021年発売のIchigoJam Rには、RISC-Vチップが搭載されて性能はこちらの記事による96MHz程度とのことなので、もしかするとIchigoJam Rならギリギリ動かせるかもしれません。(※未検証です)

2023.10.09追記

RP2040は、部品点数も少なくかなりシンプルなSoCなので、深圳方面にジェネリック基板が大量に出回っており、開発ボードが1個あたり300円前後で調達できます。(むしろ送料の方が高い)

上記のツイートでも言及してますが、RaspberryPi Picoの純正品(英国製)はフラッシュROMが2MBしかないので、そもそも東方VGSの現時点の曲データを全て入れることができません。

また、今どき micro USB インタフェースであることに加え、お値段も結構高い(約800円ぐらいする)ので、フラッシュROM 16MB&Type-Cのジェネリック基板(中国製)を採用することにしました。

LCDの選定

LCDについては、東方VGSのRetroモード(VGSオリジナル)の解像度が240x320(QVGA)という仕様なので、その解像度&タッチパネル付きのSPI接続ディスプレイICを調査した結果、ILI9341と呼ばれるものが主流らしい…ということが分かりました。

LCDの値段は基本的に画面サイズ(何インチか)に比例してお値段が上下して、タッチパネルを付ける場合は抵抗膜方式(安価)と静電容量方式(高価)のどちらを採用するかによっても上下します。

試しにM5Stack(2インチの静電容量式LCD付きの小型コンピュータ)を購入して触ってみたところ、あまりにも小さすぎ、これでは東方VGSのタッチ操作をするのにはストレスフルだろうと感じました。

IoT(Internet of Thing; あらゆる機器をインターネットへ接続することで相互通信を行う分野の技術)界隈では「画面は小さければ小さいほど良い」という考え方があるようで、1インチ台や1インチ未満といったものもあるのですが、そろそろ老眼を気にし始めるお年頃の私にとって2インチ以下はほぼ拷問です😅

IoT とは、従来インターネットに接続されていなかった様々なモノ(センサー機器、駆動装置(アクチュエーター)、住宅・建物、車、家電製品、電子機器など)が、ネットワークを通じてサーバーやクラウドサービスに接続され、相互に情報交換をする仕組みです。

AWSの記事「IoTとは」より抜粋

確かに、IoTであれば出力装置としてディスプレイが不要なケースも多い(≒オプショナルな存在)と思われるので、IoT用途であれば邪魔なディスプレイ装置はそもそも付けるべきではなく、必要なケースでも可能な限り小さくして然りです。

IoTのことはさておき、ゲーム機のディスプレイは最低3インチ以上なければならないというのが今回私が得た教訓です。(最近のM5Stackは1万円近くしたのでもの凄く高額な勉強代でした…昔は5,000円前後で購入できるIoT入門用の手軽なコンピュータだったと思うのですが)

実のところ、私が一番好きだった頃のiPhone(iPhone3GS)と同じ画面サイズ(3.5インチ)にしたかったのですが、3.5インチ以上だと解像度がQVGA(ILI9341)のものが無かったので3.2インチで妥協しました。(無いものは仕方がない)

iPhone 3GS
(※日本で使っていたものではないので技適は無いです)

なお、当初タッチパネルは安価な抵抗膜方式(任天堂DSの下画面やザウルスなどで使われていたもの)にしようとしたのですが、実機を取り寄せて検証してみたところ流石にコレはマズイと判断しました。

上記ツイートの動画では、指でそこそこスムースに操作しているように見えますが、これは爪を立てて力を入れているからできている芸当です。

抵抗膜方式では、スマホのような力を入れないタッチは認識されません。(通常は付属のプラスチックペンで操作しなければなりません)

抵抗膜方式のタッチパネルの存在を否定するつもりはありませんが、元々がスマホアプリである東方VGSにとっては致命的な欠陥となってしまうリスクがありそうです。

そこで、清水の舞台から飛び降りるつもりで大枚はたいて「MSP3223」というスマホと同じ静電容量式のタッチパネル(CTP; Capacitive Touch Panel)を搭載した液晶に仕様変更することにしました。

MSP3223を調達して実際に操作してみた動画が以下です。

スマホと同じ感覚でタッチ操作ができるのでとても快適です。

お値段は高いですが、現在の地球人はスマホが体の一部であるかの如くスマホ慣れしてしまっているので、これは必要なコストなのだと割り切ることにしました。

DACの選定

DACについてはイヤホンを簡単に接続できてお手頃価格だったUDA1334Aを採用しました。

UDA1334Aの正規品は既にEOL(販売終了)ですが、こちらも深圳方面に大量のジェネリック基板が出回っており、1個あたり300円前後で調達できます。(参考までに正規基板の単価は約8$≒1,200円ぐらいです)

試作段階で「i2s dac」でググって最初に見つけたという理由だけでとりあえず使ってみたUDA1334Aのジェネリック基板ですが、音質が想像以上に良かったので標準のDACはUDA1334Aで即決しました。

なお、DACは I2S インタフェースのものならUDA1334A以外でも問題ありません。まだ検証してませんが、恐らくPCM5102AやMAX98357あたりでもそのまま乗せ換えるだけで動くかもしれません。

技適・FCCへの対応

メインの部品調達先は中国(Aliexpress)を想定しています。

中国に限らず海外から電子部品を調達する場合、日本の電波法(技適)に対応しているか入念にチェックする必要があります。

技適を通していない無線電波を垂れ流してしまうと罰則規定付きの違法行為となりますので、ご注意ください。(参考

ですが、今回使用する電子部品(SoC、LCD、CTP、DAC)には無線通信機能(WiFiやBluetooth)がそもそも搭載されていないため、電波法(技適の有無)を気にせず安全に日本国内で使用できます。

なお、無線通信の問題は、日本(技適)よりも米国(FCC)への対応が更に厄介かもしれません。

米国では一部の中国メーカー(ファーウェイ等)へのFCC認証が禁止されているので、既に北米を含めた世界展開をしている東方VGSの場合、中国製のESP32(標準で無線通信機能が付いている安価なSoC)の採用はリスキーです。

実は当初、ESP32を搭載した開発ボード(WROOM-32)で開発をしていたのですが、技適+FCCの問題が厄介そうだったため最初から無線通信機能を搭載していないRP2040に乗り換えた経緯があります。(結果的に中国製のジェネリック基板を使ってますが、無線機能が無いからこそ安心して中国製を使えます)

余談ですが、今年7月末頃の習作段階ではM5Stamp S3を使ってました。

M5Stamp S3はESP32を使っているものの技適+FCCの問題をクリアできているように見え、一見すると良い感じのSoCだったのですが、標準的なブレッドボードに挿せる2.54mmピッチのポート数が少なすぎた関係でタッチパネルへの対応が出来なかったため不採用としました。(ついでに値段も¥1,200程度とやや高額です…送料別で¥500前後だったらもう少し粘ったかも)

検討結果

必要な部品と調達経路を最適化した結果、東方VGS実機版を作るのに必要な部品は全部でだいたい新品のファミコンカセットと同じぐらいのお値段(5,000円前後)に収めることができました。

月3,000円ぐらいのお小遣いが貰える裕福な家庭の中高生であれば、2〜3ヶ月ぐらい頑張って貯金すれば調達できるものと思われます。

部品と工具の調達

Aliexpressで調達する部品

以下の部品は、国内のオンライン通販サイト(スイッチサイエンスやマルツオンライン等)では現状(2023年10月時点)購入できないため、Aliexpressで購入する必要があります。

上記の購入価格(2023年10月2日時点)は 3,241円 でした。

Aliexpressで調達する部品一覧

LCDは「3.2 With touch」、RP2040は「Type-C 16MB」を選択してください。(※LCDは3.5インチ以上のものでは正常に動作できないのでご注意ください)

国内で調達する部品

以下の部品は国内でも簡単に調達できるので、国内での調達をオススメします。

上記の購入価格(2023年9月4日時点)は 1,225円 でした。

マルツオンライン(ウェブサイト)より抜粋

通販で購入すると別途送料が掛かってしまい勿体ないので、可能であれば電子部品の専門店で直接買った方が良いと思われます。

国内で調達する工具

基板にピンヘッダを取り付けるために以下2つの工具が必要です。

  • 電子工作用はんだごて

  • はんだごて台

これらは、全国各地のホームセンターで普通に買える筈です。

私は地元のカインズで、太洋電機産業のはんだごて(1,180円税込み)とはんだごて台(980円税込み)を調達して、掛かったお値段は 2,160円(税込み)でした。

合計予算(6,626円)

予算の合計は、3,241円 + 1,225円 + 2,160円 = 6,626円 です。

冶具(2,160円)を除けば4,500円ほどで購入できるので、これぐらいの予算感なら子どものお小遣いで揃えることができると思われます。

ですが、貴重なお小遣いを使う前に、お父さんやお母さんに(ダメ元で)相談してみましょう。

私はかなり財布の紐が硬い方だと思っているのですが、仮に自分の子どもがこういったモノを欲しがっていたら何となく教育に良さそうな気がするので、何なら4〜5万円ぐらいの中古のノートパソコン(古いMac Book Air等)もセットで小遣いとは別枠で買い与えると思われます。

30年前の親世代の価値観では、大企業への就職(堅実路線)や芸能人(ギャンブル路線)というのが勝ち組(?)のイメージだったものと思われますが、現代の親世代だとそれがITエンジニア(堅実路線)やインフルエンサー(ギャンブル路線)という形に変化しているものと思われるので、何となく「将来はITエンジニアを目指してまっせ」という堅実路線の雰囲気を醸し出しているタイプのものであれば、親からの投資を引き出しやすいと考えられます。

組み立て方

(1) ピンヘッダのはんだ付け

部品と工具が揃ったら最初にすべきことはピンヘッダのはんだ付けです。

ピンヘッダは、短い方を基板(RP2040 or UDA1334A)に挿入してはんだ付し、長い方をブレッドボードやJP線(メス側)へ挿入して使います。

ピンヘッダ

はんだ付けをする上で重要なのはピンヘッダと基板の位置をしっかり固定させることです。

不安定な状態ではんだ付けをしてしまうと、ピンヘッダが曲がった状態で固着してしまい、一度はんだ吸収線ではんだを外さないと使い物にならなくなることがあります。(1敗)

ピンヘッダと基板を固定する確実な方法は、ブレッドボード上ではんだ付けをすることです。

なお、ブレッドボード上ではんだ付けすると、はんだごての熱でブレッドボードをダメにしてしまうことがあるため、若干意見が分かれるところかもしれません。(私ははんだ付け専用のブレッドボードを1枚余分に買いました)

まずは、ブレッドボードにピンヘッダの長い方を基板の穴(スルーホール)の位置に合わせて挿入します。

UDA1334Aのピンヘッダをブレッドボード(作業用)に挿入

そして、基板のスルーホールにピンヘッダ(短い方)を挿入します。

基板を設置

この状態ではんだ付けをします。

はんだごてが温まったら、小手先をスルーホールとピンに3秒程度当てて基板を温めてから、小手先にはんだを当てて溶かして流し込み込みます。

なお、温めたはんだごての小手先はとても熱い(350℃ある)ので、うっかり素手で触らないように気をつけましょう。(1敗)

以下の動画が参考になりました。

(2) ブレッドボードで配線

次に、ブレッドボードとジャンパー線(JP線)を使って SoC ⇔ LCD & DAC の配線を行います。

ブレッドボードには複数の穴がありますが、これらは下図の紫色の線の範囲で通電する仕様になっています。

ブレッドボードの通電範囲

ブレッドボードの「A〜E」と「F〜J」の間の溝をまたぐ形で RP2040 を挿入し、JP線でILI9341、FT6336U、UDA1334Aを下表のように配線します。

ピンアサイン

電子工作の入門ネタとしては少し配線量が多いかもしれませんが、頑張って配線してください。(テキスト形式で確認したい場合はこちらを参照してください)

なお、純正品のRP2040(下図左側)だとポート名が基板の裏側に書かれているので、配線時にネット上で Pin Diagram などを参照する必要があり面倒臭いのですが、今回採用したジェネリック基板(下図右側)は表側にポート名が書かれているので、配線ミスが起こり難くて助かります。

RP2040の純正品(左)とジェネリック品(右)

全て正しく配線すると下図のような感じになります。

全て配線した様子

RP2040の上図右側のポートに結構空きがありますが、これらの空きポートは自由に使っていただけます。例えば、こちらの記事を読めば簡単にファミコンのコントローラを接続できるので、プログラミングが得意な方は東方VGSのファームウェアを改造してファミコンのコントローラで操作できるようにしてみると面白いかもしれません。

(余談)

JP線にETFE線(0.26mm)とワイヤーラッパー(WSU-30M)を使えば下図のようにブレッドボード無しで配線することもできます。

ワイヤーラッパーは一見すると100円ショップで買えそうなシンプルなものですが、あまり一般で使われることが無く、プロの現場でも最近はあまり使われないらしい(Wikipedia情報)こともあり、お値段が少し割高です。(私は「OK INDUSTRIES WSU-30M」というワイヤーラッパーを¥3,000弱で購入)

ですが、一度導入してしまえばソケット付きのジャンパー線よりも自由に配線できるので、今回のように回路設計が不要な(配線のみの)電子工作であれば、ブレッドボードよりもETFE線+ワイヤーラッパーの方が便利かもしれません。(もちろん、回路設計が必要な場合はブレッドボードが必要です)

ファームウェアのインストール方法

(1) パソコンを準備(OSは何でもOK)

ファームウェアのインストールにはパソコン(PC)が必要です。

PCのOSはWindows、macOS、Linuxなど、USB接続でリムーバブルメディアを認識可能なものなら何でも問題ありません。

(2) firmware.uf2をダウンロード

東方VGS実機版のファームウェアは GitHub でGPLv3ライセンスのOSSとして公開しています。

上記リポジトリのReleasesからダウンロードできる firmware.uf2 というファイルが東方VGS実機版のファームウェアです。

https://github.com/suzukiplan/tohovgs-pico/releases

(3) firmware.uf2をインストール

ファームウェアのインストールに専用のソフトウェアは一切不要です。

RP2040のBOOT(BOOTSEL)ボタンを押しながらPCとUSBケーブルで接続するとリムーバブルメディア(RPI-RP2)として認識されるので、そこへ firmware.uf2 をコピー(ドラッグ&ドロップ)するだけでファームウェアのインストールが完了します。

パソコンを持っていない場合は、パソコンがある友達の家、学校、ネットカフェなどにRP2040とUSBケーブルを持参してこの手順を実施してください。

(4) 完成

インストールが成功して配線ミスが無ければ、RP2040にUSBケーブルで給電することで東方VGS実機版が起動します。

ファームウェア起動後の様子

以上で東方VGS実機版は完成です🎉

DAC(UDA1334A)の LINE OUT(ステレオミニジャック)にイヤフォンやダイソーの300円スピーカーなどを接続すれば音楽を聴くことができます。

画面右上の音量ボタン(📢)を押せば1〜100の範囲(1刻み)で指定でき、その他の2ボタンで再生モードを下表のように切り替えることができます。

再生モード・スイッチの仕様

次章では、ファームウェアをビルドする手順について解説します。

ビルド手順(上級者向け)

(1) PCを準備(Linux or macOS)

ファームウェアのビルドには、Linux または macOS が動作するパソコンが必要です。(Windowsでのビルドには対応していません)

LinuxについてはUbuntuの利用を推奨しています。Ubuntuであれば、ハードオフで安価に入手できる10年ぐらい前の古いモデルのMacBook Airでも快適に動作します。

Debian系やRaspberry Pi Desktop等でも恐らく問題ありません。

(2) ミドルウェアをインストール

PCに以下のミドルウェアがインストールされている必要があります。

  1. GCC C/C++ (macOSの場合はXCODE CLI Tools)

  2. GNU Make(macOSの場合はXCODE CLI Tools)

  3. git(macOSの場合はXCODE CLI Tools)

  4. PlatformIO Core

なお、Linux の場合、PlatformIO Core を apt でインストールすると RP2040 向けのビルドが出来ない状態になってしまった(2023年8月時点)ので、Installer Script を用いた手順(公式の推奨手順)でインストールした方が良いです。

(3) リポジトリを取得(git clone)

git clone コマンドでリポジトリを取得します。

git clone https://github.com/suzukiplan/tohovgs-pico.git
cd tohovgs-pico

(4) ビルド & インストール

make コマンドを実行すれば、ファームウェアに組み込まれる ROM データとファームウェアのコードのビルドをして、その後RP2040のフラッシュにファームウェアが書き込まれます。

make

初回ビルドとファームウェアの書き込みには結構時間が掛かるので気長にお待ちください。

Makefileの中身(参考)

makeコマンドを実行すると次の処理が実行されます。

  1. ROMデータ(楽曲データやフォントなど)のコード自動生成

  2. ファームウェアとROMのソースファイルをビルド

  3. RP2040のフラッシュ領域へのファームウェア書き込み

スマホのアプリの場合、ROMデータはアプリのアセット領域へファイルとして配置しておき、アプリのコードからそれらを動的に読み込んで利用するケースが多いと思われます。

RaspberryPi Picoでも、SPIFFSを用いることで同じようなことが出来ますが、RAMの容量が264KBしかないため動的に読み込む形で実装してしまうとほぼ確実にRAM不足になってしまいます。

そこで、ROMデータをC言語のconst型(定数型)の配列として定義することでデータをプログラムコードの一部としてファームウェアに組み込み、RAM領域に展開せずに参照することで、少ないRAM領域の専有容量を節約することができます。(※その場合、4バイトアライメントにしなければクラッシュするのでshort型、int型、long型などの2バイト以上のデータ型へアクセスする時には注意が必要です)

カスタマイズ例

ハードウェア販売ライセンス

東方VGS実機版の少し珍しい特徴として、HSL(Hardware Sales License; ハードウェア販売ライセンス)というものを規定していて、ご自身で製作された実機版東方VGSのハードウェアを販売してもOKということにしてます。

幾つかの細かい規定があるので、販売される際はそれらの遵守をお願いいたします。

一般的なコマーシャルライセンス(商業ライセンス)では、ライセンス料や売上数量に応じたキックバックを求めると思いますが、東方VGS実機版はそれらを不要(無料)にしています。

可能であれば、モバイルバッテリー+電源ON/OFFを付けたり、スピーカーと音量ボリュームを付けたり、プリント基板化したり、イケてるシェルを作ったりしたいところではありますが、ガチガチのソフトウェア畑の人間である私には難しいです。

エッセンシャルな部分は完成しているものの完成品のハードウェアとしてはまだ道半ばの状態なので、本業のハードウェア屋さんとしては「ここからが本番」という感じではないかと思われます。

そこで、ガーバーデータや3Dプリンタのモデルデータの開発については、ハードウェアが得意な個人の方々(自然人)にお任せしたいと思っています。

ただし、何もインセンティブが無くても動いてくれる人は(全く居ない訳ではないものの)レアだと思われるので、ハードウェア販売は一切ライセンス料やキックバックを取らずに無料にしてみよう…という試みです。

東方VGS実機版の販売予告をツイートしてみたところ、想定以上に多くの方の関心を集めることができたものの、恐らく大半の方がイメージした完成品のハードウェアとは程遠いものなので落胆させてしまうかもしれません。

最終的には誰もが満足する完成品のハードウェアとして仕上げたいので、他人任せではなく、私の方でも継続的にハードのことを勉強していこうと思っているところです。

VGSコンパチハード

少し細かい補足をすると、先述のHSLは東方VGS実機版のファームウェアをプリインストールしたハードウェアを販売する場合に遵守すべき規約です。

つまり、東方VGS実機版のファームウェアをプリインストールしないがハードウェア構成として互換性のあるもの(VGSコンパチハード)を開発&販売して、購入後に購入者自身が東方VGS実機版ファームウェアをダウンロードしてインストールする形であれば、HSLの縛りが無くなります。

HSLの縛りがある場合、東方Project二次創作ガイドラインを準用する必要があり、それにより流通規制の規約を遵守する必要があります。

二次創作物の頒布は、原作が販売されている流通か、許可している流通のみで行えます。

東方Project二次創作ガイドラインより抜粋

また、東方Project二次創作ガイドラインは上海アリス幻樂団様が個人のファン活動としての二次創作に限り許諾をしているものなので、販売主体が法人の場合は東方Project二次創作ガイドラインを準用する必要があるHSLを適用できません。

個人でのファン活動としての二次創作は、常識の範囲内で基本的に自由です。ただし、以下の条件を守ってください。

東方Project二次創作ガイドラインより抜粋

つまり、法人が東方VGS実機版の販売を行う場合、上海アリス幻樂団様との個別ライセンシー契約等が必要になるものと思われます。

企業が営利目的で二次創作やファン活動を行う場合は、個別にお問い合わせください。

東方Project二次創作ガイドラインより抜粋

しかし、VGSコンパチハード(東方Projectの著作物、商標、意匠を含まない形)で開発&販売すればHSLを回避できる為、一切の制約が無くハードを販売していただくことが可能だと思われます。(※私は知的財産権の専門家ではないので、詳細は弁理士又は著作権及び知的財産権に詳しい弁護士の先生にご確認ください)

なお、VGSコンパチハード向けのSDKは、MITライセンスのOSSとして無料で提供しています。

現時点では、東方VGSのファームウェアを実装するために最小限必要なAPIしか提供していませんが、将来的にはよりゲーム向けのグラフィック機能(ILI9341に特化したFCS80のVDP相当のBG/Sprite表示API)、サウンド機能の強化(効果音の再生への対応)、ゲームパッド(ファミコン相当)の入力インタフェース追加などを計画しています。

このSDKにはパソコン(macOS or Linux)で動作するシミュレータも付属しているので、コンパチハードを含む東方VGS実機版(ハードウェア)に対応するファームウェア(ゲームやアプリケーション)をC++言語で容易に開発できます。

このSDKを用いることで、シミュレータやエミュレータが備わっているスマートフォンアプリの開発環境(XCODE、Android Studio、Unityなど)と同じぐらい簡単にVGSコンパチハード向けのアプリ(ファームウェア)を開発することができます。

最近のスマホ向け開発ツールは肥大し過ぎており、10年前の古いパソコンでの開発には物凄くストレスが溜まる(そもそも動かないこともある)のですが、vgssdkなら問題なくサクサク開発できるので、もしかすると今ならスマホアプリの開発よりも敷居が低いかもしれません。

実際、私は2013年モデルの MacBook Air の OS を Ubuntu に載せ替えてvgssdkを使ってますがとても快適です。

makeなどのCLI(コマンド操作)を前提としている点がプログラミング初心者にはやや取っ付きにくいかもしれませんが、Visual Studio CodeやIntelliJ IDEAなどの汎用IDEを組み合わせることでXCODEやAndroid Studioと比べても遜色のない高い生産性が得られるものと思われます。


この記事が気に入ったらサポートをしてみませんか?