[過去ログ] ゲームボーイアドバンス(GBA)非公式開発 Part2 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
160: 2005/05/29(日)00:44 ID:tpMSB+bX(1) AAS
まあ、そこまで言わなくても一行の文章を短く終わらせて書けば。
161: 2005/05/29(日)02:55 ID:UFZ9c0zv(1) AAS
SaTaって人が全く同じことやってるよ
162
(18): 2005/05/31(火)16:11 ID:llLI5kWl(1) AAS
memsetは使えてるっぽいけどsprintfは使えないのかな?DevkitAdvance
-nostdlib ってどういう意味だろ?

最適化は面倒だからパスしようかな、とりあえずの目標はクリアしたり・・・
163
(1): 2005/06/01(水)01:30 ID:61IqLEFZ(1/4) AAS
このまったりとした流れなら言えそうなので質問、音楽鳴らそうと思ってダイレクトサウンドについて調べた
C言語ファイルでデータを記述するものとオブジェクトデータでデータを記述するものがあるらしい
容量的にはオブジェクトデータの方が軽くなるらしいので使おうと思ったがC言語ファイルのデータを読むサンプルしか見つからない
pcmconvでコンバートしその後オブジェクトデータを出力するらしいbin2oを実行しても元ファイルに非常に似たファイルが出てくるだけです
その後調べてみたところリンカーの辺りで結合するらしいのですが、分からない事がいくつか出てきました
どのようにして結合すれば良いのでしょうか?
またデータがどこにおいてあるのかどうやって調べれば良いのでしょうか?
省2
164
(1): 2005/06/01(水)06:10 ID:by7iY2yF(1) AAS
>>163
ヒント:__iwram_overlay_lma
165: 2005/06/01(水)07:29 ID:61IqLEFZ(2/4) AAS
(u8 *)(&__iwram_overlay_lma)
これですか?
宣言の後にこれで読めると言うのは分かりました。
同じ所でファイルそのものをバイナリで結合していたのですが
こんな事をやっても大丈夫?と言うかこれが普通なのでしょうか?
(とりあえず確めてみてだめだったらもう一度ヒントもらいに来ます
>>164 有難うございました
166: 2005/06/01(水)10:00 ID:OOZ2G8Rs(1/2) AAS
__iwram_overlay_lmaは生のデータを後から追加で結合したいときだけに使え。
.oを作れるならリンクしたほうが確実だぞ。リンクの仕方は分かってるのか?

bin2o hoge.bin hoge.o !hogeでhoge.oを作ったとして
Cから使うにはextern const unsigned char hoge[];と宣言するだけだ。
167: 2005/06/01(水)11:02 ID:61IqLEFZ(3/4) AAS
リンクの仕方もわかってません
makefile.txtに色々書きこんでバッチ処理の時に一緒に読み込ませてるのはわかるので
とりあえずググッていくつかの.o読み込んでるサンプル眺めて来ます

ついでにC言語ファイルでは音が出せました
けど割り込みで失敗します
研究所の割り込みのソースのブランクをTIMER0に変えるだけでは駄目なのでしょうか?
168: 2005/06/01(水)12:22 ID:OOZ2G8Rs(2/2) AAS
リンクの仕方が分からないようなら書こうと思ったけど、調べるんならいいや。

>研究所の割り込みのソースのブランクをTIMER0に変えるだけでは駄目なのでしょうか?
TM0CNTの割り込みフラグは立ててるか?
169: 2005/06/01(水)19:16 ID:61IqLEFZ(4/4) AAS
>TM0CNTの割り込みフラグ
それだ!
タイマー開始のところの数字弄ったら解決できました。有難うございます。
170
(1): 162 2005/06/02(木)15:39 ID:F8Q5wqFY(1/2) AAS
やっぱり最適化してます

プログラムをIRAMに置かない場合、thumb用でコンパイルしないといけないんだよな?
objdumpで逆アセンブルしてみたら4Byte間隔で0x0800****番地に配置されて
いるのはARM用にコンパイルされてるから?
#リンク時に -Ttext 0x08000000 としてます

コンパイル時の指定はどうすればthumbでコンパイルできるの?
-bかな?machineの指定はどうすればいいんだろう・・・
171
(1): 2005/06/02(木)16:32 ID:mT3sDBIJ(1) AAS
>>170
つ -mthumb-interwork -mthumb
指定しない場合はARM
ちなみにARMだろうかTHUMBだろうが動くんじゃないかな。
172: 162 2005/06/02(木)17:41 ID:F8Q5wqFY(2/2) AAS
ありがと>>171
いろいろ調べてみたけど、みんな気にしてないのかな?
たいてい指定無しでmakefileつくってる。-mthumb-interworkだけで

> ちなみにARMだろうかTHUMBだろうが動くんじゃないかな。
うん、いまのとこ何も指定しなくても(ってことはARMか)でも動いてる
いままではCのプログラムとしては最適化してきたけど
GBA用としてはまったく最適化してないの
省4
173
(1): 2005/06/03(金)22:30 ID:aUPd22sd(1) AAS
typedef const unsigned char u8;
u8 foo[] = { }
っていうデータの音楽のファイルを馬鹿でかく(1.4MB)してコンパイルしよう
としたら
Virtual memory exhausted: Permission denied
って出るんだが…これってメモリに入りきらないって事?
普段はROMに置きっぱなしで必要な時だけ読み出すとかで解決出来るのであればその解決方を誰か教えて頂けないでしょうか?
174: 2005/06/04(土)00:22 ID:VXQa3VA9(1) AAS
>>173
Cのソースがでかすぎてコンパイル出来ねえよってこと。

コンパイルオプションに-O0(マイナスオーゼロ)をつけるか
bin2oで出来たオブジェクトファイルを直接リンクするか
ソースをasm(.s)で書け。
175
(3): 2005/06/04(土)08:49 ID:Ri0Izx+x(1/4) AAS
オブジェクトファイルのリンクが出来ない…orz
研究所のWav2gba_guiで.oファイルを作り
makefileの
OFILES += main.o \
bgm01.o
ってやってるんだが何度やっても変数がないって罵られる
makefileが悪いのかそれとも他に原因があるのか…
省1
176: 175 2005/06/04(土)10:32 ID:Ri0Izx+x(2/4) AAS
自己レス
とりあえず原点回帰ということで
Dark Fader's site
のwav2gba bin2oで.oファイル作ったらコンパイルできた
今度は音がならない…
177: 175 2005/06/04(土)16:55 ID:Ri0Izx+x(3/4) AAS
またも自己レス
宣言をu16にしたら音は出たんだがCソースのデータでやってた時と比べて激しくノイジー
次から次に問題が出てくるんだが自分なんか間違ったやり方でやってるんだろうか?
178: 175 2005/06/04(土)17:23 ID:Ri0Izx+x(4/4) AAS
もう何が原因だったのかわからない。
もう一度u8に戻しても音再生できたしorz

ついでにノイジーになったのはシンクロナイズ外してたからでコンパイル時のミスではありませんでした

まる一日掛けて駄レスしまくってスマソ
179: 162 2005/06/06(月)21:58 ID:PaMPnmfV(1/4) AAS
質問です
memcpyでローカル変数の配列データをVRAMへデータをセットしようとすると
上手くいく時となんか行かない時が規則的に現れるんですが
原因はなんだと思いますか?

現状は:
配列データは多分予想どおりのデータが入ってる。
#memcpyを使わないでforループで書き込むと上手くいってる
省2
180: 162 2005/06/06(月)22:32 ID:PaMPnmfV(2/4) AAS
追加:
memcpyの座標が1dot x方向に増えた座標へcopyすると上手くいく
#逆に上手くいってたものが上手く色を塗らなくなった
どう変かといえば、白が薄ピンク色になる
#オセロ盤で本来なら全部白いマスのはずが白いマスとピンクのマスが交互に並んでしまう
181: 2005/06/06(月)22:41 ID:TKmnaeHh(1/2) AAS
ヒント: バス幅
182
(1): 162 2005/06/06(月)22:51 ID:PaMPnmfV(3/4) AAS
あ、もしかして書込み先が4Byte境界じゃないと上手く動かないのかな?
183: 2005/06/06(月)23:34 ID:TKmnaeHh(2/2) AAS
ヒント: 8× 16○ 32○
184: 162 2005/06/06(月)23:46 ID:PaMPnmfV(4/4) AAS
>>182 サンクス
ここのページの
外部リンク[html]:home.att.ne.jp
真ん中少し上の「メモリアクセス速度について」の
VRAMのwriteの書き込み制限(8bitでは×)のことかな?
こんな制限あったんだ、なるほど
wmemcpyを使えばいいんだろうか?
185: 2005/06/06(月)23:47 ID:s0kMJQK9(1) AAS
外部リンク[htm]:www.work.de
Address Bus Width and CPU Read/Write Access Widths

VRAMって使いづらいよね。
186: 2005/06/07(火)01:57 ID:hxwVLTzF(1) AAS
ドット単位でなにかしたいのなら
仮想VRAMに書いてドカッとコピーするか、
奇数偶数で演算を変えればいいだけだが?

もっともGBAはそういうアーキじゃないけどな
187: 2005/06/07(火)09:09 ID:x9MyQnam(1) AAS
VRAMは書き込みが遅いので、
mallocでとっておいて、
そこに書いた後DMA転送するのがいいです。
バイト単位で書き込みできるしね。
外部ファイルから取り込んだビットマップデータとかならDMA一発だしな。
188
(1): 162 2005/06/07(火)18:32 ID:ZI5uYn33(1/2) AAS
mallocを使うのってsbrkを移植するの?
newlibを移植すればいいのかな?このあたりのことはよくわからん

この辺に書いてあるかな?
C/C++による組み込みシステムプログラミング
外部リンク:www.amazon.co.jp
189: 2005/06/07(火)21:20 ID:3YUGrd7x(1) AAS
>>188
#include <malloc.h>

u16* pseudoscreen;
if ((pseudoscreen = malloc(sizeof(u16) * ScreenWidth * ScreenHeight)) == NULL) while (1) {};

とか。
190
(2): 162 2005/06/07(火)23:38 ID:ZI5uYn33(2/2) AAS
mallocって前もって準備しなくても使えるの?devkitadvance使ってます
PCでmallocの使い方はわかるけど、GBAの開発でそのまま使えるとは思わなかった

manでみるとsbrkのサポートが必要みたいだけどこれはどうなってるの?

使えるなら質問
mallocで確保されるメモリはIWRAM領域から確保されるの?
EWRAM領域?bssで指定された領域?グローバル変数との使い分けは大丈夫なの?
191: 2005/06/07(火)23:51 ID:f73nwpU2(1) AAS
実際にmallocしてアドレス確認すりゃいいと思うんだが
192: 2005/06/08(水)00:20 ID:mCV1pDkj(1) AAS
>>190
つ[crt0.s]
193: 2005/06/08(水)02:08 ID:Rbo74Gtn(1) AAS
それよりはlnkscriptとgccの吐くmapファイルを見比べるべきだと思うが。
crt0.Sなんか見ても役に立たんぞ。
194: 2005/06/08(水)10:20 ID:q69/QVDR(1) AAS
>>190
つ「論よりRUN」
195: 2005/06/08(水)11:15 ID:VgzV7AVL(1) AAS
悩むな
u16 buff[ScreenWidth * ScreenHeight];
これでおっけー
196
(1): 162 2005/06/08(水)23:15 ID:aq/RdM9p(1) AAS
ヒントがあるかと思ってnewlibのコンパイルに挑戦
makeは出来たっぽいけどmake installが上手くいかん
でもlibc.aは出来たし(同じとは限らんが)、malloc等標準ライブラリのソースも
付いてたのはうれしい発見だな
#おかげでmemcpyが8bit毎にコピーしてるのが確かめられた

ふーん、libc.aって***.oをarで固めたものなんだ。
やっぱり組み込み側の知識が足りんなぁ
省3
197: 2005/06/09(木)01:51 ID:cFLah592(1) AAS
>>196
おいおい、ゲーム製作とは違うところに逝ってるぞw
198
(1): 2005/06/09(木)12:45 ID:TWsYVQDp(1) AAS
質問が途切れたみたいなので質問
PCMの合成はどうすれば出来るのでしょうか?
ゲーム製作時にどのチャンネルはBGMとか決めておくものなのでしょうか?

(英語の説明書が理解できなくて海外のサウンドドライバの使い方がわからない orz
199
(1): 2005/06/09(木)15:55 ID:NH9D76hP(1) AAS
>>198
PCMでいいんだよね?なら足し算
効果音をどうしたいかだよねぇ。
ファミコン時代なんかBGM使っているチャンネルで効果音を割り込ませて鳴らしてたな。
200
(2): 2005/06/09(木)16:40 ID:tx6qK9Bb(1) AAS
>>199
そんな簡単な方法でいいので…けどそう簡単でもないか
足し算結果をどっかに置いといてDMA転送元にそこを指定でいいのですかね?
まぁとりあえずRUNしてみます
201
(1): 2005/06/09(木)17:35 ID:Cuk1n6wp(1) AAS
>>200
オーバーフローチェックをどうするかだけ注意
たとえば4重合成するのなら、最初から1/4音量データを用意するとか。
シフトしてから加算でもいいけどな。
202: 2005/06/09(木)18:04 ID:txnsDHBq(1) AAS
>>201
signed shortで合成しておいて、後で一括してクリッピングしてもいいかもな
203: 2005/06/10(金)00:05 ID:3crWFAgA(1) AAS
>>200
外部リンク:belogic.com
204: 2005/06/10(金)14:55 ID:YPq61nfL(1) AAS
すっごい素人なんだけどBGMって割り込みで鳴らすの?
205: 2005/06/10(金)17:17 ID:sKosQ+eo(1) AAS
音用のメモリがあるからそこにDMA転送で入れる。
DMAはTimer割り込み(正しくはFIFOとか言うのが割り込んでるらしいが)で送らせるように設定しておく。
ついでにビットレートはTimerの設定速度によって決まる(なんか勝手にゲーム本体がそうする)からTimerで使う値を多く取れば
低解像度(ビットレートが少ない低音質の音楽ファイル)の音が鳴る(高音質のはむちゃくちゃ遅くなる)
だから使いたい音のビットレートによってTimerに入れる値は変わる。
…らしい(所詮勘でプログラムしてるから理解していない厨wwww
206: 162 2005/06/13(月)00:15 ID:WeLHi+pU(1) AAS
チラシの裏:
newlibのmake,make install成功。
上手くいかなかった原因はdevkitadb/binがPATHの検索順で自分でコンパイルしたarm-elf-**より先にあったためと思われる
対処方法としてdevkitadb/binをPATHからはずしてbinutils,gcc,newlibを作成

ありがとう、みんな
207: 162 2005/06/20(月)10:45 ID:nuWkCFET(1/4) AAS
#mallocから逃げてるオイラ

memcpyの代わりにDMAを使ってローカル変数配列をVRAMに描くことで最適化できないかと思い
for(行数分){
// memcpy();
  DMAmemcpy(); //中でDMAをつかってる
}

こんな感じでDMAをつかってmemcpyしたら速くなるかな?とおもって作ってみました。
省4
208
(1): 2005/06/20(月)11:08 ID:eN4g0qsd(1/2) AAS
DMAmemcpy();の中身か、せめてパラメータを書いてくれないと全く要領を得んな。
・memcpyと違ってDMAの転送サイズ指定は2バイトか4バイト単位
・表示期間中はDMAでVRAMへの転送は出来ない
・そもそもDMAの設定方法が間違ってる
このどれか。
209: 162 2005/06/20(月)12:03 ID:nuWkCFET(2/4) AAS
>>208
さんくす
たぶん、「 表示期間中はDMAでVRAMへの転送は出来ない」これだろうなぁ
1番はエラーチェック入れてるし、3番は多分間違ってない、と思うし
描画タイミングなんて考えたこと無かった

う〜ん、イベントループで描画用イベントをつくり、描画はそちらにまとめないと駄目だなぁ・・・
210: 2005/06/20(月)13:03 ID:eN4g0qsd(2/2) AAS
それにしても動かないってことは無いだろ。
数ミリ秒ロックかかるだけなんだから。
211
(1): 162 2005/06/20(月)13:29 ID:nuWkCFET(3/4) AAS
動かない、ってのは誤解させたか
正確に言えば、その部分の描画処理をしてくれない、かな
四角く塗りつぶす関数
for(y行分){ for(x幅){ VRAMへ書き込む } }

for(x幅){ローカル配列に書き込み}
for(y行分){ローカル配列をDMAmemcpyでVRAMへ}
省3
212
(1): 2005/06/20(月)13:56 ID:3V9hgg4C(1) AAS
>>211
DMA busyチェック/終了確認してるかい?
同じDMAで転送中に更に転送開始したら、中断する。
213
(1): 162 2005/06/20(月)14:12 ID:nuWkCFET(4/4) AAS
>>212
それだ、やっと頭の中でつながった!サンクス
214: 2005/06/21(火)01:26 ID:tMrqvmNm(1) AAS
>>213
で、何作ってんの?
AVGサンプル(DMA使用)ならゲ研にあるよ
215: 162 2005/06/21(火)17:36 ID:2bu24OLk(1) AAS
一番の目標は、組み込み向け開発ノウハウの勉強
それも、単純なLEDだけの世界じゃなくて、ある程度GUIがある組み込み。

でもそれだけじゃ漠然としすぎてどこから手をつけたらいいか迷うので
今作ってるのはパズル。「数独」ってしってる?
これならグラフィックやシナリオで迷わなくていい。

次はマインスイーパかソリティアでもつくろうかなって思ってるところ
216
(4): 2005/06/25(土)01:31 ID:e5faRMhJ(1) AAS
ちょっと質問です。
自分もGBAで何か作ってみようと思い、まず画像を表示する程度のものを作りました。
が、エミュ(VisualBoyAdvance)上では問題無く動くのですが、実機に転送すると動きませんでした。
試しに、外部リンク:j-gbadev.hp.infoseek.co.jp にあるサンプルを転送してみましたがやはり動かず。
外部リンク[html]:optimize.ath.cx のパズルは動作しましたが、逆にこちらはエミュ上で動かず。
実機で動作させるには何が必要なのでしょうか。
217: 2005/06/25(土)08:06 ID:BG1w9J0p(1/2) AAS
>216
パズルの方はフラッシュに焼いて実行するなら、
makefile の LDFLAGS の -Ttext=0x02000000 を
-Ttext=0x08000000 にするんじゃない??
218: 2005/06/25(土)08:09 ID:BG1w9J0p(2/2) AAS
誤:パズルの方はフラッシュに焼いて実行するなら
正:パズルの法はエミュレータやフラッシュに焼いて実行するなら
219: 2005/06/25(土)14:05 ID:8t7IF5k/(1) AAS
optimizeのパズルサンプルをエミュレータで動かしたい場合は拡張子を.mb.gbaにすればいい。

>>216が作ったのはたぶんROMに焼いて動かすためのイメージだから
実機で動かすにはFlashROMを買ってくるか、
実機のRAMに直接転送して動くように作り直す必要がある。
プログラム研究所のサンプルも同様。
220: 2005/06/25(土)16:01 ID:IKOdqJ6y(1) AAS
>>216
実機で起動するときNINTENDOロゴがちゃんと表示されるか?
表示されていなければヘッダを修正する必要がある。
221: 216 2005/06/25(土)21:10 ID:aa82OW6G(1) AAS
やはり原因は0x08000000 -> 0x02000000でした。
無事実機でも動きました!

皆様色々ありがとうございました。
222: 2005/06/26(日)02:14 ID:YOehEJSa(1) AAS
const int __gba_multiboot;
これもあったなあ
223: 2005/06/28(火)09:12 ID:lhzk0oNN(1) AAS
外部リンク:www.bidders.co.jp
224: 2005/07/05(火)22:13 ID:ioT9KUEt(1) AAS
とりあえず環境落として始めてみたんだが、
ゲーム作るためのライブラリを作るだけでおなかいっぱいになりそうだ_| ̄|○
225: 162 [age] 2005/07/07(木)22:26 ID:IdWw8xni(1/2) AAS
一応動くようになりました。
ちゃんと動くかな?
質問に答えてもらったお礼です。

外部リンク[lzh]:up.isp.2ch.net
外部リンク[cgi]:up.isp.2ch.net
226: 162 [age] 2005/07/07(木)22:28 ID:IdWw8xni(2/2) AAS
操作方法は
 ・selectでメニュー
 ・Aでセルの数字が増える
 ・Bでセルクリア
 ・十字キーで移動
です
227
(1): 2005/07/12(火)03:52 ID:gP0YBH4B(1) AAS
すみません。ど素人な質問なんですが、できればお答え下さい。
GBAのプログラムはだいたいどの位までの、データを実機で使えるものでしょうか?
個人的に、電子辞書+単語帳代わりにデータを写して使いたいのですが、
200Mbyteぐらいいけますか。また、基本的な組み込み系のプログラムはまるで触ったことのない人間なのですが、
C言語とC++をちょっとさわったくらい(ベターC程度にしか使えません)でも扱えるような物でしょうか?

あと、起動時間は10秒ぐらいでしょうか?
228: 2005/07/12(火)04:50 ID:vNvKsOE9(1) AAS
ROMが最大32Mbyte RAMが256kbyte+32kbyte
言語はCが使えれば充分 C++はベターCで全然よし
起動時間はメーカーロゴが入るので5秒くらい メーカーロゴを含めなければ一瞬

ビットマップにフォントを表示できるようになれば簡単な辞書ならすぐ作れると思う
ただし容量が少ないのでデータを厳選するか きつめに圧縮するかしないと
いけないだろうな
頑張れや
229: 2005/07/12(火)23:31 ID:mrySnnDH(1) AAS
>>227
キミの好きそうなprintf()もscanf()もないからやめとけ
素直にザウルスか電子辞書買っとけ
230
(1): 162 [age] 2005/07/13(水)14:04 ID:QdmkZAfq(1) AAS
printfくらいは自作してもいいけど入力どうしようかな?
ケータイみたいな仮想キーを作ってそれで入力する、かなぁ
これなら12この仮想キー(ボタン?)で済む

「ホームランド」みたいな入力システム作れればいいんだろうけど、ムズカシイ・・・
231: 2005/07/13(水)18:15 ID:D6iTUR2S(1) AAS
>>230
RとLボタンで文字種変更、十字キーで文字変更(右左で子音・上下で
母音変更とか、ケータイ方式とか)でAボタンで決定、Bでクリアとか。
SELECTでエディットモード抜けて十字キーかRLボタンでカーソル移動とか。
232: 2005/07/13(水)19:05 ID:wV9jl+rf(1) AAS
どうせやるならNDSでやったほうが良いと思う。入力デバイスの問題で。
実機で動かす方法は知らんが。
233
(1): 2005/07/13(水)21:26 ID:oLrfzE3q(1) AAS
ゆうていみやおうきむこうでいいやん
234: 2005/07/17(日)21:50 ID:ATGoGOE4(1) AAS
>>233
ドラクエですな。
235
(2): 2005/07/30(土)16:31 ID:rH8bjVXA(1/2) AAS
とあるラベルを4バイトアラインで配置したいときってどうするんでしょう?

今は配置したいラベルの前に、
asm(".align 4");
って入れているんですが、何か違うような、もっとすっきりした方法があるような気がします
236: 235 2005/07/30(土)16:42 ID:rH8bjVXA(2/2) AAS
>>235
ごめん。上の方法、正しくリンクできなくなります。
誰も使わないと思うけど、念のため…
237
(1): 2005/07/30(土)20:02 ID:XQpHvBfH(1) AAS
>>235 gcc なら __attribute__((aligned(4))) とか
238
(1): 2005/08/01(月)02:57 ID:dbKAP3Zw(1) AAS
>>237
できました。ありがとうございます。

それはそうと、gccでラベル全てをアライン付けるオプション試してみたけど、何も変わりませんでした
devkitのこれとは違うんでしょうか。自分が意味を取り違えてる可能性のほうが高いと思うけど。
239: 2005/08/01(月)08:54 ID:4ELQCf+V(1) AAS
>>238 そんなオプションあったっけ?
240: 2005/08/01(月)09:19 ID:FTLI7gLF(1) AAS
無いはずだが。何かと勘違いしてるんじゃないか?
1-
あと 762 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.837s