メインサイトへ戻る

[リスト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