[過去ログ] ゲームボーイアドバンス(GBA)非公式開発 Part2 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
463(1): 2006/02/21(火)05:42 ID:uuzcpC5q(1) AAS
ボタンを押した瞬間を取得したいんですが
下記のソースがうまく動作しません。
何がいけないかわかりますか?
//ボタンに関する列挙型
typedef enum{UP,DOWN,RIGHT,LEFT,A,B,L,R,START,SELECT} KEY;
//スタティックグローバル変数
static u32 sgKey; /* キーセンス */
static u32 sgKeyhit; /* キー押した瞬間 */
//メインループの頭でボタンの状態を一括取得
void UpdateKeySense(void)
省18
464: 2006/02/21(火)07:28 ID:GiHvck/8(1) AAS
書き込みできるかテスト
465: 2006/02/21(火)08:22 ID:BSGVJJY5(1) AAS
>>463
それぞれの変数の値を出力してみろ
466(3): 2006/02/25(土)15:23 ID:LRNrnoNa(1/4) AAS
ある構造体に汎用的な配列を用意し、状況によって汎用配列部分に
別の構造体をキャストすることでいろいろ使い分けられるように
したいんですが下記(分けて書き込みます)のようなソースがうまく動きません。
「w->cnt = 5;」等の部分で値を代入しているのに正しい値がはいりません。
VC++では正しく代入できるようです。なぜだかわかりますか?
仕様なんでしょうか?
467(1): 2006/02/25(土)15:24 ID:LRNrnoNa(2/4) AAS
typedef struct{
u8use;/* 動作フラグ */
u16no;/* 自分自身のタスク番号 */
u8 phase;/* 動作フェーズ */
u8wrk[48];/* 汎用ワークエリア */
void*entryfunc;/* 実行関数 */
}TSKWRK;
TSKWRKts[10];/* 実体 */
/* 構造体 */
typedef struct{
省15
468: 2006/02/25(土)15:25 ID:LRNrnoNa(3/4) AAS
変数の型と変数名がつながっているのは書き込み時に
つながってしまったもので実際には正しく記述しています。
469(1): 2006/02/25(土)16:32 ID:ChwfFfDn(1/3) AAS
>>466-467
アライメントの勉強をしてみよう。
外部リンク:www.google.co.jp
この場合は u8 のアライメントしか持っていない wrk に
u16 としてアクセスしていることが原因。
GBA の CPU である ARM ではアライメント違反した書き込みはできない。
VC++ で正しく動作するように見えるのは CPU が違うから。
x86 系ではアライメント違反した書き込みはパフォーマンスが落ちるだけ。
470(2): 424 [age] 2006/02/25(土)17:25 ID:T5T+YA0I(1) AAS
こういう使い方をしたいときはunionを使うんだっけ?
使ったことないけど
471(1): 2006/02/25(土)17:28 ID:JLoubNl/(1/2) AAS
>>466
>>469を踏まえてこれでもう一度テストしれ
typedef struct{
u8 use;/* 動作フラグ */
u16 no;/* 自分自身のタスク番号 */
u8 phase;/* 動作フェーズ */
u8 wrk[48];/* 汎用ワークエリア */
void *entryfunc;/* 実行関数 */
} __attribute__ ((packed)) TSKWRK;
typedef struct{
省5
472(1): 2006/02/25(土)17:30 ID:JLoubNl/(2/2) AAS
>>470
この場合unionは全く関係ないし的外れ
473: 2006/02/25(土)17:32 ID:+k+s2zkt(1) AAS
メモリをダンプしてみろ
それからだ。
474(2): 2006/02/25(土)17:38 ID:ChwfFfDn(2/3) AAS
>>470,472
union 使ってアライメント確保する方法がある。
Cだとコレぐらいでいいんじゃないかな?
union
{
u8 size_holder[48];
void* pointer_align;
long long integer_align;
long double floating_point_align;
} wrk;
省5
475(1): 2006/02/25(土)18:20 ID:LRNrnoNa(4/4) AAS
みなさん、アドバイスありがとうございます。
アライメント自体の概念はわかりました。
実用についてはまだよくわからんのですこし調べてみます。
>>474
unionのサンプルの意味は
u8でサイズを決めつつ、何のデータを扱ってもいいように
void型のポインタと最大サイズの整数と浮動少数で
共用体を定義しているということでよろしいでしょうか?
あと、私が書き込んだソースを下記のように修正したら問題なく
動くようになったんですがこのまま使い続けるのは
省2
476: 474 2006/02/25(土)18:33 ID:ChwfFfDn(3/3) AAS
>>475
サンプルの意味はそういうこと。
union 自体のアライメント要求がメンバの中で最大の物になることを利用したもの。
GBA のハードウェアで4バイト以上のアライメントを要求するものは
無かったと思うので、 GBA に限った動作だけを考えれば
u32 での置き換えで問題ないと言える。
477: 2006/02/26(日)00:08 ID:WfB5cmW7(1) AAS
関係ないけど
GBAって電源切ったとき画面の色が黒でなく白なのはなんでだろう?
478: 2006/02/26(日)00:10 ID:vz2qCRmn(1) AAS
白黒液晶ってのは黒色の文字を表示するものだから背景が黒かったらどうしようもないと
ここまで書いてGBAが白黒ではないという事実を思い出した
479(1): 2006/02/26(日)07:47 ID:e+6sQVje(1/2) AAS
>>381 ノベル制作ツール「のべ〜る」で
VisualBoyAdvanceでプログラムスタート直後に音割れする現象の対策
*TOP:
#play_wav 1 music0.bin
#page
■セロ弾きのゴーシュ;
ゴーシュは町の活動写真館でセロを弾く係りでした。#w ;
けれどもあんまり上手でないと評判でした。#w ;
……
スクリプト開始のしょっぱなに何より先に#play_wavし、
省6
480(1): 479 2006/02/26(日)07:53 ID:e+6sQVje(2/2) AAS
のべ〜るは>>380
でした。失礼。
481: 466 2006/02/26(日)15:39 ID:UpVKMws2(1) AAS
構造体のキャストで質問したものです。
とりあえず、みなさんのおかげで
スプライト制御が一段落したんで
経過をご報告します。
外部リンク[zip]:2ch-library.com
482(3): 2006/02/27(月)22:06 ID:KqQE3G30(1) AAS
くだ質で大変申し訳ないのですが、
C++でGBAのプログラミングはできないのでしょうか?
様々なサイトをググってみたのですが、すべてCでの開発で
C++を扱っているサイトを全く見かけません。
よろしければご教授をお願いします。
上下前次1-新書関写板覧索設栞歴
あと 520 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.022s