Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library dx7wz; uses windows;//,log;
- {$hints off}
- const thrash = 'dx7z.dll';
- var
- fRenderHeight,fRenderWidth:single;
- _fltused,
- mAdjustX,
- mAdjustY,
- mRenderHeight,
- mRenderWidth,
- mScreenHeight,
- mScreenWidth
- //Base_setstate
- : integer;
- pVertices :array [0..131000] of byte;
- newVertices : pointer = @pVertices;
- var mClipped: integer = 0;
- var mIngame: integer = 0;
- (*
- function qq_UaYAPAXIaZ (len:integer): pointer; cdecl;
- var mem : pointer;
- begin
- GetMem (mem, len); result := mem;
- end;
- procedure qq_VaYAXPAXaZ (mem:pointer); cdecl;
- begin
- FreeMem (mem);
- end;
- function qq2aYAPAXIaZ (len:integer): pointer; cdecl;
- var mem : pointer;
- begin
- GetMem (mem, len); result := mem;
- end;
- procedure qq3aYAXPAXaZ (mem:pointer); cdecl;
- begin
- FreeMem (mem);
- end;
- *)
- { $L widescr}
- procedure updateRender(mode,inf:integer); forward;//external;
- function THRASH_setvideomode(wParam,lParam, int : integer):integer; stdcall; external thrash name '_THRASH_setvideomode@12';
- function _THRASH_about:integer;external thrash name '_THRASH_about@0';
- procedure _THRASH_clearwindow;external thrash name '_THRASH_clearwindow@0';
- procedure _THRASH_clip;external thrash name '_THRASH_clip@16';
- procedure _THRASH_drawline;external thrash name '_THRASH_drawline@8';
- procedure _THRASH_drawlinemesh;external thrash name '_THRASH_drawlinemesh@12';
- procedure _THRASH_drawlinestrip_12;external thrash name '_THRASH_drawlinestrip@12';
- procedure _THRASH_drawlinestrip_8;external thrash name '_THRASH_drawlinestrip@8';
- procedure _THRASH_drawpoint;external thrash name '_THRASH_drawpoint@4';
- procedure _THRASH_drawpointmesh;external thrash name '_THRASH_drawpointmesh@12';
- procedure _THRASH_drawpointstrip;external thrash name '_THRASH_drawpointstrip@8';
- procedure _THRASH_drawquad;external thrash name '_THRASH_drawquad@16';
- procedure _THRASH_drawquadmesh;external thrash name '_THRASH_drawquadmesh@12';
- procedure _THRASH_drawsprite;external thrash name '_THRASH_drawsprite@8';
- procedure _THRASH_drawspritemesh;external thrash name '_THRASH_drawspritemesh@12';
- procedure _THRASH_drawtri;external thrash name '_THRASH_drawtri@12';
- procedure _THRASH_drawtrifan_12;external thrash name '_THRASH_drawtrifan@12';
- procedure _THRASH_drawtrifan_8;external thrash name '_THRASH_drawtrifan@8';
- procedure _THRASH_drawtrimesh;external thrash name '_THRASH_drawtrimesh@12';
- procedure _THRASH_drawtristrip_12;external thrash name '_THRASH_drawtristrip@12';
- procedure _THRASH_drawtristrip_8;external thrash name '_THRASH_drawtristrip@8';
- procedure _THRASH_flushwindow;external thrash name '_THRASH_flushwindow@0';
- procedure _THRASH_getstate;external thrash name '_THRASH_getstate@4';
- procedure _THRASH_idle;external thrash name '_THRASH_idle@0';
- procedure _THRASH_init;external thrash name '_THRASH_init@0';
- procedure _THRASH_is;external thrash name '_THRASH_is@0';
- procedure _THRASH_lockwindow;external thrash name '_THRASH_lockwindow@0';
- procedure _THRASH_pageflip;external thrash name '_THRASH_pageflip@0';
- procedure _THRASH_readrect;external thrash name '_THRASH_readrect@20';
- procedure _THRASH_restore;external thrash name '_THRASH_restore@0';
- procedure _THRASH_selectdisplay;external thrash name '_THRASH_selectdisplay@4';
- procedure _THRASH_setstate;external thrash name '_THRASH_setstate@8';
- procedure _THRASH_settexture;external thrash name '_THRASH_settexture@4';
- //procedure _THRASH_setvideomode;external thrash name '_THRASH_setvideomode@12';
- procedure _THRASH_sync;external thrash name '_THRASH_sync@4';
- procedure _THRASH_talloc;external thrash name '_THRASH_talloc@20';
- procedure _THRASH_tfree;external thrash name '_THRASH_tfree@4';
- procedure _THRASH_treset;external thrash name '_THRASH_treset@0';
- procedure _THRASH_tupdate;external thrash name '_THRASH_tupdate@12';
- procedure _THRASH_unlockwindow;external thrash name '_THRASH_unlockwindow@4';
- procedure _THRASH_window;external thrash name '_THRASH_window@4';
- procedure _THRASH_writerect;external thrash name '_THRASH_writerect@20';
- function about:integer; asm jmp _THRASH_about end;
- //extern "C" void updateRender(uint32_t mode, Info* inf) {
- // DisplayMode modeInfo = inf->displayModes[mode];
- // updateRenderSize(modeInfo.width, modeInfo.height);
- // return Base::setvideomode(mode, b, c);
- // }
- function setvideomode(a,b,c : integer):integer; stdcall; // external thrash name '_THRASH_setvideomode@12';
- begin
- // writeln ('setvideomode: ', a, ' ', b, ' ',c );
- updateRender(a,about);
- result := THRASH_setvideomode(a,b,c);
- // if ( a = 1) and ( b = 2) // and ( c = 1)
- // then
- // result := THRASH_setvideomode( 7, 2, 2) else
- // result := THRASH_setvideomode(wParam,lParam, int);
- //1 2 1
- // result := THRASH_setvideomode( 9, 2, 2);
- //writeln ('mAdjustX ',mAdjustX, ' mAdjustY ',mAdjustY);
- //writeln ('mScreenHeight ',mScreenHeight, ' mScreenWidth ',mScreenWidth);
- //writeln ('mRenderHeight ',mRenderHeight, ' mRenderWidth ',mRenderWidth);
- //mRenderHeight,
- //mRenderWidth,
- //mScreenHeight,
- //mScreenWidth
- //writeln (mRenderWidth, mRenderHeight);// = renderHeight;
- // mScreenHeight, ' ', mScreenWidth);
- //mAdjustX,
- //mAdjustY,
- //mRenderHeight,
- //mRenderWidth,
- //mScreenHeight,
- //mScreenWidth,
- // result := THRASH_setvideomode( 9, 2, 2);
- //procedure setvideomode; asm
- // xor eax, eax
- // ret 0Ch
- // jmp _THRASH_setvideomode
- end;
- procedure clearwindow; asm jmp _THRASH_clearwindow end;
- procedure clip; asm jmp _THRASH_clip end;
- procedure drawline; asm jmp _THRASH_drawline end;
- procedure drawlinemesh; asm jmp _THRASH_drawlinemesh end;
- procedure drawlinestrip_12; asm jmp _THRASH_drawlinestrip_12 end;
- procedure drawlinestrip_8; asm jmp _THRASH_drawlinestrip_8 end;
- procedure drawpoint; asm jmp _THRASH_drawpoint end;
- procedure drawpointmesh; asm jmp _THRASH_drawpointmesh end;
- procedure drawpointstrip; asm jmp _THRASH_drawpointstrip end;
- procedure drawquad; asm jmp _THRASH_drawquad end;
- procedure drawquadmesh; asm jmp _THRASH_drawquadmesh end;
- procedure drawsprite; asm jmp _THRASH_drawsprite end;
- procedure drawspritemesh; asm jmp _THRASH_drawspritemesh end;
- procedure drawtri; asm jmp _THRASH_drawtri end;
- procedure drawtrifan_12; asm jmp _THRASH_drawtrifan_12 end;
- procedure drawtrifan_8; asm jmp _THRASH_drawtrifan_8 end;
- procedure drawtrimesh; asm jmp _THRASH_drawtrimesh end;
- procedure drawtristrip_12; asm jmp _THRASH_drawtristrip_12 end;
- procedure drawtristrip_8; asm jmp _THRASH_drawtristrip_8 end;
- procedure flushwindow; asm jmp _THRASH_flushwindow end;
- procedure getstate; asm jmp _THRASH_getstate end;
- procedure idle; asm jmp _THRASH_idle end;
- procedure init; asm jmp _THRASH_init end;
- procedure _is; asm jmp _THRASH_is end;
- procedure lockwindow; asm jmp _THRASH_lockwindow end;
- procedure pageflip; asm jmp _THRASH_pageflip end;
- procedure readrect;
- asm
- mov eax, DWORD PTR [esp+4]
- or eax, DWORD PTR [esp+8]
- test eax, -2147483648
- je @@B2_3
- mov eax, 1
- ret 20
- @@B2_3:
- jmp _THRASH_readrect
- xor eax, eax
- ret 20
- end;
- // template <typename Base> bool BaseWidescreenThrashDriver<Base>::readrect(uint32_t x, uint32_t y, uint32_t width, uint32_t height, void* dest) {
- // if (x & 0x80000000 || y & 0x80000000) {
- // We filter potentially problematic values here. For a more complete
- // explanation, see the readrect comment in 3rash.h, but in short:
- // it's probably the NFSPU Normandie crash.
- // return true;
- // //_asm nop
- // }
- // return Base::readrect(x, y, width, height, dest);
- // }
- procedure restore; asm jmp _THRASH_restore end;
- procedure selectdisplay; asm jmp _THRASH_selectdisplay end;
- procedure setstate; asm jmp _THRASH_setstate end;
- procedure Wsetstate; forward;//external;
- procedure setstate2; asm jmp Wsetstate end;
- procedure settexture; asm jmp _THRASH_settexture end;
- procedure sync; asm jmp _THRASH_sync end;
- procedure talloc; asm jmp _THRASH_talloc end;
- procedure tfree; asm jmp _THRASH_tfree end;
- procedure treset; asm jmp _THRASH_treset end;
- procedure tupdate; asm jmp _THRASH_tupdate end;
- procedure unlockwindow; asm jmp _THRASH_unlockwindow end;
- procedure window; asm jmp _THRASH_window end;
- procedure writerect; asm jmp _THRASH_writerect end;
- exports
- about name '_THRASH_about@0',
- clearwindow name '_THRASH_clearwindow@0',
- clip name '_THRASH_clip@16',
- drawline name '_THRASH_drawline@8',
- drawlinemesh name '_THRASH_drawlinemesh@12',
- drawlinestrip_12 name '_THRASH_drawlinestrip@12',
- drawlinestrip_8 name '_THRASH_drawlinestrip@8',
- drawpoint name '_THRASH_drawpoint@4',
- drawpointmesh name '_THRASH_drawpointmesh@12',
- drawpointstrip name '_THRASH_drawpointstrip@8',
- drawquad name '_THRASH_drawquad@16',
- drawquadmesh name '_THRASH_drawquadmesh@12',
- drawsprite name '_THRASH_drawsprite@8',
- drawspritemesh name '_THRASH_drawspritemesh@12',
- drawtri name '_THRASH_drawtri@12',
- drawtrifan_12 name '_THRASH_drawtrifan@12',
- drawtrifan_8 name '_THRASH_drawtrifan@8',
- drawtrimesh name '_THRASH_drawtrimesh@12',
- drawtristrip_12 name '_THRASH_drawtristrip@12',
- drawtristrip_8 name '_THRASH_drawtristrip@8',
- flushwindow name '_THRASH_flushwindow@0',
- getstate name '_THRASH_getstate@4',
- idle name '_THRASH_idle@0',
- init name '_THRASH_init@0',
- _is name '_THRASH_is@0',
- lockwindow name '_THRASH_lockwindow@0',
- pageflip name '_THRASH_pageflip@0',
- readrect name '_THRASH_readrect@20',
- restore name '_THRASH_restore@0',
- selectdisplay name '_THRASH_selectdisplay@4',
- setstate2 name '_THRASH_setstate@8',
- settexture name '_THRASH_settexture@4',
- setvideomode name '_THRASH_setvideomode@12',
- sync name '_THRASH_sync@4',
- talloc name '_THRASH_talloc@20',
- tfree name '_THRASH_tfree@4',
- treset name '_THRASH_treset@0',
- tupdate name '_THRASH_tupdate@12',
- unlockwindow name '_THRASH_unlockwindow@4',
- window name '_THRASH_window@4',
- writerect name '_THRASH_writerect@20'
- ;
- function maxv(val:integer):integer;//external;
- asm
- xor edx, edx
- cmp eax, edx //0
- cmovl eax, edx
- end;
- procedure updateRenderSize(renderWidth, renderHeight:integer);//cdecl;
- var
- // fRenderHeight,fRenderWidth,
- fScreenWidth, fScreenHeight, screenAspectRatio:single;
- begin
- mRenderWidth := renderWidth;
- mRenderHeight := renderHeight;
- fRenderHeight:= renderHeight;
- fRenderWidth:= renderWidth;
- fScreenHeight:= mScreenHeight;
- fScreenWidth:= mScreenWidth;
- screenAspectRatio := mScreenWidth / mScreenHeight;
- // madjustY :=round ((fScreenHeight * screenAspectRatio * 0.75 - fScreenHeight) / 2.0);
- // int adjustY = (int)(((float)mRenderHeight * screenAspectRatio * 0.75 - mRenderHeight) / 2.0);
- mAdjustY := maxv (round((fRenderHeight * screenAspectRatio * 0.75 - fRenderHeight) / 2.0));
- mAdjustX := maxv (round((fRenderWidth / screenAspectRatio / 0.75 - fRenderWidth) / 2.0));
- // mAdjustY := maxv (round((fRenderHeight * screenAspectRatio * 0.85 - fRenderHeight) / 2.0));
- // mAdjustX := maxv (round((fRenderWidth / screenAspectRatio / 0.65 - fRenderWidth) / 2.0));
- end;
- procedure processVertices;// PROC NEAR
- const
- _2il0floatpacket_7:integer =$03e4ccccd;
- _2il0floatpacket_5:integer =$03f800000;
- _2il0floatpacket_3:integer =$040000000;
- _2il0floatpacket_1:integer =$0bf000000;
- //; parameter 1: eax
- //; parameter 2: edx
- asm
- @B1@1:
- push edi
- push esi
- push ebp
- sub esp, 16
- mov esi, edx
- mov edi, eax
- cmp DWORD PTR mClipped, 0
- jne @B1@19
- @B1@2:
- xor ebp, ebp
- xor ecx, ecx
- test edi, edi
- jle @B1@25
- @B1@3:
- mov eax, DWORD PTR newVertices
- movss xmm3, DWORD PTR _2il0floatpacket_5
- movss xmm2, DWORD PTR _2il0floatpacket_1
- movss xmm1, DWORD PTR _2il0floatpacket_3
- movss xmm0, DWORD PTR _2il0floatpacket_7
- lea edx, DWORD PTR [ecx+ecx]
- add edx, edx
- add edx, edx
- add edx, edx
- add edx, edx
- mov DWORD PTR [esp+4], edi
- mov DWORD PTR [esp+12], ebx
- @B1@4:
- mov ebx, DWORD PTR [esi+edx]
- mov DWORD PTR [edx+eax], ebx
- mov ebx, DWORD PTR [esi+edx+4]
- mov DWORD PTR [edx+eax+4], ebx
- mov ebx, DWORD PTR [esi+edx+8]
- mov DWORD PTR [edx+eax+8], ebx
- mov ebx, DWORD PTR [esi+edx+12]
- mov DWORD PTR [edx+eax+12], ebx
- mov ebx, DWORD PTR [esi+edx+16]
- mov DWORD PTR [edx+eax+16], ebx
- mov ebx, DWORD PTR [esi+edx+20]
- mov DWORD PTR [edx+eax+20], ebx
- mov ebx, DWORD PTR [esi+edx+24]
- mov DWORD PTR [edx+eax+24], ebx
- mov ebx, DWORD PTR [esi+edx+28]
- mov DWORD PTR [edx+eax+28], ebx
- test ebp, ebp
- je @B1@7
- @B1@5:
- mov eax, DWORD PTR newVertices
- lea ebx, DWORD PTR [edx+eax]
- mov edi, DWORD PTR mAdjustY
- test edi, edi
- jle @B1@21
- @B1@6:
- movss xmm7, DWORD PTR [ebx+4]
- movss xmm4, DWORD PTR fRenderHeight
- movss xmm6, xmm7
- divss xmm6, xmm4
- addss xmm6, xmm2
- mulss xmm6, xmm1
- cvtsi2ss xmm5, edi
- mulss xmm6, xmm5
- addss xmm7, xmm6
- movss DWORD PTR [ebx+4], xmm7
- jmp @B1@17
- @B1@7:
- mov eax, DWORD PTR newVertices
- lea ebx, DWORD PTR [edx+eax]
- cmp DWORD PTR mIngame, 0
- je @B1@9
- @B1@8:
- movss xmm4, DWORD PTR [ebx+8]
- mov ebx, 1
- mov edi, 0
- comiss xmm4, xmm0
- cmovae edi, ebx
- and edi, 255
- jmp @B1@10
- @B1@9:
- movss xmm4, DWORD PTR [ebx+12]
- mov ebx, 1
- mov edi, 0
- comiss xmm4, xmm3
- cmovb edi, ebx
- and edi, 255
- @B1@10:
- test edi, edi
- je @B1@17
- @B1@11:
- mov ebp, 1
- xor edi, edi
- test ecx, ecx
- jl @B1@17
- @B1@12:
- lea ebx, DWORD PTR [edi+edi]
- add ebx, ebx
- add ebx, ebx
- add ebx, ebx
- add ebx, ebx
- mov DWORD PTR [esp+8], ebp
- mov DWORD PTR [esp], esi
- @B1@13:
- lea ebp, DWORD PTR [eax+ebx]
- mov esi, DWORD PTR mAdjustY
- test esi, esi
- jle @B1@23
- @B1@14:
- movss xmm7, DWORD PTR [ebp+4]
- movss xmm4, DWORD PTR fRenderHeight
- movss xmm6, xmm7
- divss xmm6, xmm4
- addss xmm6, xmm2
- mulss xmm6, xmm1
- cvtsi2ss xmm5, esi
- mulss xmm6, xmm5
- addss xmm7, xmm6
- movss DWORD PTR [ebp+4], xmm7
- @B1@15:
- add ebx, 32
- inc edi
- cmp edi, ecx
- jle @B1@13
- @B1@16:
- mov ebp, DWORD PTR [esp+8]
- mov esi, DWORD PTR [esp]
- @B1@17:
- add edx, 32
- inc ecx
- mov ebx, DWORD PTR [esp+4]
- cmp ecx, ebx
- jl @B1@4
- @B1@18:
- mov ebx, DWORD PTR [esp+12]
- jmp @B1@20
- @B1@19:
- mov eax, DWORD PTR newVertices
- @B1@20:
- add esp, 16
- pop ebp
- pop esi
- pop edi
- ret
- @B1@21:
- mov edi, DWORD PTR mAdjustX
- test edi, edi
- jle @B1@17
- @B1@22:
- movss xmm7, DWORD PTR [ebx]
- movss xmm4, DWORD PTR fRenderWidth
- movss xmm6, xmm7
- divss xmm6, xmm4
- addss xmm6, xmm2
- mulss xmm6, xmm1
- cvtsi2ss xmm5, edi
- mulss xmm6, xmm5
- addss xmm7, xmm6
- movss DWORD PTR [ebx], xmm7
- mov eax, DWORD PTR newVertices
- jmp @B1@17
- @B1@23:
- mov esi, DWORD PTR mAdjustX
- test esi, esi
- jle @B1@15
- @B1@24:
- movss xmm7, DWORD PTR [ebp]
- movss xmm4, DWORD PTR fRenderWidth
- movss xmm6, xmm7
- divss xmm6, xmm4
- addss xmm6, xmm2
- mulss xmm6, xmm1
- cvtsi2ss xmm5, esi
- mulss xmm6, xmm5
- addss xmm7, xmm6
- movss DWORD PTR [ebp], xmm7
- mov eax, DWORD PTR newVertices
- jmp @B1@15
- @B1@25:
- mov eax, DWORD PTR newVertices
- jmp @B1@20
- end;
- //; -- Begin _Wsetstate@8
- //; mark_begin;
- // ALIGN 4
- // PUBLIC _Wsetstate@8
- procedure Wsetstate;
- //; parameter 1: 16 + esp
- //; parameter 2: 20 + esp
- //$B2$1: ; Preds $B2$0
- asm
- push esi
- push ebp
- push ebx
- mov esi, DWORD PTR [esp+16]
- mov ebp, DWORD PTR [esp+20]
- cmp esi, 435
- jne @@B2@3 // ; Prob 60%
- // ; LOE ebp esi edi
- @@B2@2: // ; Preds $B2$1
- mov eax, DWORD PTR [ebp+4] // ;307.17
- cmp eax, 452 // ;307.13
- je @@B2@5 // ; Prob 16% ;307.13
- // ; LOE ebp esi edi
- @@B2@3: // ; Preds $B2$2 $B2$1
- push ebp
- push esi
- call setstate // _setstate@8
- // ; LOE eax edi
- @@B2@4: // ; Preds $B2$3
- pop ebx
- pop ebp
- pop esi
- ret 8
- @@B2@5: // ; Preds $B2$2 ; Infreq
- mov ebx, DWORD PTR [ebp+8]
- mov eax, DWORD PTR [ebp+12]
- mov edx, ebx
- call processVertices
- @@B2@6: // ; Preds $B2$5 ; Infreq
- mov DWORD PTR [ebp+8], eax
- push ebp
- push esi
- call setstate //_setstate@8
- // ; LOE eax ebx ebp edi
- @@B2@7: // ; Preds $B2$6 ; Infreq
- mov DWORD PTR [ebp+8], ebx
- pop ebx
- pop ebp
- pop esi
- ret 8
- end;
- // PUBLIC updateRender
- procedure updateRender;
- asm
- //; parameter 1: eax
- //; parameter 2: edx
- lea ecx, DWORD PTR [eax+eax*4]// ;337.32
- mov edx, DWORD PTR [edx+64] // ;337.32
- mov eax, DWORD PTR [edx+ecx*8] // ;338.9
- mov edx, DWORD PTR [edx+ecx*8+4] // ;338.9
- call updateRenderSize // ;338.9
- // ; LOE ebx ebp esi edi
- ret
- end;
- //asm
- // mov eax, 1
- // ret 0Ch
- begin
- // Allocconsole;
- mScreenWidth := GetSystemMetrics(SM_CXSCREEN);
- mScreenHeight := GetSystemMetrics(SM_CYSCREEN);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement