ゲームボーイアドバンス(GBA)非公式開発 Part2
■ このスレッドは過去ログ倉庫に格納されています
サウンドプレイヤーを自作したいと思っています。20曲程入れたいんですが何らかの形で圧縮して組み込みことが必要だと思うのですがどうしたらいいですか。 PCではDXライブラリを使えばMP3の再生ができるので作れることが分かっています。 じゃ、DXライブラリ使わずにmp3再生できるように頑張れ DMA1&2とTIMER0&1を使って、ダイレクトサウンドA&Bで同時に音を鳴らしたいのですが
片方しか音が鳴りません。
VBAのIOViewerでFIFOが変化しているのは確認したのですが
何も音がしない理由としては、どんな事が考えられますか?
SGCNT0_H(0x4000082)
SGCNT1(0x4000084)
の音量他もちゃんと値が入ってます。
本当に値が正しいなら
あとはVBA側でDirect Sound A,Bのどちらかがオフになってる位しか無いな レスありがとうございます。
VBAの設定も間違いなかったみたいです。
あれから色々試してました。
実は多重再生の為に、FIFOにコピーするバッファはサウンドデータと別にしていて、
TIMERのハンドラ内で手動でDMAを使ってFIFOにコピーをしてました。
鳴らないのはダイレクトサウンドAの方(BGM用)で、
ダイレクトサウンドB(効果音用)が鳴った時に何故かAも鳴ったので
調べてみると、効果音用のTIMER1が動くと鳴ると解りました。
とりあえず、AとBのFIFOコピーにどちらもTIMER1を使用することで一応解決しました。
タイマーを分けると鳴らなくなる理由がわからないままですが。
もしやDSOUNDCTRL(0x4000082)以外にも、
TIMERとダイレクトサウンドを関連付けるレジスタがあるのでしょうか?
原因が解りました…。
DSOUNDCTRLの初期化にor演算子しか使っていなかったこと
(タイマーを指定するのに、DSOUNDCTRL |= DSOUNDCTRL_ATIMER(0)としかやってませんでした)
自分の使っているgba_sound.hのDSOUNDCTRL_ARESETが
0x0400と定義されていた事(実際は0x0800。0x0400はタイマーの指定に使用)
が原因でした…。
お騒がせしてしまってすみませんでした。
GBAとかファミコンは開発環境が強力じゃないから
そういう所でハマっちゃうと、抜けるの大変だよね GBAではないですが、GBCの板が見当たらなかったので試しに書いてみます。
ttp://nagasaki.cool.ne.jp/xor-a/
ユーザーアプリがロッピーとかで配信出来たらなぁと思うのは愚痴ですが。
GBCの板は昔あったんだが、過疎すぎて落ちちゃった
VCとかに配信できたら面白そうだけどね>自作ゲーム 今まではメインループの始めにV-Blankを待って、それから各処理を行っていたのですが、
開発が進むにつれてV-Blank中だけじゃ処理が間に合わなくなってしまいました。
そこでゲーム処理と描画関係の処理にわけて
while( V_COUNT != 0 ){}
GameProc() ; // ゲーム処理
while( V_COUNT < 160) {}
GraphicProc() ; // 描画関係の処理
と、二つに分けてやる事にしました。
表面上はうまく動いているように見えるのですが、
こういう事をやってしまっても大丈夫なのでしょうか? 分けること自体は問題ないけど
ゲーム処理でV_COUNT != 0を待つ意味は無いよ
描画が終わったらすぐに処理を始めていい
while( V_COUNT < 160) ;
GraphicProc();
GameProc(); >780
おおなるほど。
確かにそうした方が処理時間をより多くさけますね。
レスありがとうございます。 ここってまだ人いますかね……
自分で作ったプログラムをPogoShellから起動する場合,「終了してPogoShellに戻る」
という機能をつけると便利だと思うんですが,やりかたがさっぱりわかりません.
どこで調べればいいのかご存知のかた,教えてくださいませ. Pogoshell resetでググってみた。
ttp://boards.pocketheaven.com/viewtopic.php?p=52627&sid=a2b1ee533e1a9b52029d305b2c611034
になんか書いてあるような気がする。
あとは自分でガンバレ カートリッジのバンクセレクタを元に戻してswi 1, swi 0の順でリセットかければおk
Visoly系(F2A)とEZ/XG-Flashはlibpogoのrestart.Sを使えばいいよ おお,回答ありがとうございます.
リブート自体はbiosコールでできるのかなとは思ってたんですが,
バンクセレクタ云々というのが俺がよくわかってない点のようですね.
F2Aを使ってるので,とりあえずrestart.sを見てみます.
実はC言語しか知らないので時間がかかりそうですが. 圧縮した音楽ファイルはどうやって再生すればいいのでしょうか。wavじゃサイズ大きすぎる。 何で圧縮した音楽ファイル?まずはそこからだけど。
mp3は再生できないよ。 そもそも、サンプリングされた音の再生がGBAじゃ無理だと思うんだが
スペックが足りない それはさすがにGBAなめすぎ。
44kHzで16トラック合成出来るくらいのスペックはあるよ。 >>786
> wavじゃサイズ大きすぎる
というのはちょっと理解が足りないと思います。
wavやaviは単なる入れ物なので、中身が問題。
多分、PCM(非圧縮)のことを言ってるのですよね?
同じwavでも中身がmp3だったりADPCMだったりするならサイズは小さくなります。
IMA ADPCMなら約1/4になるし、デコード処理も軽いのでオススメ。
また、Windows付属のサウンドレコーダーでデータが作成できるので手軽。
http://wiki.multimedia.cx/index.php?title=Microsoft_IMA_ADPCM
http://wiki.multimedia.cx/index.php?title=IMA_ADPCM
が参考になります。
wav内での格納形式は前者のURL、デコード処理は後者のURLを参照して作ってください。
データはwav内のブロック単位で処理し、ブロック内でデータは完結します。
デコード処理はURLに書かれている4行の処理が全てです(最適化についても書かれていますが)。
また、sox等のソースも参考になります。 効果音の周波数って、どれくらいが良いんでしょうか?
アクションゲームを作っているのですが、
現在8000kHzで同時再生させる為に自力合成で結構処理が重いです。
>>791の8000kHzは8000Hzの間違いでしたw
>>792
77.8MHzという事は77800000Hzですか。
8000Hzでヒーコラ言ってるので自分では無理っぽいですね。
>>792
ZIP-FMか!
>>793
ネタをネタと(ry なん・・・だと?
出来るかわかりませんが市販のゲームを調べてみます。
8kHzくらいで重くなるってことはほとんど無いから
なにかやり方間違ってるんじゃないの?
DirectSoundからサウンド要求があるたびに割り込んでたりとか やっぱり8000Hzは低い部類になるって事ですね。
現在は、合成用バッファを1フレームで消費する量の2倍確保して、
前半を再生中なら後半に書き込み、後半を再生中なら前半を書き込む処理を
1フレームに一度呼び出す方法を取っています。
2チャンネル同時再生するとHBlankの数値が30弱くらいの重さです。
やっぱり何かやり方が間違ってそうなので、ソース見直して見ます。
重いというからどれほどかと思ったら2音合成でHBlank30ライン分か。
チューニングしてなければ、それくらいはいくかもね。
軽くポイントだけ。
7884Hzにしろ8121Hzにしろバッファのサイズは4の倍数なのでループを4回分展開出来るな。
10512Hzだと16の倍数になるから、16回展開出来る分更に速いかもしれない。
どっちにしてもDuff's Deviceを使えばいい。
効果音は1フレーム単位のサイズに揃えれば、終了判定は毎フレ1回/チャンネルに抑えられる。
これをやった上でそれ以上速くしたかったら、既成のライブラリを検討した方がいいかもしれないよ。 void mixAudio(); // プロトタイプ宣言
void mixAudio() { ... } // コード
があるとして
void mixAudio() IWRAM_CODE;
IWRAM_CODE void mixAudio() { ... }
にして、そのソースを-marmでコンパイルするだけで、おそらく負荷が1/3になる。
手元で軽く組んでみたが馬鹿正直に作って2チャンネル合成でHBlank30弱だったのが
IWRAM_CODEにしたら10弱になった。 >798
ループの展開…?forループを全部べた書きするという事なのか…?と思いつつ、
「Duff's Device」というのを知らなかったのでググって見たのですが、
これは凄いですね。こんな方法は自分では絶対に思いつかないです。
>799
わざわざ検証して頂いてありがとうございます。
IWRAM_CODEという存在は知っていたのですが、
効果音再生よりも重い処理があったら困るので、
これは最後の切り札にしようと思ってました。
ループで成り立っている高負荷な処理は、切り札と言わず全てIWRAM_CODEにすればいいよ。
ぶっちゃけループ展開はする必要ない。
俺はPCM合成の他にアニメーション処理や当たり判定をIWRAM_CODEにしてる。 This guy was lying in bed, tossing and turning and groaning, and finally he sits up, opens his mouth, and shoots a six-foot flame across the room. , >>805
http://nocash.emubase.de/gbatek.htm#gbacartrealtimeclockrtc
を見ると、普通の3線シリアルのRTCが汎用I/Oポートに繋がってるだけみたい。
http://nocash.emubase.de/gbatek.htm#gbacartioportgpio
に書いてあるが、bit0からSCK, SIO, CS。
使わないと思うが、IRQも繋がっているのでアラーム割込みも使えるっぽい。
SII S-3511のデータシート
ftp://ftp.sii.co.jp/pub/ic/old_dtst/old_dt_j/realtime/S3511A_J.pdf
のタイミングチャートを参照し、ポートをパタパタと制御すればよい。
でも、AC特性は3Vと5Vのどっちなんだろうね…
遅いほう(3V)のタイミングで作ればどっちでも動くけど。 >>806-807
ご親切にありがとうございます。
割り込みは使わないからrtc.cをそのまま使えば動きそうです。ありがとうございます。 それGPLだからな
それ使ったものをどこかで公開するときは一緒にソースも配布するようにしろよ そのままで動かなくて苦労したけど
最終的には出来ました
本当にありがとうございます エミュレータで動くのに実機や
実機BIOSで動かしたエミュレータで動かないって
どうゆうことなの? ヘッダに適切なデータが入っているかチェックして、無ければ動かないようになってる
そのデータはdevkitARMに同梱されてるgbafixで埋めれ GBAって単純に考えればSFCの2〜3倍くらいのスペック? 理論値高くても実際に出たゲームはSFCに毛が生えた程度だったな
wikiにはsfcと同程度って書いてあるけど詳しくないからよくわからん
はやくgbaで作ってみたいなー >>815
×CPUだけでも
○CPUだけは
CPU以外はそんなに違わないと思う。
既に完成された形。
>>817
ゲームの面白さは画面の派手さ等とは関係ないし、
無理に派手にするのは違うと思う。
それに携帯機器なので、消費電力を抑えるのもメリット。 派手さとか関係なくGBAはその程度の性能ってだけ。 >>819
スプライトが回転できて、回転BGも2面まで使えるから
そのアドバンテージだけで4倍相当くらいはあると思ってるんだけどどうよ?
画面の狭さで2倍に戻るが >>821
うーん使いどころが…
その機能を有効に使って面白いゲームを作れたら凄いんだが。 GBAってムービー使ったりROM丸々容量使ってアニメ一話分のソフト出したり
SFCより性能が上とパッと見分かるのってそれくらいだろ ゲームボーイアドバンスSPの内蔵充電池をNDSで使うことは出来ますか?
>>824
リチウムイオン電池は危険だから、そういう変なことはしないほうが身のためだよ。 SFCよりは当然性能いいけど
SFC末期みたいに性能フルに使うって感じは無かったから
中途半端なハードになっちまった 某教授より l \
/ ノ´⌒ヽ,, \
| し な 間 〉 // γ⌒´ ヽ \ は
| ら っ に |/ l // ""⌒⌒\ ) < 辞
| ん て あ / i /::::::::: \ /ヽ )_/ め や
| ぞ も わ |> !:::::::::::(・ )` ´( ・) i/\ さ
| | な |`/\ |:::::::::::::::(__人_) | \ せ く
っ | く |/ / l´,.-― 、:::::「匸匚|' |――/ ろ
!!!! | \ ', / /`7-、|/^⌒| /// / 俺
lT´ { / / ト、_ノ _'// / !!!!!
l´ ヽ、 > ー ,/ |ニ.ノ /_ を
i``` 、/ } ',,,..' |-'´,- '´ ̄/ ヽ∧ ____
\/ ' \_ `´ノ7l´ / // ヽ lヽ
/ ̄ |  ̄ ̄/ ノ L_/ ★ U |
/ ヽ /`ー´ /l |
F2A USB LinkerかF2A USB Link Cableなら手に入ると思うぞ
ブートケーブルと中身一緒だから同じように使える >>834
thx! 今度秋葉行った時探してみる。
どうしてもブートケーブルじゃなきゃ駄目な理由があるならともかく
探すならF2Aだけじゃなくて他のマジコンも視野に入れたほうがいいよ 関係ないがFC、GB、GBC、GGって性能面でどういう順序なん FC据え置き GB GBC GG 携帯ゲーム機
FC GB GBC 任天堂 GG セガ
登場時期 FC 。。。GB GBC=GG
FCとGBがほとんど同じ性能
表示能力はGBのほうがはるかに劣るけど音源が同じだし、CPUが同じ8BIT
FCとGBCが表示能力も同じ程度かな
画面の解像度はGB GBCのほうがはるかに狭いけど
登場時期からしてGGはGBCと同じ程度の能力じゃないの? DS開発スレ無くなったね
ここも2009年から更新無し。ダウンロードもリンク切れ
ネットアーカイブにも一切情報無し
http://www.gbadev.org/index.php DSは今はプチコンでお手軽にプログラミングできちゃうから需要もないのかなぁ・・・ http://hackaday.com/2010/03/18/arduino-based-multiboot-cable-for-game-boy-advance/
Arduino based multiboot cable for Game Boy Advance
March 18, 2010 By Mike Szczys 20 Comments
[Steve] wanted to do some ARM development and set his sights on the Game Boy Advance as a development package.
In order to get his code onto the device he build an Arduino-based communications cable. 久しぶりに検索してみたらIDEまで出来てるんだな
devkitPro
ttp://sourceforge.net/projects/devkitpro/files/Automated%20Installer/
Doc.1 devkitPro(開発環境)のインストール
ttp://akkera102.sakura.ne.jp/gbadev/index.php?doc.1
ttp://akkera102.sakura.ne.jp/gbadev/index.php?plugin=ref&page=doc.1&src=clip_3.png
テ
ぐ、途中書き込みしてしまった。
テスト段階だけど自分で作ったGBAソフトが想像したものより若干しょぼく見えるとかなり凹むよね。
あー・・・まるで製品みたいだなって言われるくらいクオリティ高いゲーム作りたいわ・・・ 最近1から勉強し始めたが
bx命令でThumbのまま任意のアドレスに飛ばす場合は
実際に飛ばしたいアドレスに+1hしないとだめで+分は勝手に調整されるのか
これがわからずにちょっと困ってた 勝手に調整はされないはずだよ
bx r0なら
r0に飛ばしたいアドレス+1hしないと
ARMなら別にしなくていいけど Thumbは必須 のはず BGAってなんかこう、ちょうどいいよな
画質とか音質の微妙な古さがな GBAで他機のゲームを動かせるなんて知らなかった。
まだアレが来てないから試してないけど、動くけど音が出ないと言うSFCがかなり惜しいね。
しかしPCEが動くんだとしたら驚異だよな。
PCEのゼビウスやサーガイアが遊べるなら昇天するぜ。
マリオスキンや日本語パッチがあるというから年末年始は楽しみだ。
もともとはアドバンスでファミコンが動くというから買ったんだけど、
調べたらそれどころじゃないみたいなので驚いている。 アドバンスでMDが動くとどこかで読んだんだけどそら耳だったのかな。
PCEAdvanceは見つけたんだけど、どこを探してもMDロムを
GBAロムに変換するものが見つからない。 かなり遅そうだよね
pceの動作周波数が7.5メガヘルツ、GBAが17メガヘルツくらいだっけ
わずかしか能力差が無いし画面更新とかも少なくなりカクカクしそう
画面解像度も縦方向が足りないから文字とかは化けるのでは
ファミコンも意外にも縦に解像度が高いんですよね ファミコンとマスターシステムが全画面で動くだけで驚異、幸運。
全画面でGBをやりたいときはカートリッジを挿して遊ぼう。 初代かspならクロックアップ改造すればPCEはいけるんじや? そのクロックアップの方法を書いた人は主にアドバンスのポケモンシリーズを動かそうと
したようだけど、アドバンス用のソフトなのに普通に動かないのかね。
何のために速くさせようとしているのだろう。
PCEのゲームは起動さえもできなかったから速度を上げてもだめなんじゃないかな。
SMSとSG-1000、アドバンスソフトとファミコンが全画面でできるというだけで奇跡だと思っておこう。 >>856
いやPCEは音無しなら実機60-70%位で動くよ
ゲームによるみたいだけど中には実速?って思うものまである
2倍まではoc可能らしいから
普通に遊べるレベルになるんじゃない DSでも動くゲームが少ないって書いてる人がいるようだからやめておいた方がいいんじゃないか。
買ったばっかりだしあまりゲーム機を分解してまでどうのこうのしたくないな。
ハンダ、というだけでなあ。。。 マジコンは何使ってる?
スパカならエミュが搭載済みだから変換無しで手軽に動作確認できるよ
試してみるとわかるが結構動いてる
もしかして変換ミスってない?
それとDSのGBAモードはエミュじゃないはず
GBAより能力が高いわけじゃない EZ-Flash4というものだよ。
マリオローダー1.77で動かしてる。
変換ミスか。
あとで調べてみるよ。 >>860
究極タイガー、源平、達人、忍者ウォリアーズ、ゼビウス、ギャラが88、あとカトケン
この辺りは体感だけど90%レベルで動いてるよ
十分遊べるレベル
かなりゲームによるはず
ちなpceadvanceで
EZ4でもイケてる >>861
ゼビウスファードラウトとカトケンとギャラガ'88を変換して起動させてみたけど
読み込んだ後黒い画面のまま何も起きないね。
ただLR両押しでメニューは呼び出せます。
PCEAdvance_ROM_BUILDERを起動させるとHacks file not.It should be 'F:\ドキュメント
\GBA用エミュレーター\PCEAdvance\neshacks.txt'
とメッセージが出てOKボタンが出るけどとくに関係ないよね。
ROMsにPCEファイルをドラッグドロップしてBuildを押して名前を書いて出す場所を確認して
それでgbaファイルができるんだけど問題ないよね。
確かにgamelistにはいろんなゲームが動くと書いてあるのにおかしいと思っていた。
GBA用エミュの紹介ページにも「Good!!」が出ているから動いてもおかしくないんだよな。
もう少しいろいろやってみます。
それクロックアップ後の話しじゃないよね。 >>862
もちろんオバクロ前です
一通り変換したのが第分前なんで詳しく覚えてないんだけど
かなり調べてるみたいなんで手順は基本間違えてないんでは?
エミュとファームのverが相性悪いとか?
いずれにせよタイトルでないのは変換したファイルに問題がある 普通のアドバンスでPCEゼビウスできるなんていいな。
Lボタン押しながら起動させてリセット版ローダーで起動しようがセレクト押して
NORだかに書き込んでから起動させてもだめだ。
PCEAdvance V7.5以前のものはどうも入手できないみたい。
でも遊べている人がいるようなことはわかったよ。
ダライアス+も良好に動くという書き込みがあるし悔しいね。
いろいろ考えてみる。 おう、頑張ってくれ
と言いつつ開発板だからいう訳じゃないが
最近はハックマリオと自作ゲームばかりやってる
探すとかなりオモロイのあるよ ■ このスレッドは過去ログ倉庫に格納されています