約 285,175 件
https://w.atwiki.jp/tdd1tessa/pages/51.html
Oracle Database11gで利用可能なメモリーの管理方法の確認。 自動メモリー管理 自動メモリー管理は、Oracle Database11gから新たに追加された機能である。自動メモリー管理ではOracleサーバーが使用するメモリの合計サイズを、データベース管理者がMEMORY TARGET初期化パラメータで指定すると、自動的にSGAとPGAの間で最適なサイズに配分される。配分されたメモリーは、自動共有メモリー管理及び自動PGAメモリー管理により、さらにSGAの各コンポーネントおよび個々のPGAサイズが自動的にチューニングされる。自動メモリー管理はメモリーを管理するもっとも簡単な方法である。 【重要】 Oracleサーバーが使用できる最大メモリーはMEMORY_MAX_TARGET初期化パラメータで指定する。MEMORY_TARGETパラメータは、MEMORY_MAX_TARGET初期化パラメータで指定したサイズを超えて設定することはできない。 MEMORY TARGET初期化パラメータおよびMEMORY_MAX_TARGET初期化パラメータの値は、EnterPrize Managerの「メモリー・アドバイザ」ページから変更可能である。ページ内の「合計メモリーサイズ」がMEMORY TARGET初期化パラメータに、「最大メモリー・サイズ」がMEMORY_MAX_TARGET初期化パラメータに相当する。 自動メモリー管理を無効にした場合、「自動共有メモリー管理」「手動共有メモリー管理」「自動PGAメモリー管理」「手動PGAメモリー管理」を使用してメモリーを管理する。 自動共有メモリー管理 SGAが使用する合計メモリーサイズをSGA_TARGET初期化パラメータで指定し、SGAの各コンポーネントが使用するサイズを自動チューニングする方法である。PGAのサイズは別途管理する必要がある。 ただし、REDOログバッファは自動共有メモリー管理の対象ではないため、LOG_BUFFER初期化パラメータを使用して個別にサイズを指定する必要がある。 SGA_TARGET初期化パラメータで指定したメモリーサイズから自動共有メモリー管理対象外のメモリーサイズが除かれた後、残ったサイズが自動的にSGA内の次の領域に対して分配される。 共有プール Javaプール データベースバッファキャッシュ ラージプール 先述の通り、REDOログバッファは含まれない。 自動共有メモリー管理で使用するメモリーサイズ(SGA_TARGET)は最大SGAサイズ(SGA_MAX_SIZE)を超えて設定できない。SGA_TARGET初期化パラメータおよびSGA_MAX_SIZE初期化パラメータは、EnterPrize Managerの「メモリー・アドバイザ」ページから変更可能。 手動共有メモリー管理 自動共有メモリー管理を無効にした場合は、SGAの各コンポーネントが使用するサイズを個々に手動で指定する。 SGA内の各コンポーネントのサイズを、以下の初期化パラメータで指定する。 初期化パラメータ 説明 DB_CACHE_SIZE 標準ブロックサイズのデータに使用するキャッシュサイズを指定する JAVA_POOL_SIZE Javaプールのサイズを指定する LARGE_POOL_SIZE ラージプールのサイズを指定する LOG_BUFFER REDOログバッファのサイズを指定する SHARED_POOL_SIZE 共有プールのサイズを指定する LOG_BUFFERを除く各初期化パラメータは、EnterPrize Managerの「メモリー・アドバイザ」ページより変更可能。LOG_BUFFER初期化パラメータは「初期化パラメータ」ページから変更する。 自動PGAメモリー管理 PGAが使用する合計メモリーサイズをPGA_AGGREGATE_TAGET初期化パラメータで指定し、個々のPGAが使用するサイズを自動チューニングする方法。EnterPrize Managerの場合、「PGAターゲット統計」でPGAが使用する合計サイズを指定する。 手動PGAメモリー管理 自動PGAメモリー管理を使用しない場合は、個々のPGAが使用する最大サイズをSORT_AREA_SIZE初期化パラメータなどを使用して手動で指定する。 戻る
https://w.atwiki.jp/metamon/pages/36.html
これは管理人の個人的なメモです。なんのメモかは内緒。 こっちは抄版なのでアクセス制限なし。 メモリ領域WRAM On-board 256KB, 2Wait WRAM In-chip 32KB ポインタ類Stack Pointer 初期値 特別な用途に使われるポインタ SRAM領域 ROM領域RTCで利用される領域 不明 ポケモンデータ ホウエン図鑑 = 全国図鑑マップ 画像データその他・未分類 定数 サウンド設定 タイマー設定タイマー0 その他メモ メモリ領域 ARMなのでhWORDが16ビット、WORDが32bit。x86と異なるので注意。 WRAM On-board 256KB, 2Wait POINTER $02000000 何かの構造体のベースアドレス。初期化@func_0x08000bac(0x02000000, 0x1c000) hWORD +0x0 0x0に初期化 hWORD +0x2 0xa3a3に初期化 WORD +0x4 0x1bff0に初期化 WORD +0x8 0x02000000に初期化 WORD +0xc 0x02000000に初期化 POINTER $020205ac 構造体の配列のベースアドレス? 要素が何個有るか要調査 読み出し@func_0x0800dc40() POINTER +0x0, 0x44, 0x88, 0xcc 個数調査 hWORD +0x3c 読み出し@func_0x0800dc40() POINTER $02022080 構造体の配列のベースアドレス? 要素が何個有るか要調査 読み出し@func_0x080334e0() hWORD +0x000 hWORD +0x100 hWORD +0x200 .... hWORD[$0202267e] シリアル通信の初期化関数func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1)の戻り値が保存される。0だと正常終了 POINTER $020226a0 - $0202272b 0x46*2 (=0x8c) bytes分 0 fill @func_0x0800e0c8() POINTER $0202272c 配列のベースアドレス? 用途不明 byte[$02022798] この値が0xffの場合には func_0x0800dc40()--V-Blankで呼ばれる関数は何もせずにreturnする byte[$020227c8] $020205acにある構造体の配列の1要素を指す値 byte[$020229bd] 読み出し@func_0x080334e0() byte [$02022d08] func_0x08033050 byte [$02022d0c] func_0x0805cdb8 で利用されている byte [$02023d08] func_0x0805cdb8, func_0x08033050 で利用されている POINTER[$020397c8] 構造体のベースアドレス byte+0x15 0を保存@func_0x080b9710() -- ループでボタンを押していないときに呼ばれる関数 byte+0x18 0xffの場合に func_0x080a8964が実行されない@func_0x080b9710() byte [$02039bca] 何かのフラグ addr addr $080f987c POINTER [$0203cc28] 0x0で初期化@func_0x080004d8() [[$0203cc28]] がV-Blankでカウントアップされる。利用方法を要調査 ??? [$02023d70] func_0x0805cdb8 で利用されている。アドレスのオフセット POINTER [$02024140] func_0x0805cdb8 で利用されている POINTER $020229c4 func_0x08033fb0 で利用されているベースアドレス。 byte +0x0 func_0x0803fb0 で0x21が保存される byte +0x1 func_0x0803fb0 で第2引数が保存される byte +0x2 func_0x0803fb0 で第3引数の下位8ビットが保存される byte +0x3 func_0x0803fb0 で第3引数の上位8ビットが保存される WORD [$020229d4] 乱数のシード WORD [$02022c90] [$03002799] 0x2 == 0|| [$02022c90] 0x013f0102!=0 の場合 V-Blankの乱数が進まない func_0x08033050でもなぜか読み出されている func_0x0803340() で bit 5 i.e. 0x20 が立っていないと処理が実行されない 多分、ビット毎のフラグ、意味を要調査 WORD [$02024664] V-Blank用乱数呼び出し回数のカウンタ POINTER $020246f8 構造体の or 配列のベースアドレス [$03005af0] にアドレスが保存されている hWORD +0xe プレイ時間の時間数が入る max 999 byte +0x10 プレイ時間の分数が入る max 59 byte +0x11 プレイ時間の秒数が入る max 59 byte +0x12 プレイ時間のフレーム数が入る max 59 byte +0x13 L=Aモードの判定 2 L=Aモード 読み出し@func_0x080005e4() POINTER $020373b4-$020373d3 データが$085c0c74から0x20バイトコピーされる@func_0x080a1200($085c0c74, arg2, 0x20) POINTER $020377b4-$020377d3 データが$085c0c74から0x20バイトコピーされる@func_0x080a1200($085c0c74, arg2, 0x20) POINTER $02037bb4-$02037c73 0xcバイト, 0x10個の構造体配列のベースアドレス WORD +0x0 0x084fcf98に初期化@func_0x080a183c(offset) WORD +0x4 0x0に初期化?, 共用体? byte +0x8 0x0に初期化 byte +0x9 0x0に初期化 struct {WORD val1, WORD val4, byte val8, byte val9}[16] WORD $02037c74 構造体のベースアドレス、初期化@@func_0x08a1898() WORD +0x0 0x0に初期化 WORD+0x4 0x0に初期化? 共用体? WORD+0x8 0x00100000に初期化? 共用体? WORD [$0203b9fc] V-Blank割り込み中に [$03005ae0]の値がバックアップされている。何に利用されているかは不明 WRAM In-chip 32KB WORD[$03000000] 0xfc0 に初期化@func_0x080003a4() WORD[$03000004] 0x02000000に初期化@func_0x08000bac(0x02000000, 0x1c000) WORD[$03000008] 0x1c000に初期化@func_0x08000bac(0x02000000, 0x1c000) POINTER $03000010 - $0300080f 要素数0x80の構造体のFIFO 初期化は0x80回 0x10のoffsetずつ繰り返す@func_0x08000c48() V-Blank中にDMA3転送で利用される@func_0x08000c80() WORD +0x0 0x0に初期化 V-Blank中にDMA3 Source Addressに代入 WORD +0x4 0x0に初期化 V-Blank中に DMA3 Dest Addressに代入 hWORD +0x8 0x0に初期化 V-Blank中に DMA Countに代入。0x1000 bytes以上だと複数回に分けて転送 hWORD +0xa 初期化箇所不明 V-Blank中で分岐に利用されるフラグ 0, 下記以外 DMA3転送を行わない 1 DMA3転送を32bit, Incrementで行う 2 DMA3転送を32bit, Fixedで行う 3 DMA3転送を16bit, Incremetで行う 4 DMA3転送を16bit, Fixedで行う WORD +0xc V-Blank DMA転送後に0に設定 byte [$03000810] 0x1に初期化@func_0x08000c48()の先頭 0x0に変更@func_0x08000c48()の最後 $03000010 - $0300080f の操作をアトミックにするためのmutex 0 unlock 1 lock func_0x0800c80() V-Blank中に利用 byte[$03000811] 0x0に初期化@func_0x08000c48() $03000010 に対する0x10単位の FIFO の位置 byte [$03000818] - byte [$03000877] 初期化関数 func_0x08001074 で 0x00 に初期化されている。 [$03000818 + offset] の値が func_0x080010cc(offset) を呼び出すと IO Register [$04000000 + offset] にセットされる byte [$03000878] - byte [$030008d7] 初期化関数 func_0x08001074 で 0xff に初期化されている。 割り込みなどの要因で LCD用IOレジスタを変更することが出来ないときに変更対象を溜めておくためのキュー 0xffの時にキューに値がないと判断される 値は 0x04000000 からのオフセット、実際の設定値は $03000818-に存在する キューを全てflushする関数は func_0x08001110() で V-Blankで呼ばれている byte [$030008d8] $03000878 - $030008d7 の読み書き操作をアトミックにするためのmutex 0 unlock 1 lock byte [$030008d9] IME (Interrupt Master Enable Register)設定を保存しておく領域 hWORD [$030008da] IE(Interrupt Enable Register)設定を保存しておく領域 POINTER $030008e0 何に利用されている? 下記に初期化@func_0x0800134c() WORD +0x00 [$0829beac] == 0x0 に初期化。デバッグ用か? WORD +0x14 [$0829beac] == 0x0 に初期化。デバッグ用か? WORD +0x18 [$0829beac] == 0x0 に初期化。デバッグ用か? WORD +0x1c [$0829beac] == 0x0 に初期化。デバッグ用か? hWORD +0x10 0x0に初期化@func_0x08001308() 共用体? hWORD [$03000db8] 0x0に初期化@func_0x0802ee80()の先頭 func_0x0802ef60()の戻り値を保存する hWORD [$03000dcc] func_0x08290708()の戻り値を保存する。RTCなどの処理をしている? hWORD [$03000dce] IMEを保存しておく領域。func_0x0802ed30(), func_0x0802ed48()のセットで使われる。多分一部ルーチンのみ WORD[$03000e08] プレイ中かどうかを判定するフラグ 0 プレイ中ではない 1 プレイ中 2 プレイ中で999時間を超えている WORD[$03000e14] 読み出し@func_0x08086f98() hWORD [$03000f48] 0x0に初期化@func_0x080a27a8() func_0x080a3040([$03000f48])として利用@func_0x080a26b0() hWORD[$03000f4a] 0x0に初期化@func_0x080a27a8() [$03000f4c]== 0x5 [$030074d0 + 0x4] == 0の場合に0が代入@func_0x080a26b0() byte[$03000f4c] 0x0に初期化@func_0x080a27a8() シーケンスが入っておりこの値を元にswich @func_0x080a26b0() [$03000f4c]== 0x5 [$030074d0 + 0x4] == 0の場合に0が代入 i.e. シーケンスをクリア@func_0x080a26b0() byte[$03000f4d] 0x0に初期化@func_0x080a27a8() WORD[$03003020] $0829cea4 に初期化@func_0x0061a4() POINTER [$030031e0] 関数のポインタだが使われる場所不明 0x08009b09 と比較@func_0x08009ad4() byte [$03001a68] 0x2に初期化@func_0x0828fecc(0x2,$030027cc) 初期化のSRAM読み込み時に使われるタイマーの番号 hWORD [$03001a6a] Timer 2 Overflow のカウンタ。実行時 1 減算、 0 になったときに byte [$030075e0]=1 となる POINTER [$03001a6c] タイマー2のレジスタ TM2CNT_Lが保存される hWORD [$03001a76] 0x0に初期化@func_082906d8() RTC読み書きをアトミック処理するためのmutex 0 ロック解除 1 ロック中 WORD $03001b50 - $03002444f 0x200*0x4 = 0x800 bytes 分 $0828d668 - $0828de67 からコピーされている。実行される関数の高速化 func_0x0828d5e4() i.e. V-Blankの関数 からインラインで bx r3(=$03001b51) と飛んでいるので注意。 この中ではThumbとARMが混在している。WRAMなので32bitアクセスだからその方が効率がよい。 $0828d674 - $0828d6c7 ARM $0828d804 - $0828d9fc ARM $0828da24 - $0828dcb0 ARM の関数 func_0x0828da24() hWORD [$03002350] func_0x08005bcで 0x28に初期化 func_0x080005e4(キーの読み出し)で読み出されている byte [$03002354] 0x0に初期化@func_0x080003a4() func_0x08086f98() == 1 の時に 0x1にセット@ループ部分 func_0x080004c4()を呼び出した後 0x0 にセット 何かを行うためのmutex? POINTER $03002360-$03002397ステータスを保存する構造体のベースアドレス POINTER+0x00LCD-V-Blank 内 0x0800077e で実行される関数のポインタとして利用されている。 func_0x0800051c でも関数のポインタとして実行されている 0x0に初期化@func_0x080004d8() $0808653d と比較@func_0x080856f4() POINTER+0x04$0816cc91 に初期化@func_0x08000540($0816cc91)@func_0x080004d8() func_0x0800051c で関数のポインタとして実行されている@ループ [$03005ae8]!=1の場合0x0に変更。$0816cc91は多分セーブデータの存在を見て分岐するためのルーチン POINTER+0x0c0x0に初期化@func_0x08000684() LCD V-Blank割り込みで実行される関数のポインタ POINTER+0x100x0に初期化@func_0x08000684() LCD H-Blank割り込みで実行される関数のポインタ、引数なし、戻り値無し POINTER+0x14V-Counter Match割り込みで実行される関数のポインタ 引数無し、戻り値無し POINTER+0x180x0に初期化@func_0x08000684() Serial Communication割り込みで実行される関数のポインタ hWORD+0x1cV-Counter Match割り込みで bit 2 (0x04) を立てている LCD H-Blank割り込みで bit 1 を立てている LCD V-Blank割り込みで bit 0 を立てている Serial Communication割り込みでbit 7を立てる この bit 0 が立たない限り 通常ルーチンでは 0x080008c6-0x080008ce間でループ@func_0x08008ac() ループが終了すると bit0 がクリアされる WORD+0x200x0に初期化。@func_0x080004d8() LCD V-Blank割り込みで1カウントアップされている, +0x0c の関数のポインタの実行*前*@func_0x08000738(), WORD+0x24 0x0に初期化@func_0x080004d8() LCD V-Blank割り込みで1カウントアップされている, +0x0c の関数のポインタの実行*後*@func_0x08000738() ここからキーのステータスを保存する部分。KEYINPUTレジスタから論理が反転される 0 Released, 1 Pressed または 0 キーステータスの変更なし 1 キーステータスの変更あり hWORD+0x28キーステータスを保存@func_0x080005e4() hWORD+0x2aキーステータスの変更を保存 0 変更なし 1 変更あり @func_0x080005e4() hWORD+0x2cL=Aモードの反映されたキーステータスを保存@func_0x080005e4() hWORD+0x2eL=Aモードの反映されたキーステータスの変更を保存@func_0x080005e4() hWORD+0x30キーステータスの変更を保存@func_0x080005e4() 0x32にあるキーの押し続け判定のカウンタが0になると上記値が現在のキーステータスに上書きされる@func_0x080005e4() hWORD+0x32キーの状態が前と同じ場合に1減算されるカウンタ@func_0x080005e4() 押し続ける状態がどれだけ続いているか判断される キーの状態が変更されると0x28 (640 ms)にセットされる 押し続けている状態が続くと更に +0x5 (80ms) される hWORD +0x34 [$03002360 + 0x2e] [$03002360 + 0x36] != 0 の場合1が保存される@func_0x080005e4() hWORD +0x36 読み出し@func_0x080005e4() POINTER $03002398 - $03002797 構造体配列のベースアドレス, 要素0x80個 func_0x08006e68(0x0, 0x80) 初期化 WORD +0x0 [$082bf2f8+0x0](=0x013000a0)で初期化 WORD+0x4 [$082bf2f8+0x4](=0x00000c00)で初期化 上記が0x80個分用意されている struct {WORD val0; WORD val4;}[0x80] byte [$03002798] 0x0に初期化@func_0x08000540($0816cc91) 読み出し@func_0x0816cad8() この値を元にswich-case分岐 0x0, 0x8c, 0x8d, default の値を取る byte[$03002799] V-Blank乱数の進み判定に利用@func_0x08000738() hWORD [$0300279c] func_0x08005bcで 0x05に初期化 func_0x080005e4(キーの読み出し)で読み出されている POINTER $030027b0 - $030027e7 まで 0x38 bytes 分 $0829bdbc からコピー @func_0x08000684() POINTER [$030027b0]== $08000845;LCD V-Counter Match POINTER [$030027b4]== $08000879;Serial Communication POINTER [$030027b8]== $0800b4e5;Timer 3 Overflow シリアル通信の初期化処理中に$0829179d(Thumb)に変更@func_0x08291078($030027b4+0x4, 0x3) func_0x0800e194()から復帰時に元に戻される POINTER [$030027bc]== $08000815;LCD H-Blank POINTER [$030027c0]== $08000739;LCD V-Blank POINTER [$030027c4]== $080008a9;Timer 0 Overflow POINTER [$030027c8]== $080008a9;Timer 1 Overflow POINTER [$030027cc]== $080008a9;Timer 2 Overflow 初期化時のSRAMの読み込み中に $0828fea5 に変更func_0x0828fecc(0x2,$030027cc) POINTER [$030027d0]== $080008a9;DMA 0 POINTER [$030027d4]== $080008a9;DMA 1 POINTER [$030027d8]== $080008a9;DMA 2 POINTER [$030027dc]== $080008a9;DMA 3 POINTER [$030027e0]== $080008a9;Keypad POINTER [$030027e4]== $080008a9;Game Pak byte [$030027a0] 0x0に初期化@func_0x080003a4() i.e. main関数 Serial Communicationを行っているかどうかを判断するフラグか? byte[$030027e8] この値が0の場合には func_0x0800b474()が実行される@func_0x08000738() - V-Blankの関数 POINTER $030027f0 - $03002fdf 0x800 byte 分 $08000248 - $08000a47 からコピーされている。 割り込みハンドラの実行ルーチン byte [$03002ff0] V-Blank中に byte [$03006120 + 0x4]の値を保存 POINTER $0300311c 構造体 or 配列のベースアドレス byte+0x0 読み出し@func_0x0800a114() byte+0x1 読み出し@func_0x0800a114() byte+0x2 読み出し@func_0x0800a114() byte +0x3 読み出し@func_0x0800a114() POINTER $03003130 - $0300317f の 0x28*2(=0x50) bytes分 0 fill @func_0x0800e0c8() WORD[$03003180] func_0x0800aee0 でfunc_0x0800b0f4(0x030031e4, 0x030031b0, 0x03003130) の戻り値を保存 byte[$0300319c] func_0x0800738(V-Blank割り込み), func_0x0800aee0, func_0x08009b64 で利用 setされる場所が見つかっていない 0 unlock 1 lock だと思われる。でも何をlockしているのか不明 シリアル通信をしているかどうかの制御かな? POINTER $030031b0 - $030031bf の 0x8*2(=0x10) bytes分 0 fill @func_0x0800e0c8() byte[$030031c4] func_0x080334e0() V-Blank中で呼ばれる関数で利用 POINTER $03003210 何かの構造体 or 配列 byte +0x0 Timer 3 Overflow の呼び出しで使われる値。 この値が0だと Timer 3 の reload設定が行われない@func_0x0800b854() byte+0x1 [$03003210] == 0 の時に 0x1を代入@func_0x0800b0f4(POINTER r0, POINTER r1, POINTER r2) byte+0x3 読み出し@func_0x0800b0f4(POINTER r0, POINTER r1, POINTER r2) byte+0xc 読み出し@func_0x0800b0f4(POINTER r0, POINTER r1, POINTER r2) byte+0xe 値を保存@func_0x0800b0f4(POINTER r0, POINTER r1, POINTER r2) byte+0xf 読み出し@func_0x0800b0f4(POINTER r0, POINTER r1, POINTER r2) byte+0x10 読み出し@func_0x0800b0f4(POINTER r0, POINTER r1, POINTER r2) byte+0x11 読み出し@func_0x0800b0f4(POINTER r0, POINTER r1, POINTER r2) byte+0x12 読み出し@func_0x0800b0f4(POINTER r0, POINTER r1, POINTER r2) byte+0x13 読み出し@func_0x0800b0f4(POINTER r0, POINTER r1, POINTER r2) byte+0x339(=$03003549) [$0300319c] == 0 の時 func_0x08086ff4()の戻り値となる WORD$03004150 - $030041e5 シリアル通信の割り込みルーチンが展開される@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER $030041e0 V-Blank中にいろいろ読み込まれる構造体 byte +0x02 func_0x0800d0cc()で func_0x0800cdc8(0x45, 0x0) が実行されるかどうかを判定するフラグ 0x0で無い場合は実行される byte +0x04 +0x40 の値が0の場合に0が代入される@func_0x0800c008(疑似乱数) +0x07 の値が0x5の場合に +0x07の値が代入される byte +0x06 +0x07 の値が0x5の場合に0x10が代入される@func_0x0800c008(疑似乱数) byte +0x07 0で無い場合にfunc_0x0800c200([$030041e0 + 0x07])が実行される@func_0x0800c008(疑似乱数) 何かのシーケンス番号のような気がする byte +0x0e [$0300r1e0 + 0x4] !=0 の場合に 1がセットされる@func_0x0800c008(疑似乱数) hWORD +0x14 0x0に設定@func_0x0800cdc8(byte r0, byte r1) hWORD +0x16 0x0に設定@func_0x0800cdc8(byte r0, byte r1) hWORD +0x1a 書き込み@func_0x0800c008(疑似乱数) 0x8c以下の疑似乱数が保存される hWORD +0x1c 読み出し@func_0x0800c008(疑似乱数) 0x8c - [+0x1a] の値が保存される WORD +0x40 関数のポインタ (*POINTER func)(byte r0, byte r1)として func_0x08295a10(byte r0, byte r1)で実行される この値が0の場合には func_0x0800cdc8(byte r0, byte r1)で func_0x08295a10(r0, r1, r2)が実行されない hWORD $03004230 - $030042e3 の 0x0b4 byteを0で初期化@func_0x08292564() POINTER [$03007630]に保存されている byte+0x0 0xff に初期化@func_0x08292564() func_0x08293128で利用されている 読み出し@func_0x0800c008(疑似乱数) byte+0x4 0x0 に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) func_0x08295240 で +0x5と比較して分岐 byte+0x5 0x0 に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) func_0x08295240 で利用 byte+0x6 0x0 に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) byte+0x9 0x4 に初期化@func_0x08292564() byte+0xf 0x57に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) byte+0x10 0x10に初期化@func_0x08292564() POINTER $03004230+0x10(=$03004240) 何かの構造体 or 配列のベースアドレス 上記の処理の後実行 byte +0x0 0x10に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) byte +0x1 0x10に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) byte +0x2 0x10に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) byte +0x3 0x10に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER$030042e4 何かの構造体or配列のベースアドレス, シーケンスを制御している? POINTER [$03007634]に保存されている byte+0x2 0x0に初期化@func_0x08293a10() byte+0x6 0x0に初期化@func_0x08292564() func_0x08293128 で1カウントダウンされている(0でない場合) byte+0x9 0x0に初期化@func_0x08292564() hWORD+0x12 0x0に初期化@func_0x08292564() hWORD+0x14 0x0に初期化@func_0x08292564() hWORD+0x16 0x0に初期化@func_0x08292564() hWORD+0x18 0x0に初期化@func_0x08292564() hWORD $030042e8 - $300430f の 0x28 byte を0で初期化@func_0x08292564() byte +0x6 0x0 に初期化@func_0x08292564() 構造体の配列4個の実体 POINTER $030043ec +0x0 構造体のベースアドレスが $03007620 +0x0 に保存される POINTER $030043ec +0x70 構造体のベースアドレスが $03007620 +0x4 に保存される POINTER $030043ec +0x70*2 構造体のベースアドレスが $03007620 +0x8 に保存される POINTER $030043ec +0x70*3 構造体のベースアドレスが $03007620 +0xc に保存される struct {byte value0[0x68], WORD value68, WORD value6c}, 全て0に初期化 構造体の配列4個の実体 POINTER $030045ac +0x0 構造体のベースアドレスが $03007610 +0x0 に保存される POINTER $030045ac +0x1c 構造体のベースアドレスが $03007610 +0x4 に保存される POINTER $030045ac +0x1c*2 構造体のベースアドレスが $03007610 +0x8 に保存される POINTER $030045ac +0x1c*3 構造体のベースアドレスが $03007610 +0xc に保存される struct {byte value0[0x14] , WORD value14, WORD value18}, 全て0に初期化 POINTER$03004ab0 割り込み制御構造体のベースアドレス。初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER [$03007608]に保存されている WORD+0x0 0x0 に初期化 0x0aに変更@func_0x082952f4(0x8) 下位16ビットはfunc_0x0829117c(2)の戻り値 byte+0x4 0x0 に初期化 byte+0x5 0x0 に初期化 byte+0x6 func_0x0829117c(3)の戻り値 byte+0x7 0x0 に初期化 byte+0x8 0x0 に初期化 byte+0x9 0x0 に初期化 byte+0xa 初期化は不明 実施しなくても0だが... 割り込み直後 func_0x030027f0()で利用されている シリアルをGeneral-Purpose Modeに変更した直後 func_0x082910b4()で利用されている。 タイマーの番号だと思われる 2bit lsl して $0400100h からのoffsetとして利用される WORD+0xc 0x0 に初期化 byte+0x10 0x0 に初期化 hWORD+0x12 0x0 に初期化 func_0x08291218()ではこの値を返す。 func_0x0829117c(0)の戻り値 byte+0x14 0x1 に初期化 func_0x0829117c(1)の戻り値 byte+0x15 0x0 に初期化 WORD+0x18 0x0 に初期化 WORD+0x1c 0x0 に初期化 割り込み待ちを行って、この値を返す @ func_0x08292770() POINTER +0x20 $08295511に初期化@func_0x0829120c($0x08295511) @func_0x082952f4(0x8) 0x0に戻す@func_0x082952f4(0x8) WORD+0x24 $03004068 + 0x74(=$030040dc)に初期化 WORD+0x28 $03004608 に初期化 byte+0x2c 0x0 に初期化 @func_0x08291218() この値が1の間は永久ループ、割り込みの待ち合わせか? 0の場合は +0x12 の値を返す POINTER $030050a0 構造体のベースアドレス POINTER +0x00 関数のポインタが入る。利用箇所は不明 0x0800f255と比較@func_0x0800f2a4() byte +0x0c0xffに初期化@func_0x0800e0c8() byte+0x5c + num 0を代入@func_0x0800f1e8(num), numの範囲を要調査 byte+0x66読み込み@func_0x080116bc() --- V-Blankの関数 struct +0x80, +0x94, +0xa8, +0xbc, +0xd0 size 0x14の配列5個 hWORD+0x0 0x0に初期化@func_0x0800f7a8($030050a0 + 0x80) hWORD+0x2 0x0に初期化@func_0x0800f7a8($030050a0 + 0x80) WORD+0x4 0x0に初期化@func_0x0800f7a8($030050a0 + 0x80) WORD+0x8 0x0に初期化@func_0x0800f7a8($030050a0 + 0x80) byte+0x10 0x0に初期化@func_0x0800f7a8($030050a0 + 0x80) byte+0x11 0x0に初期化@func_0x0800f7a8($030050a0 + 0x80) byte+0x12 0x0に初期化@func_0x0800f7a8($030050a0 + 0x80) byte +0xee0x0に初期化@func_0x08010ca0(0x0) func_0x0810ca0(arg0) (arg0 !=0) を呼び出すと4カウントアップ $030050a0 + 0xee + 0x9ac (= $03005b39)まで0x4d6*2(=0x9ac)bytes 0 fill@func_0x0800e0c8() byte +0xef読み込み@func_0x080109b0() この辺アドレスの重複有り。要再調査 POINTER$0300510c 構造体のベースアドレス 構造は$030050a0 + 0x80に有るものと同じ 本当に$0300510c? struct hWORD+0x0 0x0に初期化@func_0x0800f7a8($0300510c) hWORD+0x2 0x0に初期化@func_0x0800f7a8($0300510c) WORD+0x4 0x0に初期化@func_0x0800f7a8($0300510c) WORD+0x8 0x0に初期化@func_0x0800f7a8($0300510c) byte+0x10 0x0に初期化@func_0x0800f7a8($0300510c) byte+0x11 0x0に初期化@func_0x0800f7a8($0300510c) byte+0x12 0x0に初期化@func_0x0800f7a8($0300510c) POINTER $0300510c + 0xb8 (=$030051c4) 何かの構造体or配列のベースアドレス byte +0x0 [0x14][0x46] の配列(0x578 bytes)を0 fill @func_0x0800d184($030051c4) byte +0x578 0x0で初期化@func_0x0800d184($030051c4) byte +0x579 0x0で初期化@func_0x0800d184($030051c4) byte +0x57a 0x0で初期化@func_0x0800d184($030051c4) byte +0x57b 0x0で初期化@func_0x0800d184($030051c4) POINTER $0300510c + 0x634 (=$03005740) 何かの構造体or配列のベースアドレス byte +0x0 [0x28][0xe] の配列を0 fill@func_0x0800d1e0($03005740) byte [$03005a25] 0x0を代入@func_0x080109b0() WORD [$03005ae0] 乱数のシード - V-Blankで進む WORD [$03005ae4] 乱数のシード 用途不明 POINTER [$03005af0] $020246f8に初期化@func_0x080004d8() POINTER [$03005af4] 0x020294acに初期化@func_0x080004d8() WORD [$03005ae8] func_0x082902e4()の結果によって 0x0 or 0x1に設定される hWORD[$03005b58] 読み出し@func_0x080a3040(hWORD r0) 読み出し@func_0x080a2a5c(hWORD r0, byte r1) POINTER $03005b60 - $03005f5f の先に構造体(0x28 bytes)の配列 0x10個 ベクタ構造になっている func_0x080a8818() 構造体を初期化する関数@最初のループ func_0x080a8964(byte r0) r0番目の要素を取り除く関数 WORD +0x0 0x080a8870に初期化 読み出し@func_0x080a8aac(WORD r0) byte +0x4 0x0に初期化 現在の構造体の位置 byte +0x5 配列の要素の番号に初期化 i.e. 0x0-0xf 先頭の要素み0xfeに初期化 前の構造体の位置 byte +0x6 配列の要素の番号 + 1 に初期化 i.e. 0x1-0x10 最後の要素のみ 0xffに初期化 次の構造体の位置 byte +0x7 0xffに初期化 byte +0x8 byte 0x20個分の配列のベースアドレス 全て0x0に初期化 struct { WORD val0; byte val4; byte val5; byte val6; byte val7;byte val8[0x20]} POINTER $03005970 上の配列の2番目の要素の先頭が $03005b88 よって +230 = 2番目の要素の+0x18 byte +0x230 (=$03005ba0) 0x0で初期化@func_0x0800d1e0($03005740) byte +0x231 0x0で初期化@func_0x0800d1e0($03005740) [$0300319c]!=0 の時 func_0x08086ff4()の戻り値となる byte +0x232 0x0で初期化@func_0x0800d1e0($03005740) byte +0x233 0x0で初期化@func_0x0800d1e0($03005740) WORD[$03005e18] 乱数のシード POINTER $03006120 多分サウンド用構造体のベースアドレス POINTER [$03007ff0]にアドレスが保存されている $03006120 - $030070cf 0xfb0バイト分がサウンド用のデータが保存される領域, 0で初期化されている WORD+0x0 0x0に初期化されている。 タイマー1の設定後に 0x68736d53が代入される。 $030071c0 や $03007250 の先のデータを変更する際にアトミックな処理を行うために利用される。 0x08736d53で無い場合はデータ変更中 0x08736d53 + 0x978c92ad = 0x0 Vフラグ 1 VCOUNTER Match内で利用されている byte+0x4 0x0に初期化されている。 byte+0x5 0x0に初期化。 byte+0x6 0x8に初期化されている。要調査 0xc5に変更@func_0x0828ec00(0x0094c500) byte+0x7 0xfに初期化されている。 0x4に変更@func_0x0828ec00(0x0094c500) byte+0x8 0x4に初期化されている。要調査 byte+0x0b func_0x08295e78(0x630, [$805fd684 + 0x6])の下位8ビットで初期化 @func_0x0828eb5c(0x40000) byte+0x0c 0に初期化@func_0x0828e920($03007250) WORD+0x10 タイマー0のカウンタ設定値。[0x085fd684 + 0x6] に初期化されている @func_0x0828eb5c(0x40000) WORD+0x14 func_0x08295e78(???,???)に初期化されている @func_0x0828eb5c(0x40000) WORD+0x18 func_0x08295e78(???,???)に初期化されている @func_0x0828eb5c(0x40000) WORD+0x1c $03007250 i.e. サウンド用マップデータの先頭アドレスに初期化@func_0x0828e920($03007250) WORD+0x20 関数のポインタが保存されている@func_0x0828d5e4() V-Blank中の処理 関数のポインタとして実行@func_0x0828d5e4() 関数のポインタとして実行@func_0x0828e24c(POINTER r0, POINTER r1) - ループ中 WORD+0x24 func_0x0828da1e(arg0, arg1, arg2, arg3) のarg0として利用されている@func_0x0828d5e4() V-Blank中の処理 WORD+0x28 0x0828fbf9 に初期化されている 0x0828f231に変更@func_0x0828e920($03007250) 関数のポインタとして実行@func_0x0828d5e4() WORD+0x2c 0x0828fbf9 に初期化されている 0x0828f165に変更@func_0x0828e920($03007250) WORD+0x30 0x0828fbf9 に初期化されている 0x0828f0bdに変更@func_0x0828e920($03007250) POINTER +0x34 $030071c0 i.e. ROMからコピーしたデータの先頭アドレスに初期化 WORD+0x38 0x0828e2c1に初期化されている。要調査 WORD+0x3c 0x0828fbf9 に初期化されている byte+0x50 +0x40毎0x0c個 0x0に初期化@func_0x0828ec00(0x0094c500) 多分大きさ 0x40の配列が0x0c個有る。 byte+0x350 DMA1 サウンドA, 右チャンネル用のサウンドデータが保存する byte+0x980 DMA2 サウンドB, 左チャンネル用のサウンドデータを保存する これら先数bytes にデータを書き込むと VCOUNTER Match で自動サウンド転送されると思われる WORD$030071c0 - $0300724f は初期化時に $085fd500 - $085fd58f からメモリ領域をコピーされている。 0x90バイト分@func_0x0828e920($03007250) 多分サウンド用のマップデータだが何に使われているか要調査 WORD +0x20 0x0828f8f1に初期化 WORD+0x440x0828e52dに初期化 WORD+0x4c0x0828e541に初期化 WORD+0x700x0828fa49に初期化 WORD+0x740x0828e4c5に初期化 WORD+0x780x0828ed5dに初期化 WORD+0x7c0x0828e24dに初期化 WORD+0x800x0828ef41に初期化 WORD+0x840x0828f009に初期化 WORD $03007250 - $0300734f (0x100バイト分) サウンドで利用されているデータ 全域を0で初期化@func_0x0828e920($03007250) byte+0x01 0x1で初期化 byte+0x1c0x11で初期化 byte+0x410x02で初期化 byte+0x5c0x22で初期化 byte+0x810x03で初期化 byte+0x9c0x44で初期化 byte+0xc10x04で初期化 byte+0xdc0x88で初期化 hWORD $030074d0 構造体のベースアドレス hWORD +0x04 読み出し@func_0x080a2b20() この値が0の場合func_0x080a2b20()が1を戻す、0でない場合1を戻す POINTER +0x2c何かの構造体の配列へのポインタが入っている WORD +0x34 この値が0x68736d53であるかチェックされる@func_0x0828f6a4($030074d0, 0xffff, 0x0) この構造体をロックするためのmutex byte [$030075e0] Timer 2 Overflow で利用されているカウンタ [$03001a6a] が 0 になったときに 1がセットされる。 WORD [$030075e4] func_0x0828fff8(sp) で一時的にsp+0x1が保存される WORD [$030075e8] SRAMの読み込み成否によって結果が変わる@func_0x082902e4() WORD [$030075ec] 同上 WORD [$030075f0] 同上 WORD [$030075f4] 同上 WORD [$030075fc] 同上 WORD [$03007600] 同上 WORD [$03007604] 同上 WORD[$03007608] $03004ab0に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER $03007610 構造体4個のベースアドレスを保存した配列 POINTER +0x0 $030045ac に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER +0x4 $030045ac+0x1c に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER +0x8 $030045ac+0x1c*2 に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER +0xc $030045ac+0x1c*3 に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER $03007620 構造体4個のベースアドレスを保存した配列 POINTER +0x0 $030043ec に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER +0x4 $030043ec+0x70 に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER +0x8 $030043ec+0x70*2 に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER +0xc $030043ec+0x70*3 に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER[$03007630] $03004230 に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER [$03007634] $03004230 +0xb4(=$030042e4) に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER [$03007638] $03004230 +0xb4 +0x28 (=$0300430c) に初期化@func_0x0829243c($03004230, 0x0e64, $030027b4, 0x1) POINTER +0x4 $03004230 + 0xb4 +0x28 + 0x9 に初期化。 次のルーチンを割り込み処理でthumb実行できるように設定? hWORD +0x8 - 0x68 の 0x60 bytes分 $0829397c からコピー 見たところ実行ルーチン。 POINTER $03007640 - $0300764b の0x3*4(=0xc) bytes分0 fill func_0x082953a8() 厳密な動作は追っていないが、シリアル通信のシーケンスを制御するための構造体 byte +0x0 この値にステータスを保存 byte +0x1 この値でシリアル処理をしていることの判別 0 シリアル処理をしていない 1 シリアル処理中 2 ? byte +0x2 hWORD +0xa ポインタ類 Stack Pointer 初期値 POINTER $03007e40 通常モード, システムモードでの Stack Pointer の初期値 POINTER $03007fa0 IRQモードでのStack Pointerの初期値 特別な用途に使われるポインタ HW制御のための構造体を指すなど特別な用途に使われるポインタ POINTER [$03007ff0] 多分サウンド用構造体のベースアドレスを保存する($03006120) LCD V-Counter Match内呼び出される func_0x0828df98で利用されている byte [$03007ff4] LCD V-Counter Match内呼び出される i.e. func_0x0828df98() hWORD [$03007ff8] LCD V-Counter Match 割り込み内で bit 2 を立てている (0x04との or) LCD H-Blank割り込み内で bit 1 を立てている Serial Communication割り込みで bit 7を立てる POINTER [$03007ffc] 割り込みハンドラのアドレス $030027f0 が設定されている SRAM領域 0E000000-0E00FFFF Game Pak SRAM (max 64 KBytes) - 8bit Bus width @gbatek byte [$0e005555] 0xaaを代入@func_0x0828fe08() byte [$0e002aaa] 0x55を代入した後に0x90を代入@func_0x0828fe08() byte [$0e002aaa] 0x55を代入@func_0x0828fe08() ROM領域 RTCで利用される領域 See gbatek. hWORD [$080000c4] 0x1が書き込まれる@func_0x08290864(WORD r0) 上記の後すぐに0x5が書き込まれる@func_0x08290864(WORD r0) hWORD [$080000c6] 0x7が書き込まれる@func_0x08290864(WORD r0) RTC 3bitを Outモードにする hWORD [$080000c8] 0x1が書き込まれる@func_0x08290f78() RTCをread-writeに変更 不明 POINTER $0863c27c - ポインタとして利用@func_0x0828e6b8(arg0) 0xc bytesのデータを持つ構造体の配列 データ的には $0863c22abまでの 0x4個の様だが... POINTER $0863c2ac - ポインタとして利用@func_0x0828e6b8(arg0) 8bytesのデータを持つ構造体の配列 データ的には $0863d423 までの 0x22f (=559d) 個の様だが... POINTER +0x0 hWORD +0x4 $0863c27c のデータを参照するときのオフセットが入っている 0 - ポケモンデータ POINTER $082f0d70- フシギダネのデータ POINTER $082f1dbc ミュウツーのデータ差分が0x95 (=149) OK POINTER $082f2890 ルギアのデータ差分が0xf8 (=248) OK セレビィまではOK POINTER $082f2ba0 キモリのデータ 差分が0x114(=276)個分 0x18分ずれている。なぜ? POINTER $082f3a10 ジラーチのデータ差分が0x18, デオキシスのデータは不明 各ポケモンデータは 0x1c bytes の構造体 byte +0x00 HP byte +0x01 攻撃 byte +0x02 防御 byte +0x03 特攻 byte +0x04 特防 byte +0x05 素早 byte +0x06? byte +0x07? byte +0x08被捕獲度 byte +0x09経験値 byte +0x0a? byte +0x0b? byte +0x0c? byte +0x0d? byte +0x0e? byte +0x0f? byte +0x10? byte +0x11? byte +0x12? byte +0x13? byte +0x14? byte +0x15? byte +0x16? byte +0x17? byte +0x18? byte +0x19? byte +0x1a? byte +0x1b? ホウエン図鑑 = 全国図鑑マップ POINTER $082ee940-$082eead3 ホウエン図鑑から全国図鑑へマップするhWORD 202(=0xca)個の配列 hWORD +0x??全国図鑑の番号 画像データ POINTER $085c0c94 初期化直後画面の圧縮データの先頭アドレス, $06000000に展開される WORD +0x00x0004e010 i.e. LZ77, 展開後のサイズ 0x4e0バイト byte +0x40x33 POINTER $085c0ef8 初期化直後画面の圧縮データの先頭アドレス, $06003800に展開される POINTER $085c0c74-$085c0c93 読み出し@func_0x080a1200($085c0c74, 0x0, 0x20),最初のループ その他・未分類 byte [$08000878] V-Blank割り込みで呼び出される関数 func_08001110で利用されている。 ??? 0x08001fd5 関数の引数として利用されているfunc_0x080a8aac(0x08011fd5)@func_0x080116bc() POINTER $0829397c - $082939db の0x60 bytes 分、シリアル通信で使われる? WORD [$0829beac] 0x0 [$030008e0]に代入されるが何に使われる?@func_0x0800134c() POINTER 0x082facb4 0x0805cdfcで使われている。何かの領域のPOINTER。V-Blankなので画像を扱っている? @func_0x080334e0() POINTER $0890ed54 ポインタの配列として利用されている@func_0x082902e4() POINTER +0x00 $0890eda0 hWORD +0x2c 0x09c2 POINTER +0x04 $0890ee3c hWORD +0x2c 0x1362 POINTER +0x08 $0890edd0 hWORD +0x2c 0x0000 定数 0x41c64e6d 線形疑似乱数生成器で使われる定数 0x00006073 線形疑似乱数生成器で使われる定数 0x08736d53 サウンド処理をアトミックにするための mutexの値。なぜ 0 or 1 ではなくこの値なのか不明 サウンド設定 DMA1, DMA2 でV-COUNTER Match 割り込み中にサウンドデータの転送を行う SND A 右チャンネル,DMA1 SND B 左チャンネル, DMA2 サウンドは 8bit/ 65.536kHz サウンド用構造体のベースアドレスは $03006120 初期化時の DMA1 Source Addr は $03006470 初期化時の DMA2 Source Addr は $3006aa0 タイマー設定 タイマー0 タイマー0はサウンドに利用されるようである TM0CNT_Hを0に初期化@func_0x0828eb5c(0x40000) Prescalar Selection 0=F/1(システムクロック16.78MHz毎にカウントアップ), Count-up Timing Normal, Timer IRQ Disable, Timer Start/Stop Stop TM0CNT_L i.e. タイマーのカウンタ設定値を func_0x08295e78(0x44940, [$03006120+0x10]) に設定 その他メモ 線形疑似乱数生成器のシードは最低4個、5関数存在する H-Blank/V-Blank の割り込みは VCOUNT, IE, IME の3箇所で設定する? 多重割り込みが入るのは H-Blank, VCOUNTER, Timer ?, Timer 3,Serial, Game Pak V-Blankは他の割り込み中に入らない func_0x0800a6b8()でfunc_0x082959bc($0202272c+(3-r4)*0x1c, 0, 0x1c)を呼び出しているけどなんだ? bios領域に書き込んでいる?
https://w.atwiki.jp/singennoyabou/pages/14.html
大戦場 城数140からなる。 不如帰大戦場領土一覧 統一後、大名が残った状態で初期化することが出来る。 本拠(大名の居城)と隣接した領土のみ残し初期化 領土No.奇数の領土のみ残し初期化 領土No.偶数の領土のみ残し初期化 完全初期化(大名家を全て削除) 標準戦場 城数60からなる。 不如帰標準戦場領土一覧 統一後必ず完全初期化される。 テスト戦場 城数60からなる。 領土は標準戦場と同じ。 バグなどが残っているが今のところ対応予定はない(テスト用の戦場であるため)
https://w.atwiki.jp/vst_prog/pages/76.html
トップページ VSTクラスの初期化 ここでは前項で定義したMyMidiSampleVSTの初期化を行う。 VSTとしての最低限の初期化を行うとともに以下2つのMIDIに関するメンバー変数を初期化する。 midimsgnum … 受け取ったMIDIメッセージの数。0に初期化しておく midimsgbuf[ ] … 受け取ったMIDIメッセージを保管するバッファ。バッファすべてを0に初期化しておく サンプルコード サンプルコードは以下のとおり。 MyMidiSampleVST MyMidiSampleVST (audioMasterCallback audioMaster) AudioEffectX (audioMaster, MY_VST_PRESET_NUM, MY_VST_PARAMETER_NUM){//VSTの初期化を行う。 //以下の関数を呼び出して入力数、出力数等の情報を設定する。//必ず呼び出さなければならない。setNumInputs (MY_VST_INPUT_NUM); //入力数の設定setNumOutputs (MY_VST_OUTPUT_NUM); //出力数の設定setUniqueID (MY_VST_UNIQUE_ID); //ユニークIDの設定 isSynth (true); //このVSTがSynthかどうかのフラグを設定。 //Synthの場合…true、Effectorの場合…false canProcessReplacing (); //このVSTが音声処理可能かどうかのフラグを設定。 //音声処理を行わないVSTはないので必ずこの関数を呼び出す。 //上記の関数を呼び出した後に初期化を行うmidimsgnum = 0;memset(midimsgbuf, 0, sizeof(MidiMessage) * MIDIMSG_MAXNUM); volume = 1.0f;} サンプルコードの解説 まず2行目~17行目でVSTの初期化を行っている。(詳細はVST初期化ルールのとおり) なお、Synthとして動作させるため、isSynth()関数にtrueを引き渡している。 isSynth (true); //このVSTがSynthかどうかのフラグを設定。 次に19~20行目で2つのMIDIに関するメンバー変数を初期化している。 midimsgnum = 0; memset(midimsgbuf, 0, sizeof(MidiMessage) * MIDIMSG_MAXNUM); 次へ 同一カテゴリのTips 項目 No. 概要 MIDIメッセージ処理 No.1 MIDIメッセージ処理で最小構成の自作VSTに追加する変数・関数 No.2 VSTの初期化とMIDIメッセージ処理関連の変数の初期化 No.3 ホストアプリケーションからMIDIメッセージを受け取る方法 No.4 MIDIメッセージをprocessReplacing()関数中で処理する方法 No.5 MIDIメッセージ処理で作成したVSTのサンプルソースコード全体(暫定版)
https://w.atwiki.jp/bblean/
WinMain とにもかくにも。 ■開始処理 多重起動と稼動OS判定。 実メッセージ操作は、MainWndProc。 シェル内関数参照更新?init_runtime_libs Explorer稼動中は、Explorerを非表示。 デスクトップ諸設定取得 XPの「ようこそ画面」操作? (参照コメント:Hack to terminate the XP welcome screen) 設定ファイル読み込み メニュー初期化MenuMaker ワークスペース初期化Workspaces デスクトップ初期化Desk タスクトレイ初期化Tray プラグイン読み込みと初期化PluginMnager 初期化完了までの待機?タイマーで500ms待ち メッセージループ開始 ■終了処理 T.B.D MainWndProc
https://w.atwiki.jp/kokeiro/pages/25.html
仕様書とは、それを用いることで何が出来るのかを使い方とともに明確に書かれたもの?大体そんな感じ。 ゲームを作成するときも仕様書は重要です。先にゲームでやりたいことを明確に決めておかず、後から新しい機能を追加しようとすると、プログラムに無理が出ることが多く、膨大な量の書き換えが必要になり面倒です。 ですので、実際にプログラミングをする前に最低でも必要な関数やフラグなどを紙に書き出すなどをして、無理の無い設計を心がけるべきです。プログラミングには初期化?がつき物です。初期化が必要なタイミングというのはその処理、関数を実行する前になります。先に関数などを作ってから変数初期化用の関数を作るというのはあまり現実的でありません。体験談です。 タイトル画面 → メインのゲーム → ゲームクリアorゲームオーバー → タイトル画面 → メインのゲーム... このようなゲームについて考えてみます(ゲームの中身は問わない)。画像・音声を用いるものとします。 必要な関数 タイトル メインゲーム ゲームクリア ゲームオーバー 画像・音声などのロード 最低でもこれらの関数が必要だということがわかります。 それぞれの関数に必要な処理 タイトル画面からメインのゲームをスタートさせる処理 メインゲームから特定の条件でゲームクリア、ゲームオーバー画面に移動する処理 ゲームクリア画面からタイトル画面に戻る処理 ゲームオーバー画面からタイトル画面に戻る処理 画像・音声などのロード 最低でもこれらの処理が必要だということがわかります。 初期化のタイミング さらに、各関数の初期化のタイミングを考えます。初期化のタイミングを間違えると思わぬ動作をすることは当然ですね。 タイトル画面の初期化は当然、タイトル画面を表示する前に行わないといけません。そのため、タイトル画面の初期化はゲームを起動したすぐあとに実行するべきことがわかります。また、ゲームクリア、ゲームオーバー画面からタイトル画面に戻ってくる際もタイトル画面の初期化をしたいです。 メインゲームはタイトル画面でゲームスタートを選択したときに処理を開始します。そのため、メインゲームの初期化はタイトル画面から切り替わるときに実行するべきことがわかります。 ゲームクリア画面、ゲームオーバー画面にはメインのゲームから切り替わることになります。そのため、ゲームクリア、ゲームオーバー画面の初期化はメインゲームから切り替わるときに実行するべきことがわかります。 では、各ファイルのロードはどのタイミングで行うべきでしょうか?これには大きく分けて2つのパターンが存在します。 STAGE1が始まる前にそのステージのデータを読み込み、クリアしたらそのデータを削除。そしてSTAGE2が始まる前にロード...というように細かくロード、デリートを繰り返すタイプのもの ゲーム開始と同時に全てのデータを読み込み、ゲームが終了するときに全てのデータを削除する一度にまとめてロード、デリートを実行するタイプのもの。 前者がメモリを効率的に使うことが出来ますが、処理が面倒です。そのため、このwikiでは後者の方法を用います。 よって、データの読み込みのタイミングはゲームが起動したすぐ後だということがわかります。タイトルで画像や音声を再生することを考えるなら、タイトルの初期化よりも先に行うべきです。 体験談 初期化、当然なようでいてゲームを作り始めたころは存在はおろか、使うべきタイミングが一切わかりませんでした。 私の場合、先にメインゲームを作ってからタイトル画面を付け足そうとしました。死にました。メインゲームの初期化をさまざまな関数で行っていたため、それらを全て一箇所に集める作業が始まりました。また、タイトル画面を付け足す前は初期化のタイミングは、一箇所で実行して問題ない変数にもかかわらず「ゲームを起動した直後」にだったり、「ゲームをプレイしていて必要になった瞬間」だったりとばらばらに適当にだらだらとやっていたせいで相当な書き直しが求められました。計画的にプログラミングをしましょう。
https://w.atwiki.jp/karanemi/pages/695.html
アーククラフト 作品名:マジカル†デスゲーム 使用者:愛葉 レナ マジカル†デスゲームに登場する術技。 魔術のひとつ。 魔法・魔術による効果を総て打ち消し初期化する。 術技についての詳細初期化魔法(ニュートライズ) 発動時の形容 関連項目 関連タグ 術技についての詳細 初期化魔法(ニュートライズ) 対象から魔法的変化を取り除き元に戻す魔法による強化や変生を打ち消して初期状態に戻す。 それは対象にかけられたあらゆる魔法的変化を元に戻す、いわゆる初期化魔法と呼ばれ る種類の魔法だった。 発動時の形容 紅い光とともに魔法陣が出現する魔法陣が初期化対象の空間を赤く染める。 紅い光がほとばしり、床に複雑な文様が現れる。 魔法陣はくるみを中心として展開すると、高速の無音詠唱が空間を紅く染め上げた。 関連項目 魔術 〈対消滅魔術〉の術技分類。 関連タグ マジカル†デスゲーム 初期化 術技
https://w.atwiki.jp/kokeiro/pages/48.html
どんな機能を持っているのか 出来ることとか書きます 最初にタイトル画面が表示される 簡単にタイトル画面、ゲーム画面、ゲームクリア画面、ゲームオーバー画面に移動できる 上の画面切り替えの際、それぞれの初期化を行うことが出来る関数が用意されている。また、画面切り替えの際、自動でBGMを切り替えてくれる 簡単に音声を再生、切り替え、停止することが出来る メインゲームの間、Aキーを押すことでポーズ状態になる 基盤から学ぶことが出来ること この基盤、そこそこ必要な機能はサポートしていると思います。一番重要なのは、関数の中身自体ではなくどのタイミングでどのような関数を呼び出せばいいのかが分かりやすいということだと思います。 説明の便宜上、プログラムを「タイトル、ゲーム、クリア画面など、全てをまとめたもの」、ゲームを「プログラムの中の、プレイヤーが遊べるもの」とします。また、ゲームはミニゲームのようなもので、クリアまたは失敗した場合にタイトル画面に戻り、再びスタートすることが出来るものとします。 3分逃げ切ったらクリア、逃げ切れなかったら失敗というゲームについて考えて見ます。 このゲームをつくるには、以下のような考えの流れなどが必要です。一例です。 タイトル画面を表示する タイトル画面を表示するにはタイトル画面の初期化が必要である タイトル画面に画像を表示する場合、その画像を読み込む必要がある タイトル画面で音声を再生する場合、その音声を読み込む必要がある さらにゲーム画面に進むためには、ゲームの初期化が必要である ゲームで画像を... ゲームで音声を... ゲーム画面に進むにはタイトル画面の音声を止める必要がある さて、これらの機能をどこに実装すればいいでしょうか?とても重要です。タイトル画面の画像を読み込む前にタイトル画面を表示しようとしても失敗してしまいます。よって、先に画像を読み込ませればいいのです。これは簡単な例でしたが、では、ゲームの初期化はどこで行えばいいのでしょうか? そもそも、プログラムにおける初期化は大きく2種類に分けることが出来ます。プログラム開始直後に1度だけ行う初期化と毎回処理が始まる前に行う初期化です。ちょっと分かりにくいですね。 基盤の場合、プログラム開始直後に行う初期化は全ての変数を0にする、その後画像・音声データをロードする、はじめの処理対象をタイトル画面にするです。これらは何度も実行する必要がありませんね。 毎回処理が始める前に行う初期化はそれぞれどのような処理が開始するのかによって違います。現在共通しているのは、画面が切り替わるとき、BGMを変更する初期化だけです。 上の3分間逃げ切るゲームについて考えて見ましょう。もし、ゲームの初期化をプログラムの開始直後にのみ行ったとしましょう。1分間経過した後に失敗してしまったとします。ゲームオーバー画面からタイトル画面に戻り、再びゲームをスタートするとすでに1分経過した状態からゲームが開始します。なぜなら、プログラムが開始するのは1度だけだから、ゲームが初期化されるのも1度だけだからです。ゲームは何回もスタートするので、そのたびに初期化が必要だということがわかります。つまり、ゲームの初期化のタイミングはタイトル画面からゲームに移動するときだということが分かります。 私は初心者のとき、この考え方にたどり着くのに1週間ほど使いました(キリッ ダッテワカンネーンダモン 基盤には呼び出されるタイミングを考えるサポートのために大量のダミー関数が用意されています。ダミー関数とは、中身はほとんどかかれてない関数です。ただし、ダミー関数はそれぞれ呼び出されるべきタイミングで呼び出されるという特徴を持っています。たとえば、基盤のゲームの初期化関数にはほとんど中身がかかれていませんが、タイトル画面からゲーム画面に移動するときに呼び出される位置に書かれています。他にも、画像や音声をロードするためのダミー関数も用意されています。そこにロードの記述を書き足せば、呼び出すべきタイミングで呼び出されます。 基盤のソースは(構造体にメンバ関数を持っていること以外は)かなり見やすいと思います。ゲームの流れやちょっとしたテクニックを勉強してみてください。
https://w.atwiki.jp/isuzumi/pages/22.html
フロアが進むと解放される機能 ●修行 15Fで解放される機能。 修行対象になったキャラは呼び出し不能になる。 フロアを進めるごとにポイントがもらえ、ポイントは修行解除時に勝手にランダムにパラメータに割り振られる。 もらえるポイントの法則性は不明だが、何フロアか連続して修行させたほうが効率は良い模様。 小さな塔はクリアごとに初級で3ポイント、中級で4ポイントの固定の模様。マラソンするなら塔の狭い初級が効率的。 ●アビリティ変更 20Fで解放。 キャラを選択し、使用するカギを選ぶと変換候補が示される。 候補を見てからキャンセル可能だが、キャンセルしてもカギは減る。 ●依代初期化 30Fで解放。 強化回数100以上のキャラが対象。 スキル使用回数を除く全能力が初期化される(属性も初期化される)が、初期化前もっとも値の高い能力には、初期化前の値✖︎αが加算される。(HPは1/5で計算する) 係数αは、(強化回数➗10)%。強化回数100回なら10%だが1000回なら100%。 そして1000回を超えると元より強くなる。まあ、初期化で消える他の能力をどうするのかが問題だが。 なお、強化1000回に必要な石は、全部コスト2でも41000コ。貯めるのも大変。 初期化する際に加算ポイントが表示されるので見るだけなら安全。
https://w.atwiki.jp/toy_scooter/pages/23.html
再度、屈伸状態の初期化 フレームに180を入力しエンター "選択" 腿間の"センター"を選択 "初期化" "フレーム登録" 右髪IKを初期化"選択" "右髪IK"を選択 移動 "初期化" "フレーム登録" 左髪IKを同様に初期化"選択" "左髪IK"を選択 "コピー" "反転ペースト" フレーム登録 再生、初音ミクのmmdジャンプシリーズはこれにて終了!