Raspberry Pi PicoでNTSCのコンポジット映像信号を出力する(まずモノクロから)

Raspberry Pi PicoでNTSCの映像信号出力に挑戦。一度NTSC映像信号生成ってのを試してみたかったんですよねー。

PicoにはPIO(programmable I/O)なる小規模なCPU的なハードが載ってて、メインのCPUから独立してちょっとした処理を行うことができます、しかもCPUと同じクロックスピードで。命令も全て1クロック。
これ使えば専用のIC使ったりしないでリアルタイムにNTSC信号作れちゃうのでは!?というのが今回のチャレンジです。

 

最終目標は320x240くらいの解像度のカラー映像の表示です、が、まずはモノクロ映像に挑戦します。信号がカラーよりシンプル*1で難易度が低い。

  • 開発環境
  • 仕様
  • NTSC信号について
  • 回路図
  • プログラム
    • PIO
    • DMA
  • 最後に

 

*1:というか白黒テレビに後付けでカラーにする信号を乗っけてるので、白黒がシンプルというよりカラーで複雑化という感じ?

続きを読む

(Raspberry Pi Pico)PIOへのDMA転送の切れ目

Raspberry Pi PicoのPIOやDMAは1クロックごとに処理が可能ですが(125MHzなら秒間1億2500万回)、データをDMAでPIOに送り続ける場合にautopull・PIOからDMAへのDREQ(データリクエスト)・DMAチャンネル間のchain trigger等の使用時でも待ち時間なしにデータ転送され続けるのだろうか、という疑問が湧いたので確認してみました。

環境はWindows 11とVS Code、PlatformIOでearlephilhower版Arduinoコア(Raspberry Pi Pico/RP2040)を使用してます。Raspberry Pi Pico C/C++ SDKでもだいたい同じだと思います、earlephilhower版がC/C++ SDKをベースに作られているので。

 

  • PIOのpullをautopullに任せた場合「TX FIFO→autopullでosrへ→osrからout」で転送待ちは発生するのか
  • DMAチャンネル間のchain trigger使用時はそれぞれのDMA転送が切れ目なく続くのか
  • その他の転送開始方法も試してみる
  • ソースコード

 

続きを読む

PlatformIO+Raspberry Pi Picoで一時Uploadができなくなった話

Raspberry Pi Picoを触り始めてるんですが、「PlatformIOからスケッチをUploadできない」「BOOTSELモードに入ってもUSBストレージとして認識すらされない」という躓きがあったのでどう解決したかのメモを残します。

環境はWindows 11とVS Code、PlatformIOでearlephilhower版Arduinoコア(Raspberry Pi Pico/RP2040)を使用。多分Arduino IDEや公式のArduinoコア(Arduino Mbed OS RP2040)でも解決方法は同様だと思います。

 

  • PlatformIOからスケッチをUploadできない→Zadigでドライバを指定→そこから更に別のドライバ指定
  • USBストレージとして認識すらされない→一旦pico関連デバイスを片っ端から削除
続きを読む

UnityのAudioSourceの鳴り方やDSP Buffer Sizeの仕様を確認する

最近趣味でFC版スターソルジャーのUnityによる移植をしていて(きっかけはブログの別記事参照)、サウンド以外は一通り移植し終えて遊べる状態になったのですが、サウンド移植にあたって次のフレームで急遽鳴らし方を変えなければいけないなどのシビアなタイミングを要求されたりするので、まずUnityのAudio機能がどういう仕様になってるのかを検証してみた、というのが今回の記事です。

 

あくまでこれらは自分のPC環境による、WindowsのUnityエディタやWindowsビルドでの結果です。別環境では結果が変わる事柄もあります。

Unity 2021.3.13f1 でテストしています。

 

  • AudioSourceのVolumeやPitchの変更はどのくらい細かい頻度で可能なのか
  • AudioSource.Playはどのくらい細かい頻度で反映可能なのか
  • AudioSource.Playのアタックが弱まる
  • AudioSettings.dspTimeの分解能
  • AudioSource.PlayScheduledの時間の精度
  • DSP Buffer Sizeを変えるとどのくらい遅延が増減するのか
    • 測定方法
    • 測定結果
  • DSP Buffer Sizeの変更と音飛びの関連性
  • 最後に
続きを読む

PCにUnityで移植して気付いたスターソルジャーの仕様とバグ

↓この話に関連する話題。 u-mid.hateblo.jp

このASGコンテストに向けて検証も兼ねて実際にUnityでスターソルジャーを移植してみて(当時PC上で全16面遊べる状態、今はサウンド以外移植完了)、「スターソルジャーってこういう仕様だったんだなぁ」と思ったことが色々とあったのでツイッターでちょくちょくアウトプットしてたんですが、一連のツイートの内容をここにまとめておきます。

  • その1:スプライトの遅延
  • その2:レーザー
  • その3:誘導弾
  • その4:ラザロ
  • その5:スターブレイン・ビッグスターブレイン
  • その6:ジェリコ
  • その7:リューク
  • その8:ワープ時のスクロール
  • その9:爆発の効果音


続きを読む

36人対戦スターソルジャーという企画でASGコンテストに応募した話(その2)

その1の続き。

応募する企画はSTG部分の見た目や音をFC版スターソルジャーそのままにする予定でしたが、まず一体どこまでFC版に忠実にできるのか・どの方法でどれほどの作業量になるのかを把握する必要があります。

続きを読む

36人対戦スターソルジャーという企画でASGコンテストに応募した話(その1)

えー今回ブログに書く内容ですが、去年このようなコンテストがありまして。

 

game-creators.camp

 

80年代・90年代あたりのコナミのIP(ハドソンのIPも含む)を題材にしたゲーム企画コンテストです。アクション&シューティングゲームコンテストを略してASGコンテスト。

で、それにで36人対戦スターソルジャースターソルジャー発売から36年)という企画で応募した結果、ファイナリスト一歩手前で落選した話を書きます。審査は一次審査・二次審査2回・三次審査の4回だったので、決勝戦手前の3回戦で落ちたという感じでしょうか。

結果発表まで審査については書いてはいけない条件でしたが、コンテストの結果が出たようなのでブログに少しずつ書いていこうかと。そしてそれを書き終えたらゲーム機のコントローラーのボタン配置と決定ボタンの変遷の話のその5(最終回)を書くつもりです。このコンテストに参加しててそっちの更新が止まってた。

続きを読む