ゲームボーイアドバンス(GBA)非公式開発 Part2
■ このスレッドは過去ログ倉庫に格納されています
好きにやりゃいいよ
誰にも制約されないのが非公式開発のいいところだろ >>103
>>103
「(一応)できるけど(危ないから)やらない方がいい」という解釈だと思われ。
http://www.nintendo.co.jp/n08/playan/garage/index.html
>「プレイやん」を買ってくれた人にオマケをあげる...
>ダウンロードして「プレイやん」上で遊ぶ、その名も「ガレージゲーム」。開いているガレージをクリックしてドンドン持って帰ってね!
>毎週金曜日に1つずつガレージが開いていくヨ。お楽しみに。
>
>※ゲーム内容は?オタノシミ...
>※「ガレージゲーム」を遊ぶには「プレイやん」が必要。今すぐ買ってネ!
ひょっとすると、ひょっとしますか? >>105
うはw任天堂なにやってるんだwww
ひょっとする予感! うわ、これを見てプレイやんが欲しくなった。
ひょっとして、ひょっとしてくれ。 ジョイキャリーランチャーみたいな感じではないかと。
昔GBでハドソンがKISSだかゆーのやってたの思い出した。 ガレージゲームはasf形式だな。そのまま動画として再生できる。
ひょっとしたら、ひょっとした考えはダメか? ガレージゲームの名前がプレイやんのROMの中に書き込まれてるみたい・・・
.asfでコンテナにしてるみたいだな。
しかし、ゲーム画面小さすぎだよ…orz 名前だけじゃなく、ファイルサイズとかチェックサムとかも
ROMに書かれていたら、ほぼお手上げだな。 MODE3でバックバッファ無いから、WORD配列[240*160]作ったけど、
VRAMに転送しても表示されない...。 配列全体に単色で塗りつぶしてもダメ...。
他の色も混じってて(横線)バグってる。
その配列にconst修飾で、画像データ入れたら綺麗に表示された。
そもそもバックバッファ作ろうとすること自体不可能なのか。。。 症状出ているサンプル上げてもらえますか?
それとも適当なサンプルアップしますか? IWRAM 32kb
Mode3VRAM 240x160x16bit 76800byte
グローバル変数はIWRAMに確保される。EWRAMはmallocなり自流ポインタアクセスなり。
連続書き込み失礼。
const修飾するとROM領域にマッピングされる。
広大でリニアなメモリ空間のあるWindows環境と比べて、メモリが不足してないか、分断してないか、どの領域を使い分けるか、領域外アクセスしていないか、を常に頭に入れておく必要がある。
個人的には面倒くさいのでEWRAMにmallocで終わり。ちなみにEWRAMは256kb。
おぉ、ありがとうございます。
GBA初心者なものでメモリ配置とか無視してました。
というより、知らなかっただけなんですが。
256kb以内なら良いと思ってたんですが、とんでもない間違いだったと。
でかいマップを扱うときに
うまく切り替えて相対表示させるいい方法ありませんか 32x22(240x160+上下左右隠蔽8x8分)のマップを表示して見えない部分を書き換える。
8x8以下の微動分はオフセットでコントロールする。
具体的に右に動く(左にスクロールする)時は、全体を1map(8x8)分をDMAなりCPUSetなりで左にコピーして右端一列を書き換える。
上下左右一端は見えない領域だから無限マップのように見える古典的手法。
GBAはファミコン、PCEクラスの使い古されたテクニックが使えるので古い文献を当たってみるのもいいかもしれない。
画面一杯でない、CPUが有り余っている、同時に使うキャラクタパターンが異常に多い、不定形or生成キャラクタを使う、前後関係が複雑(3面以上?)、8x8の倍数以外…
めんどいからMODE4でもいいんじゃね?
>>122
ttp://j-gbadev.hp.infoseek.co.jp/cgi-bin/gba_bbs/gba_bbs.cgi?mode=log&no=836
ttp://j-gbadev.hp.infoseek.co.jp/cgi-bin/gba_bbs/gba_bbs.cgi?mode=log&no=837
ttp://j-gbadev.hp.infoseek.co.jp/cgi-bin/gba_bbs/gba_bbs.cgi?mode=log&no=838
WINDOWSの富豪的プログラムに慣れ親しんでしまってて、
高速化に鈍感だったのを思い知らされる...。GBAに。
というかPCじゃ速すぎてそうならざる得ない所が痛い。 ちょっとまて。
2000とxpの方法が書いてあるだけでそんなことは・・・。
ためしてみるから早まるな。 中間報告だが、
CMD.EXEが98SEになさそうだな?
おそらく別の方法を探すしかない。 8メガのほうは展開されないので諦める。
rar形式のほうはOKだったが、
まだできないんだが。
ndslibのinstallで詰まる。
神が降臨するのを待つしかないか? >>134
MS-DOSプロンプトでいいんでない?
98SEならcommand.exeだったと思うけど make書き換えでなんとかなりそうですか?
ちょっとやってみます。 俺の気のせいだったのかも。
template.nds.binが生成されたということは成功なのかもしれん。(←かなり疑問が残る。)
Win98SE
疑問とは
install.bat実行中に
YESかNOと聞いてくるはずのところで
ディレクトリの指定が違います。が6行でて終了。 というかすでにエミュレータの動作環境が満たされてないっぽい。 エミュレータが関連付けに対応してない(´・ω・`)ショボーン
スプライトサンプルはなんとなくわかるけどbmp表示どうやってるんだろ
bmpから変換したっぽい.cソースが見当たらん 研究所のページによると
画像のフォーマットはGBAと同じらしい。 DSのAction Replay、セーブデータは読み書きできるみたいだけど
ROMのほうは読めないのかな? ndsdev2.2.6
サンプルをmakeしたものを実行しようとするとエミュレータが落ちるよ(´Д⊂グスン
漏れの環境に何か問題があるんかな・・・ …即解決。
2D_Example_davrなんだけど、
StartUp Guideを読んだら、arm9.bin(エミュ用の?)が実行ファイルだったよ。
カレントに出力されたtemplate.ds.gbaを実行しようとしてたよ…
arm7とかbootとか絡めてる辺り、カレントに出力されたものは実機用なのかな。
はあっ!!スレがまだ生きている!!
というかarm9が実行ファイルだったのかぁっ!! ttp://www.nintendo.co.jp/n10/seminar/index.html
DSのソフトが作れる・・・都合が合えば行ったのに >>150
任天堂ゲームセミナーは相当狭い門ですぜ? >>83
コンパイルが出来ん・・・
% ./configure -C arm7tmdi -S evaluator_7t
だけじゃいけないんだよな・・・
-Pも設定しないといけないしコンパイラ設定も変更しないといけないんだよな・・・
わからん・・・ 初心者過ぎて申し訳ないけど、
VisualHAMは支援ツール?これのみでコンパイルは出来ないの?
DevkitAdvanceは入れないとダメ?
コンパイル出来るぞ。
プロ研でDevkitAdvanceの導入を説明してるのは、IDEだけ使いたかったからじゃねーの。
HAM使うと最初にロゴ入っちゃうし。 >>154
回答、情報ありがとう。
とりあえず環境の構築がんばってみます。
機会があればまた宜しくお願いします。 なんで動かんの?と悩んでたんだが、リンク時のbssアドレス指定ミスか・・・
IWRAM領域を指定してたら足りなくなるよなぁ
質問なんだけど、スタック領域はどこに割り当てられるの?
このあたりの指定はどうやってするの?
♯私はIDE、ソースデバッガとしてVisualStudioを使ってます
♯VisualBoyAdvanceとは交信できないけどね。
♯Insightデバッガは使い方がわからん >>156
ttp://www.geocities.co.jp/SiliconValley/5604/tech/EmuOnConsole.html
まず2.2.2を読んでね
DevkitAdvanceの場合はインストールしたフォルダのctrls/lnkscriptsに
指定が書いてあるよ。 今日から1ヶ月以内にGBAでインターネットができるようなソフトを作ろうと思うのですが、
遠隔操作ソフトを使ってパソコンから画像を発信してGBAではマウスの操作と画像を読み込むシステムにしようと思っているのですが、
なかなかよいソフトが見つかりません。もし何かよいソフトを持っている方がいたら教えて下さいお願いします。
まずは>>158を日本語に訳してくれる有志を募ろうか まあ、そこまで言わなくても一行の文章を短く終わらせて書けば。 memsetは使えてるっぽいけどsprintfは使えないのかな?DevkitAdvance
-nostdlib ってどういう意味だろ?
最適化は面倒だからパスしようかな、とりあえずの目標はクリアしたり・・・ このまったりとした流れなら言えそうなので質問、音楽鳴らそうと思ってダイレクトサウンドについて調べた
C言語ファイルでデータを記述するものとオブジェクトデータでデータを記述するものがあるらしい
容量的にはオブジェクトデータの方が軽くなるらしいので使おうと思ったがC言語ファイルのデータを読むサンプルしか見つからない
pcmconvでコンバートしその後オブジェクトデータを出力するらしいbin2oを実行しても元ファイルに非常に似たファイルが出てくるだけです
その後調べてみたところリンカーの辺りで結合するらしいのですが、分からない事がいくつか出てきました
どのようにして結合すれば良いのでしょうか?
またデータがどこにおいてあるのかどうやって調べれば良いのでしょうか?
一番の問題としてポインタすら完全には理解できていない人の手に負えるものでしょうか?
開発環境はDevkitAdvanceのバージョン4です >>163
ヒント:__iwram_overlay_lma (u8 *)(&__iwram_overlay_lma)
これですか?
宣言の後にこれで読めると言うのは分かりました。
同じ所でファイルそのものをバイナリで結合していたのですが
こんな事をやっても大丈夫?と言うかこれが普通なのでしょうか?
(とりあえず確めてみてだめだったらもう一度ヒントもらいに来ます
>>164 有難うございました __iwram_overlay_lmaは生のデータを後から追加で結合したいときだけに使え。
.oを作れるならリンクしたほうが確実だぞ。リンクの仕方は分かってるのか?
bin2o hoge.bin hoge.o !hogeでhoge.oを作ったとして
Cから使うにはextern const unsigned char hoge[];と宣言するだけだ。 リンクの仕方もわかってません
makefile.txtに色々書きこんでバッチ処理の時に一緒に読み込ませてるのはわかるので
とりあえずググッていくつかの.o読み込んでるサンプル眺めて来ます
ついでにC言語ファイルでは音が出せました
けど割り込みで失敗します
研究所の割り込みのソースのブランクをTIMER0に変えるだけでは駄目なのでしょうか? リンクの仕方が分からないようなら書こうと思ったけど、調べるんならいいや。
>研究所の割り込みのソースのブランクをTIMER0に変えるだけでは駄目なのでしょうか?
TM0CNTの割り込みフラグは立ててるか? >TM0CNTの割り込みフラグ
それだ!
タイマー開始のところの数字弄ったら解決できました。有難うございます。 やっぱり最適化してます
プログラムをIRAMに置かない場合、thumb用でコンパイルしないといけないんだよな?
objdumpで逆アセンブルしてみたら4Byte間隔で0x0800****番地に配置されて
いるのはARM用にコンパイルされてるから?
#リンク時に -Ttext 0x08000000 としてます
コンパイル時の指定はどうすればthumbでコンパイルできるの?
-bかな?machineの指定はどうすればいいんだろう・・・ >>170
つ -mthumb-interwork -mthumb
指定しない場合はARM
ちなみにARMだろうかTHUMBだろうが動くんじゃないかな。 ありがと>>171
いろいろ調べてみたけど、みんな気にしてないのかな?
たいてい指定無しでmakefileつくってる。-mthumb-interworkだけで
> ちなみにARMだろうかTHUMBだろうが動くんじゃないかな。
うん、いまのとこ何も指定しなくても(ってことはARMか)でも動いてる
いままではCのプログラムとしては最適化してきたけど
GBA用としてはまったく最適化してないの
つーか、GBAの機能はビデオバッファとその指定(MODE3,BG2限定)、キー入力の
#define KEYS *(volatile u32*)0x04000130
しかつかってないや・・・
みんなすごいね、割り込みとか、タイマーとか、スプライトとか、音とか・・・ typedef const unsigned char u8;
u8 foo[] = { }
っていうデータの音楽のファイルを馬鹿でかく(1.4MB)してコンパイルしよう
としたら
Virtual memory exhausted: Permission denied
って出るんだが…これってメモリに入りきらないって事?
普段はROMに置きっぱなしで必要な時だけ読み出すとかで解決出来るのであればその解決方を誰か教えて頂けないでしょうか? >>173
Cのソースがでかすぎてコンパイル出来ねえよってこと。
コンパイルオプションに-O0(マイナスオーゼロ)をつけるか
bin2oで出来たオブジェクトファイルを直接リンクするか
ソースをasm(.s)で書け。 オブジェクトファイルのリンクが出来ない…orz
研究所のWav2gba_guiで.oファイルを作り
makefileの
OFILES += main.o \
bgm01.o
ってやってるんだが何度やっても変数がないって罵られる
makefileが悪いのかそれとも他に原因があるのか…
誰か初心者が陥っているであろうミスを教えてくれ 自己レス
とりあえず原点回帰ということで
Dark Fader's site
のwav2gba bin2oで.oファイル作ったらコンパイルできた
今度は音がならない… またも自己レス
宣言をu16にしたら音は出たんだがCソースのデータでやってた時と比べて激しくノイジー
次から次に問題が出てくるんだが自分なんか間違ったやり方でやってるんだろうか? もう何が原因だったのかわからない。
もう一度u8に戻しても音再生できたしorz
ついでにノイジーになったのはシンクロナイズ外してたからでコンパイル時のミスではありませんでした
まる一日掛けて駄レスしまくってスマソ 質問です
memcpyでローカル変数の配列データをVRAMへデータをセットしようとすると
上手くいく時となんか行かない時が規則的に現れるんですが
原因はなんだと思いますか?
現状は:
配列データは多分予想どおりのデータが入ってる。
#memcpyを使わないでforループで書き込むと上手くいってる
objdumpでみると多分/arm-agb-elf/lib/thumb/interwork/libc.aの中のmemcpyをリンクしている
ヒントでもいいからプリーズ 追加:
memcpyの座標が1dot x方向に増えた座標へcopyすると上手くいく
#逆に上手くいってたものが上手く色を塗らなくなった
どう変かといえば、白が薄ピンク色になる
#オセロ盤で本来なら全部白いマスのはずが白いマスとピンクのマスが交互に並んでしまう あ、もしかして書込み先が4Byte境界じゃないと上手く動かないのかな? >>182 サンクス
ここのページの
ttp://home.att.ne.jp/blue/moonlight/uraha/gbadevmemo.html
真ん中少し上の「メモリアクセス速度について」の
VRAMのwriteの書き込み制限(8bitでは×)のことかな?
こんな制限あったんだ、なるほど
wmemcpyを使えばいいんだろうか? http://www.work.de/nocash/gbatek.htm#memorymap
Address Bus Width and CPU Read/Write Access Widths
VRAMって使いづらいよね。 ドット単位でなにかしたいのなら
仮想VRAMに書いてドカッとコピーするか、
奇数偶数で演算を変えればいいだけだが?
もっともGBAはそういうアーキじゃないけどな VRAMは書き込みが遅いので、
mallocでとっておいて、
そこに書いた後DMA転送するのがいいです。
バイト単位で書き込みできるしね。
外部ファイルから取り込んだビットマップデータとかならDMA一発だしな。 mallocを使うのってsbrkを移植するの?
newlibを移植すればいいのかな?このあたりのことはよくわからん
この辺に書いてあるかな?
C/C++による組み込みシステムプログラミング
ttp://www.amazon.co.jp/exec/obidos/ASIN/4873110130/
>>188
#include <malloc.h>
u16* pseudoscreen;
if ((pseudoscreen = malloc(sizeof(u16) * ScreenWidth * ScreenHeight)) == NULL) while (1) {};
とか。 mallocって前もって準備しなくても使えるの?devkitadvance使ってます
PCでmallocの使い方はわかるけど、GBAの開発でそのまま使えるとは思わなかった
manでみるとsbrkのサポートが必要みたいだけどこれはどうなってるの?
使えるなら質問
mallocで確保されるメモリはIWRAM領域から確保されるの?
EWRAM領域?bssで指定された領域?グローバル変数との使い分けは大丈夫なの? 実際にmallocしてアドレス確認すりゃいいと思うんだが それよりはlnkscriptとgccの吐くmapファイルを見比べるべきだと思うが。
crt0.Sなんか見ても役に立たんぞ。 悩むな
u16 buff[ScreenWidth * ScreenHeight];
これでおっけー ヒントがあるかと思ってnewlibのコンパイルに挑戦
makeは出来たっぽいけどmake installが上手くいかん
でもlibc.aは出来たし(同じとは限らんが)、malloc等標準ライブラリのソースも
付いてたのはうれしい発見だな
#おかげでmemcpyが8bit毎にコピーしてるのが確かめられた
ふーん、libc.aって***.oをarで固めたものなんだ。
やっぱり組み込み側の知識が足りんなぁ
参考資料:
Interface2005年1月号フリーソフトウエア活用組み込みプログラミング
第4章 C標準ライブラリ(newlib)を使ってみよう >>196
おいおい、ゲーム製作とは違うところに逝ってるぞw 質問が途切れたみたいなので質問
PCMの合成はどうすれば出来るのでしょうか?
ゲーム製作時にどのチャンネルはBGMとか決めておくものなのでしょうか?
(英語の説明書が理解できなくて海外のサウンドドライバの使い方がわからない orz >>198
PCMでいいんだよね?なら足し算
効果音をどうしたいかだよねぇ。
ファミコン時代なんかBGM使っているチャンネルで効果音を割り込ませて鳴らしてたな。 >>199
そんな簡単な方法でいいので…けどそう簡単でもないか
足し算結果をどっかに置いといてDMA転送元にそこを指定でいいのですかね?
まぁとりあえずRUNしてみます >>200
オーバーフローチェックをどうするかだけ注意
たとえば4重合成するのなら、最初から1/4音量データを用意するとか。
シフトしてから加算でもいいけどな。 ■ このスレッドは過去ログ倉庫に格納されています