//8B 0D F8 DA 37 00 //A1 F4 DA 37 00 8A 15 E4 C6 37 00 84 D2 6A 00 6A 00 6A 30 6A 06 6A 00 6A 16 //51 68 00 05 00 00 //50 68 D0 02 00 00 90 90 90 90 90 8b 46 28 mov eax, [esi+28] 51 push ecx 8b 4e 2c mov ecx, [esi+2c] 52 push edx 8b 56 04 mov edx, [esi+4] 50 push eax 51 8b 4e 2c 52 8b 56 04 90 6a 40 90 The 6th 'x' in CreateDevice(x,x,x,x,x,x,x) is the struct _D3DPRESENT_PARAMETERS_. This describes the presentation parameters. It just so happens that this struct holds a Dword 'Flags'. Flags is what all previous patches have been looking for i.e. patching a 20 (interlaced) / 120 (interlaced 10x11 aspect to 00 (autoslect) / 40 (progressive). Flags can be set to 0, or to one or more flags ORed together. Within the CreateDevice call the struct is broken down, 'Flags' being the 11th value is stored at +28h. Below you can see that the original XBE movs edi+28h to edx (mov edx, [edi+28h]), this however isn't pushed to SetVideoMode this the end (push edx), this means the the 1st arg of the setVideoMode must be the value for 'Flags'. If i could push a value of 0 and cause it to ignor the original value of edi+28h then it would cause the display to autoselect 480i/p! To do this however would mean to 'nop' out 8B 57 28 with 90 90 90 and as you can see push edx (52) is only one hex a push 0 (6A 00) requires 2. Now its not possible to push 0 at the location of 90 90 90 since the push(s) need to be in order. So to make this patch work the code was rearanged as shown below. CODE [b]Original XBE [/b] 8B 57 28 mov edx, [edi+28h] 50 push eax 8B 47 30 mov eax, [edi+30h] 50 push eax 8B 47 2C mov eax, [edi+2Ch] 51 push ecx 8B 4F 04 mov ecx, [edi+4] 52 push edx call ?SetVideoMode@CMiniport@D3D@@QAEXKKKKW4_D3DFORMAT@@KK@Z; D3D::CMiniport::SetVideoMode(ulong,ulong,ulong,ulong,_D3DFORMAT,ulong,ulong) 8B 57 28 50 8B 47 30-50 8B 47 2C 51 8B 4F 04 52 [b]Patched XBE[/b] 50 push eax 8B 47 30 mov eax, [edi+30h] 50 push eax 8B 47 2C mov eax, [edi+2Ch] 51 push ecx 8B 4F 04 mov ecx, [edi+4] 90 nop 6A 00 push 0 90 nop call ?SetVideoMode@CMiniport@D3D@@QAEXKKKKW4_D3DFORMAT@@KK@Z; D3D::CMiniport::SetVideoMode(ulong,ulong,ulong,ulong,_D3DFORMAT,ulong,ulong) 50 8B 47 30 50 8B 47 2C 51 8B 4F 04 90 6A 00 The patch biggrin.gif Replace 8B 57 28 50 8B 47 30-50 8B 47 2C 51 8B 4F 04 52 with: 50 8B 47 30 50 8B 47 2C 51 8B 4F 04 90 6A 00 90 I-Ninja @ 720p (WIP) I mentioned eons ago that i had managed to get I-Ninja to run 720p. Graphical errors are noticable but if you want to see what it looks like... this should do the trick.. replace CODE C7 02 80 02 00 00 C7 42 04 E0 01 00 00 with CODE C7 02 00 05 00 00 C7 42 04 D0 02 00 00 and replace CODE 81 C9 00 00 00 00 or 81 C9 00 20 00 00* with CODE 81 C9 00 40 00 00