メインサイトへ戻る
[リスト1]メッシュ型ワイプ処理ルーチン
リファレンス元の種類表記について
(U):無条件ジャンプ命令
(C):条件ジャンプ命令
(c):コール命令
* Referenced by:
| 0040C904(C);条件ジャンプ命令から参照されている
|
0040C92E 8B4610 mov eax,[esi+00000010h]
0040C931 8B5E14 mov ebx,[esi+00000014h]
0040C934 03C7 add eax,edi
0040C936 C74508C4484400 mov dword ptr [ebp+00000008h],004448C4h
0040C93D 8945F0 mov [ebp-00000010h],eax
0040C940 8B45FC mov eax,[ebp-00000004h]
0040C943 03D8 add ebx,eax
0040C945 895DF4 mov [ebp-0000000Ch],ebx
* Referenced by:
| 0040CA7F(C)
|
0040C948 A110D44800 mov eax,[0048D410h]
0040C94D 85C0 test eax,eax
0040C94F 0F8530010000 jnz 0040CA85h;ワイプ処理と通常のCG描画関連処理をスキップ
* Reference to WINMM.timeGetTime;この関数はパラメータ不要
|
0040C955 FF157C234400 call dword ptr [0044237Ch]
0040C95B A308A04A00 mov [004AA008h],eax;戻り値のWindowsタイムをストア
0040C960 8B4508 mov eax,[ebp+00000008h]
0040C963 8B5614 mov edx,[esi+00000014h]
0040C966 0310 add edx,[eax]
0040C968 3BD3 cmp edx,ebx
0040C96A 8955F8 mov [ebp-00000008h],edx
0040C96D 7D61 jnl 0040C9D0h;通常のCG描画関連処理をスキップ
ワイプ処理ではない通常のCG描画関連処理等、高速化改造とは直接的には関係無い部分を省略。
この部分を「強制的」にスキップする書き換えは当然不具合が出ます。
* Referenced by:
| 0040C96D(C)
|
0040C9D0 8B4D08 mov ecx,[ebp+00000008h]
0040C9D3 8B4614 mov eax,[esi+00000014h]
0040C9D6 8B11 mov edx,[ecx]
0040C9D8 8B0DA0C64C00 mov ecx,[004CC6A0h]
0040C9DE 03C2 add eax,edx
0040C9E0 3BF9 cmp edi,ecx
0040C9E2 754B jnz 0040CA2Fh;BitBlt関数の呼び出しをスキップ
0040C9E4 8B55FC mov edx,[ebp-00000004h]
0040C9E7 8B0DE4E74800 mov ecx,[0048E7E4h]
0040C9ED 3BD1 cmp edx,ecx
0040C9EF 753E jnz 0040CA2Fh;BitBlt関数の呼び出しをスキップ
0040C9F1 8B4E10 mov ecx,[esi+00000010h]
0040C9F4 8B1508D44800 mov edx,[0048D408h]
0040C9FA 03D1 add edx,ecx
0040C9FC 85D2 test edx,edx
0040C9FE 752F jnz 0040CA2Fh;BitBlt関数の呼び出しをスキップ
0040CA00 8B150CD44800 mov edx,[0048D40Ch]
0040CA06 03D0 add edx,eax
0040CA08 85D2 test edx,edx
0040CA0A 7523 jnz 0040CA2Fh;BitBlt関数の呼び出しをスキップ
0040CA0C 682000CC00 push 00CC0020h;背景とキャラクター画像の結合パターン
(ラスタオペレーションコード)を指定。これ以下もBitBlt関数用のパラメータを指定している。
0040CA11 50 push eax
0040CA12 A1D4D34800 mov eax,[0048D3D4h]
0040CA17 51 push ecx
0040CA18 8D0C5B lea ecx,[ebx+ebx*2]
0040CA1B 50 push eax
0040CA1C 51 push ecx
0040CA1D 57 push edi
0040CA1E 52 push edx
0040CA1F 52 push edx
0040CA20 8B1540AF4B00 mov edx,[004BAF40h]
0040CA26 52 push edx
* Reference to GDI32.BitBlt;もし通常のCG描画処理なら段階に分けてスキップする必要性は乏しい
|
0040CA27 FF159C204400 call dword ptr [0044209Ch]
0040CA2D EB36 jmp 0040CA65h;汎用描画処理操作用ルーチンをスキップ
* Referenced by:
| 0040C9E2(C), 0040C9EF(C), 0040C9FE(C), 0040CA0A(C)
|
0040CA2F 8B4E10 mov ecx,[esi+00000010h]
0040CA32 8B15D4D34800 mov edx,[0048D3D4h]
0040CA38 682000CC00 push 00CC0020h
0040CA3D 50 push eax
0040CA3E 51 push ecx
0040CA3F 52 push edx
0040CA40 8D145B lea edx,[ebx+ebx*2]
0040CA43 52 push edx
0040CA44 8B150CD44800 mov edx,[0048D40Ch]
0040CA4A 03D0 add edx,eax
0040CA4C A108D44800 mov eax,[0048D408h]
0040CA51 57 push edi
0040CA52 03C8 add ecx,eax
0040CA54 52 push edx
0040CA55 51 push ecx
0040CA56 8B0D40AF4B00 mov ecx,[004BAF40h]
0040CA5C 51 push ecx
0040CA5D E86E52FFFF call 00401CD0h;汎用描画処理操作用ルーチンへ
0040CA62 83C424 add esp,24h
* Referenced by:
| 0040CA2D(U)
|
0040CA65 8B5618 mov edx,[esi+00000018h]
0040CA68 52 push edx
0040CA69 E822CEFFFF call 00409890h;汎用処理時間操作用ルーチンへ
0040CA6E 8B4508 mov eax,[ebp+00000008h];上のコール命令に影響されない値
040CA71 83C404 add esp,04h
0040CA74 83C008 add eax,08h
0040CA77 3D0C494400 cmp eax,0044490Ch;上のコール命令とは関係ない結果がでる
0040CA7C 894508 mov [ebp+00000008h],eax
0040CA7F 0F8CC3FEFFFF jl 0040C948h;条件によりジャンプして処理をループさせる
* Referenced by:
| 0040C94F(C)
|
0040CA85 8B4614 mov eax,[esi+00000014h]
0040CA88 8B7610 mov esi,[esi+00000010h]
0040CA8B 8B0DD4D34800 mov ecx,[0048D3D4h]
0040CA91 8B55FC mov edx,[ebp-00000004h]
0040CA94 682000CC00 push 00CC0020h
0040CA99 50 push eax
0040CA9A 56 push esi
0040CA9B 51 push ecx
0040CA9C 8B0D0CD44800 mov ecx,[0048D40Ch]
0040CAA2 52 push edx
0040CAA3 8B1508D44800 mov edx,[0048D408h]
0040CAA9 03C1 add eax,ecx
0040CAAB 57 push edi
0040CAAC 50 push eax
0040CAAD A140AF4B00 mov eax,[004BAF40h]
0040CAB2 03F2 add esi,edx
0040CAB4 56 push esi
0040CAB5 50 push eax
0040CAB6 E81552FFFF call 00401CD0h;ループ範囲外なので改造対象ではないと判断
0040CABB 83C424 add esp,24h
* Referenced by:
| 0040C8F7(C)
|
0040CABE 5F pop edi
0040CABF 5E pop esi
0040CAC0 5B pop ebx
0040CAC1 8BE5 mov esp,ebp
0040CAC3 5D pop ebp
0040CAC4 C3 ret
[リスト2]汎用処理時間操作用ルーチン
* Referenced by:
| 0040B9FE(c), 0040BC3B(c), 0040BCBB(c), 0040BD3E(c)
省略。計97箇所から参照。
| 00436992(c), 0043801F(c), 004380BC(c), 004382EB(c)
| 00438520(c)
|
00409890 55 push ebp;スタックの使い方に注意
00409891 8BEC mov ebp,esp
00409893 53 push ebx
00409894 56 push esi
00409895 8B7508 mov esi,[ebp+00000008h]
00409898 57 push edi
00409899 85F6 test esi,esi
0040989B 745D jz 004098FAh
0040989D E83EF60000 call 00418EE0h
004098A2 85C0 test eax,eax
004098A4 7554 jnz 004098FAh
* Reference to WINMM.timeGetTime;戻り値のWindowsタイムはeaxレジスタに格納される
|
004098A6 8B3D7C234400 mov edi,[0044237Ch];ediレジスタにロード
004098AC FFD7 call edi;timeGetTime関数を呼び出し
004098AE 8B0D08A04A00 mov ecx,[004AA008h];取得済みのWindowsタイム
004098B4 8BD0 mov edx,eax;再取得したWindowsタイムを転送
004098B6 2BD1 sub edx,ecx;2つのWindowsタイムの差を算出
004098B8 3BD6 cmp edx,esi;この場合esiレジスタは20(16進)で固定
004098BA 760D jbe 004098C9h;2つのWindowsタイムの差によりジャンプ
004098BC 6A01 push 01h
* Reference to KERNEL32.Sleep
|
004098BE FF15E8204400 call dword ptr [004420E8h]
004098C4 5F pop edi
004098C5 5E pop esi
004098C6 5B pop ebx
004098C7 5D pop ebp;スタックからの復帰
004098C8 C3 ret
* Referenced by:
| 004098BA(C)
|
004098C9 732F jnc 004098FAh
* Reference to KERNEL32.Sleep
|
004098CB 8B1DE8204400 mov ebx,[004420E8h];ebxレジスタにロード
* Referenced by:
| 004098F0(C)
|
004098D1 3BC1 cmp eax,ecx
004098D3 7225 jc 004098FAh
004098D5 83FE03 cmp esi,03h
004098D8 7704 jnbe 004098DEh
004098DA 3BC1 cmp eax,ecx
004098DC 7419 jz 004098F7h
* Referenced by:
| 004098D8(C)
|
004098DE 6A01 push 01h
004098E0 FFD3 call ebx;Sleep関数を呼び出し
004098E2 FFD7 call edi;timeGetTime関数を呼び出し
004098E4 8B0D08A04A00 mov ecx,[004AA008h];上記参照
004098EA 8BD0 mov edx,eax
004098EC 2BD1 sub edx,ecx
004098EE 3BD6 cmp edx,esi
004098F0 72DF jc 004098D1h;条件に応じて処理をループ
004098F2 5F pop edi
004098F3 5E pop esi
004098F4 5B pop ebx
004098F5 5D pop ebp
004098F6 C3 ret
* Referenced by:
| 004098DC(C)
|
004098F7 56 push esi
004098F8 FFD3 call ebx;Sleep関数を呼び出し
* Referenced by:
| 0040989B(C), 004098A4(C), 004098C9(C), 004098D3(C)
|
004098FA 5F pop edi
004098FB 5E pop esi
004098FC 5B pop ebx
004098FD 5D pop ebp
004098FE C3 ret