/* ------------------------------- Sprite mixer -------------------------------------- */
for (Index=63;Index!=-1;Index--) {
u32 px = sprite_OAM[Index].PosX;
u32 py = sprite_OAM[Index].PosY;
u32 at = sprite_OAM[Index].Attrs;
u32 id = sprite_OAM[Index].Tile_Id; /* cache reduce */
/* -------------------------- OAM test -------------------------------- */
if (0 == (at & OAM_DISABLE_BIT))
/* enable this OAM ? */ {
if (ntCTRL.Tran_Id != id)
/* not TransTile ? */ {
if (py < 232
&& px < 256)
/* in Range ? */ {
u32 ix = 0;
u32 ex = 1;
u32 rx = 8;
u32 hx = 0;
u32 iy = 0;
u32 ey = 1;
u32 ry = 8;
u32 hy = 0;
u32 ep = 0;
if (sprite_OAM[Index].Attrs & OAM_VERTFILP_BIT)
/* vert flip */ {
iy = 7;
ey = -1;
ry = -1;
}
if (sprite_OAM[Index].Attrs & OAM_HORIFILP_BIT)
/* hori flip */ {
ix = 7;
ep = 7;
ex = -1;
rx = -1;
}
ptr_OAM = &pEmuVideoUpdate[py*272+px];
pTile_Cur = &Sprite_PooL[((id&63)<<3)+((id>>6)<<3)*PPITH_DWORD]; // lock area
if (at & OAM_BACKITOS_BIT)
/* background sprite ? */ {
for (iy = iy; iy != ry; iy += ey) {
for (ix = ep; ix != rx; ix += ex) {
/* ------------------- line render ------------------ */
if (ptr_OAM[hx+hy*272] != tc) {
ptr_OAM[hy*272+hx] = pTile_Cur[PPITH_DWORD*iy+ix];
}
hx++;
}
hx = 0; /* reset x pos */
hy ++;
}
} else {
/* foreground sprite ? */
for (iy = iy; iy != ry; iy += ey) {
for (ix = ep; ix != rx; ix += ex) {
/* ------------------- line render ------------------ */
if (pTile_Cur[PPITH_DWORD*iy+ix] != tc) {
ptr_OAM[hy*272+hx] = pTile_Cur[PPITH_DWORD*iy+ix];
}
hx++;
}
hx = 0; /* reset x pos */
hy ++;
}
}
}
}
}
}
/* ------------------------------- Direct3D output -------------------------------------- */
//#include "Inline_Misc2.h"
//#
/*== 100019CE A1 C0 CE 04 10 mov eax,dword ptr [_IBaseGraphics (1004CEC0h)]
== 100019D3 8B 08 mov ecx,dword ptr [eax]
== 100019D5 8B 51 44 mov edx,dword ptr [ecx+44h]
== 100019D8 6A 00 push 0
== 100019DA 6A 00 push 0
== 100019DC 6A 00 push 0
== 100019DE 6A 00 push 0
== 100019E0 50 push eax
== 100019E1 FF D2 call edx == */
/*== nes5StepAlphaALLScreen(4,pEmuVideoUpdate);
//__asm int 3
IBaseGraphics->lpVtbl->Present(IBaseGraphics,0,0,0,0); == */ {
STATIC ALIGN DWORD DWORDTLB[16] =
/* Mask */ {
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x40004000, 0x00004000, 0x40004000, 0x00004000,
0x80008000, 0x00008000, 0x80008000, 0x00008000,
0xC000C000, 0x0000C000, 0xC000C000, 0x0000C000
};
ASM_BEGIN
push ebx ; U - save old frame
push ebp ; V - save old frame
push esi ; U - save old frame
push edi ; V - save old frame
mov eax, DWORD PTR[Alpha_Count] ; U - fetch step count
mov edi, DWORD PTR[GVPointer+4] ; V/N fetch VPointer
cmp eax, 4 ; U -
jb _BST ; V/N
mov ebx, DWORD PTR[GVPointer+0] ; U - fetch Pitch
mov esi, [pEmuVideoUpdate] ; V - fecth SPointer
mov eax, 224
sub ebx, 1024
mov edx, 1
mov ecx, 8 ; U loop_x
mov ebp, 128
align 16
MIX256:
; -------------------------------------------------------
; fetch mem
; -------------------------------------------------------
movdqa xmm0, [esi+000h]
movdqa xmm1, [esi+010h]
movdqa xmm2, [esi+020h]
movdqa xmm3, [esi+030h]
movdqa xmm4, [esi+040h]
movdqa xmm5, [esi+050h]
movdqa xmm6, [esi+060h]
movdqa xmm7, [esi+070h]
; -------------------------------------------------------
; write mem
; -------------------------------------------------------
movdqa [edi+000h], xmm0
movdqa [edi+010h], xmm1
movdqa [edi+020h], xmm2
movdqa [edi+030h], xmm3
movdqa [edi+040h], xmm4
movdqa [edi+050h], xmm5
movdqa [edi+060h], xmm6
movdqa [edi+070h], xmm7
add esi, ebp
add edi, ebp
sub ecx, edx
jne MIX256
add esi, 64
add edi, ebx
mov ecx, 8
sub eax, edx
jne MIX256
jmp __GGSA_REQANS_ERX
align 16
_BST:
lea eax, [eax*4] ; U - *4
mov esi, [pEmuVideoUpdate] ; V - fecth SPointer
movdqa xmm7, xmmword ptr[eax*4+DWORDTLB]
pxor xmm6, xmm6
mov ebx, DWORD PTR[GVPointer+0] ; U - fetch Pitch
mov eax, 224
sub ebx, 1024
mov edx, 1
mov ecx, 16 ; U loop_x
mov ebp, 64
align 16
S_LOOP:
movdqa xmm0, [esi+000h] ; fetch P0
movdqa xmm1, [esi+010h] ; fetch P1
movdqa xmm2, [esi+020h] ; fetch P2
movdqa xmm3, [esi+030h] ; fetch P3
movdqa xmm4, xmm0 ; xmm4 = xmm0 = P0
punpcklbw xmm0, xmm6 ; RGB cross-decomposition L0-L1 (P0)
pmulhuw xmm0, xmm7 ; RGB cross-mul get high L0-L1 (P0)
movdqa xmm5, xmm1 ; xmm5 = xmm1 = P1
punpckhbw xmm4, xmm6 ; RGB cross-decomposition H0-H1 (P0)
pmulhuw xmm4, xmm7 ; RGB cross-mul get high H0-H1 (P0)
punpcklbw xmm1, xmm6 ; RGB cross-decomposition L0-L1 (P1)
packuswb xmm0, xmm4 ; P0 merge
pmulhuw xmm1, xmm7 ; RGB cross-mul get high L0-L1 (P1)
punpckhbw xmm5, xmm6 ; RGB cross-decomposition H0-H1 (P1)
movdqa xmm4, xmm2 ; xmm4 = xmm2 = P2
pmulhuw xmm5, xmm7 ; RGB cross-mul get high H0-H1 (P1)
punpcklbw xmm2, xmm6 ; RGB cross-decomposition L0-L1 (P2)
packuswb xmm1, xmm5 ; P1 merge
pmulhuw xmm2, xmm7 ; RGB cross-mul get high L0-L1 (P2)
punpckhbw xmm4, xmm6 ; RGB cross-decomposition H0-H1 (P2)
movdqa xmm5, xmm3 ; xmm5 = xmm3 = P3
pmulhuw xmm4, xmm7 ; RGB cross-mul get high H0-H1 (P2)
punpcklbw xmm3, xmm6 ; RGB cross-decomposition L0-L1 (P3)
packuswb xmm2, xmm4 ; P2 merge
pmulhuw xmm3, xmm7 ; RGB cross-mul get high L0-L1 (P3)
punpckhbw xmm5, xmm6 ; RGB cross-decomposition H0-H1 (P3)
pmulhuw xmm5, xmm7 ; RGB cross-mul get high H0-H1 (P3)
packuswb xmm3, xmm5 ; P3 merge
movdqa [edi+000h], xmm0 ; write P0
movdqa [edi+010h], xmm1 ; write P1
movdqa [edi+020h], xmm2 ; write P2
movdqa [edi+030h], xmm3 ; write P3
add esi, ebp ; next 64 bytes
add edi, ebp ; next 64 bytes
sub ecx, edx ; loop_x --
jne S_LOOP ; JCC contine/out
add esi, 64 ; next line
add edi, ebx ; next line
mov ecx, 16
sub eax, edx
jne S_LOOP ; JCC contine/out
__GGSA_REQANS_ERX:
push eax
push eax
push eax
push eax
mov eax, DWORD PTR[IBaseGraphics]
mov ecx, DWORD PTR[eax]
mov edx, DWORD PTR[ecx+68]
push eax
call edx
pop edi
pop esi
pop ebp
pop ebx
ASM_END
}
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTcHJpdGUgbWl4ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8gCglmb3IgKEluZGV4PTYzO0luZGV4IT0tMTtJbmRleC0tKSB7CgoJCXUzMiBweCA9IHNwcml0ZV9PQU1bSW5kZXhdLlBvc1g7CgkJdTMyIHB5ID0gc3ByaXRlX09BTVtJbmRleF0uUG9zWTsKCQl1MzIgYXQgPSBzcHJpdGVfT0FNW0luZGV4XS5BdHRyczsKCQl1MzIgaWQgPSBzcHJpdGVfT0FNW0luZGV4XS5UaWxlX0lkOyAvKiBjYWNoZSByZWR1Y2UgKi8gCgkJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT0FNIHRlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCQlpZiAoMCA9PSAoYXQgJiBPQU1fRElTQUJMRV9CSVQpKSAKCQkvKiBlbmFibGUgdGhpcyBPQU0gPyAqLyB7CgkJCWlmIChudENUUkwuVHJhbl9JZCAhPSBpZCkKCQkJLyogbm90IFRyYW5zVGlsZSA/ICovIHsKCQkJCWlmIChweSA8IDIzMgoJCQkJJiYgIHB4IDwgMjU2KQoJCQkJLyogaW4gUmFuZ2UgPyAqLyB7CgkJCQkJdTMyIGl4ID0gMDsKCQkJCQl1MzIgZXggPSAxOwoJCQkJCXUzMiByeCA9IDg7CgkJCQkJdTMyIGh4ID0gMDsKCQkJCQl1MzIgaXkgPSAwOwoJCQkJCXUzMiBleSA9IDE7CgkJCQkJdTMyIHJ5ID0gODsKCQkJCQl1MzIgaHkgPSAwOwoJCQkJCXUzMiBlcCA9IDA7CgoJCQkJCWlmIChzcHJpdGVfT0FNW0luZGV4XS5BdHRycyAmIE9BTV9WRVJURklMUF9CSVQpIAoJCQkJCS8qIHZlcnQgZmxpcCAqLyB7CgkJCQkJCWl5ID0gNzsKCQkJCQkJZXkgPSAtMTsKCQkJCQkJcnkgPSAtMTsKCQkJCQl9CgkJCQkJaWYgKHNwcml0ZV9PQU1bSW5kZXhdLkF0dHJzICYgT0FNX0hPUklGSUxQX0JJVCkKCQkJCQkvKiBob3JpIGZsaXAgKi8gewoJCQkJCQlpeCA9IDc7CgkJCQkJCWVwID0gNzsKCQkJCQkJZXggPSAtMTsKCQkJCQkJcnggPSAtMTsKCQkJCQl9CgkJCQkJcHRyX09BTSA9ICZwRW11VmlkZW9VcGRhdGVbcHkqMjcyK3B4XTsKCQkJCQlwVGlsZV9DdXIgPSAmU3ByaXRlX1Bvb0xbKChpZCY2Myk8PDMpKygoaWQ+PjYpPDwzKSpQUElUSF9EV09SRF07IC8vIGxvY2sgYXJlYQoJCQkJCWlmIChhdCAmIE9BTV9CQUNLSVRPU19CSVQpCgkJCQkJLyogYmFja2dyb3VuZCBzcHJpdGUgPyAqLyB7CgkJCQkJCWZvciAoaXkgPSBpeTsgaXkgIT0gcnk7IGl5ICs9IGV5KSB7CgkJCQkJCQlmb3IgKGl4ID0gZXA7IGl4ICE9IHJ4OyBpeCArPSBleCkgewoJCQkJCQkJLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBsaW5lIHJlbmRlciAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KCQkJCQkJCQlpZiAocHRyX09BTVtoeCtoeSoyNzJdICE9IHRjKSB7CgkJCQkJCQkJCXB0cl9PQU1baHkqMjcyK2h4XSA9IHBUaWxlX0N1cltQUElUSF9EV09SRCppeStpeF07CgkJCQkJCQkJfQoJCQkJCQkJCWh4Kys7CgkJCQkJCQl9CgkJCQkJCQloeCA9IDA7IC8qIHJlc2V0IHggcG9zICovCgkJCQkJCQloeSArKzsKCQkJCQkJfQoJCQkJCX0gZWxzZSB7CgkJCQkJLyogZm9yZWdyb3VuZCBzcHJpdGUgPyAqLyAKCQkJCQkJZm9yIChpeSA9IGl5OyBpeSAhPSByeTsgaXkgKz0gZXkpIHsKCQkJCQkJCWZvciAoaXggPSBlcDsgaXggIT0gcng7IGl4ICs9IGV4KSB7CgkJCQkJCQkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIGxpbmUgcmVuZGVyIC0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJCQkJCQkJCWlmIChwVGlsZV9DdXJbUFBJVEhfRFdPUkQqaXkraXhdICE9IHRjKSB7CgkJCQkJCQkJCSBwdHJfT0FNW2h5KjI3MitoeF0gPSBwVGlsZV9DdXJbUFBJVEhfRFdPUkQqaXkraXhdOwoJCQkJCQkJCX0KCQkJCQkJCQloeCsrOwoJCQkJCQkJfQoJCQkJCQkJaHggPSAwOyAvKiByZXNldCB4IHBvcyAqLwoJCQkJCQkJaHkgKys7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGlyZWN0M0Qgb3V0cHV0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8vI2luY2x1ZGUgIklubGluZV9NaXNjMi5oIgovLyMgCi8qPT0JMTAwMDE5Q0UgQTEgQzAgQ0UgMDQgMTAgICAgICAgbW92ICAgICAgICAgZWF4LGR3b3JkIHB0ciBbX0lCYXNlR3JhcGhpY3MgKDEwMDRDRUMwaCldICAKPT0JMTAwMDE5RDMgOEIgMDggICAgICAgICAgICAgICAgbW92ICAgICAgICAgZWN4LGR3b3JkIHB0ciBbZWF4XSAgCj09CTEwMDAxOUQ1IDhCIDUxIDQ0ICAgICAgICAgICAgIG1vdiAgICAgICAgIGVkeCxkd29yZCBwdHIgW2VjeCs0NGhdICAKPT0JMTAwMDE5RDggNkEgMDAgICAgICAgICAgICAgICAgcHVzaCAgICAgICAgMCAgCj09CQkxMDAwMTlEQSA2QSAwMCAgICAgICAgICAgICAgICBwdXNoICAgICAgICAwICAKPT0JCTEwMDAxOURDIDZBIDAwICAgICAgICAgICAgICAgIHB1c2ggICAgICAgIDAgIAo9PQkJMTAwMDE5REUgNkEgMDAgICAgICAgICAgICAgICAgcHVzaCAgICAgICAgMCAgCj09CQkxMDAwMTlFMCA1MCAgICAgICAgICAgICAgICAgICBwdXNoICAgICAgICBlYXggIAo9PQkJMTAwMDE5RTEgRkYgRDIgICAgICAgICAgICAgICAgY2FsbCAgICAgICAgZWR4ICA9PSAqLwovKj09CW5lczVTdGVwQWxwaGFBTExTY3JlZW4oNCxwRW11VmlkZW9VcGRhdGUpOwoJLy9fX2FzbSBpbnQgMwoJSUJhc2VHcmFwaGljcy0+bHBWdGJsLT5QcmVzZW50KElCYXNlR3JhcGhpY3MsMCwwLDAsMCk7ID09ICovIHsKCVNUQVRJQyBBTElHTiBEV09SRCBEV09SRFRMQlsxNl0gPQoJCS8qIE1hc2sgKi8gewoJCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAoJCQkweDQwMDA0MDAwLCAweDAwMDA0MDAwLCAweDQwMDA0MDAwLCAweDAwMDA0MDAwLAoJCQkweDgwMDA4MDAwLCAweDAwMDA4MDAwLCAweDgwMDA4MDAwLCAweDAwMDA4MDAwLAoJCQkweEMwMDBDMDAwLCAweDAwMDBDMDAwLCAweEMwMDBDMDAwLCAweDAwMDBDMDAwCgkJCgkJCX07CgkJCUFTTV9CRUdJTgoJCQkJCgkJCQlwdXNoIAkJZWJ4IAkJCQkJOyBVIC0gc2F2ZSBvbGQgZnJhbWUKCQkJCXB1c2ggCQllYnAgCQkJCQk7IFYgLSBzYXZlIG9sZCBmcmFtZSAKCQkJCXB1c2ggCQllc2kgCQkJCQk7IFUgLSBzYXZlIG9sZCBmcmFtZSAKCQkJCXB1c2ggCQllZGkgCQkJCQk7IFYgLSBzYXZlIG9sZCBmcmFtZSAJCgkJCQltb3YJCQllYXgsCURXT1JEIFBUUltBbHBoYV9Db3VudF0JOyBVIC0gZmV0Y2ggc3RlcCBjb3VudCAKCQkJCW1vdgkJCWVkaSwJRFdPUkQgUFRSW0dWUG9pbnRlcis0XQk7IFYvTiBmZXRjaCBWUG9pbnRlciAKCQkJCWNtcAkJCWVheCwJNAkJCQk7IFUgLSAKCQkJCWpiCQkJX0JTVAkJCQkJOyBWL04gCgkJCQltb3YJCQllYngsCURXT1JEIFBUUltHVlBvaW50ZXIrMF0JOyBVIC0gZmV0Y2ggUGl0Y2ggCgkJCQltb3YJCQllc2ksCVtwRW11VmlkZW9VcGRhdGVdCQk7IFYgLSBmZWN0aCBTUG9pbnRlcgoJCQkJbW92CQkJZWF4LAkyMjQKCQkJCXN1YgkJCWVieCwJMTAyNCAKCQkJCW1vdgkJCWVkeCwJMSAKCQkJCW1vdgkJCWVjeCwJOAkJCQk7IFUgbG9vcF94IAoJCQkJbW92CQkJZWJwLAkxMjgKCQkJCWFsaWduIDE2IAoJCQkJTUlYMjU2OgoJCQkJOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCQk7ICAgICAgICAgICBmZXRjaCBtZW0gCgkJCQk7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJCQltb3ZkcWEJeG1tMCwgW2VzaSswMDBoXQoJCQkJCW1vdmRxYQl4bW0xLCBbZXNpKzAxMGhdCgkJCQkJbW92ZHFhICB4bW0yLCBbZXNpKzAyMGhdCgkJCQkJbW92ZHFhICB4bW0zLCBbZXNpKzAzMGhdCgkJCQkJbW92ZHFhCXhtbTQsIFtlc2krMDQwaF0KCQkJCQltb3ZkcWEJeG1tNSwgW2VzaSswNTBoXQoJCQkJCW1vdmRxYSAgeG1tNiwgW2VzaSswNjBoXQoJCQkJCW1vdmRxYSAgeG1tNywgW2VzaSswNzBoXQoJCQkJOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCQk7ICAgICAgICAgICB3cml0ZSBtZW0gCgkJCQk7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJCQltb3ZkcWEJW2VkaSswMDBoXSwgeG1tMAoJCQkJCW1vdmRxYQlbZWRpKzAxMGhdLCB4bW0xCgkJCQkJbW92ZHFhICBbZWRpKzAyMGhdLCB4bW0yCgkJCQkJbW92ZHFhICBbZWRpKzAzMGhdLCB4bW0zCgkJCQkJbW92ZHFhCVtlZGkrMDQwaF0sIHhtbTQgCgkJCQkJbW92ZHFhCVtlZGkrMDUwaF0sIHhtbTUKCQkJCQltb3ZkcWEgIFtlZGkrMDYwaF0sIHhtbTYKCQkJCQltb3ZkcWEgIFtlZGkrMDcwaF0sIHhtbTcKCgkJCQkJYWRkCQllc2ksCWVicAoJCQkJCWFkZAkJZWRpLAllYnAgCgkJCQkJc3ViCQllY3gsCWVkeCAKCQkJCQlqbmUJCU1JWDI1NiAKCQkJCQlhZGQJCWVzaSwJNjQgCgkJCQkJYWRkCQllZGksCWVieCAKCQkJCQltb3YJCWVjeCwJOCAKCQkJCQlzdWIJCWVheCwJZWR4IAoJCQkJCWpuZQkJTUlYMjU2IAoJCQkJCWptcAkJX19HR1NBX1JFUUFOU19FUlgKCQkJCQlhbGlnbiAxNiAKCQkJCQlfQlNUOgoJCQkJCQlsZWEJCQllYXgsCVtlYXgqNF0JCQk7IFUgLSAqNAoJCQkJCQltb3YJCQllc2ksCVtwRW11VmlkZW9VcGRhdGVdCQk7IFYgLSBmZWN0aCBTUG9pbnRlciAKCQkJCQkJbW92ZHFhIAkJeG1tNywgCXhtbXdvcmQgcHRyW2VheCo0K0RXT1JEVExCXSAgICAKCQkJCQkJcHhvciAJCXhtbTYsIAl4bW02CSAKCQkJCQkJbW92CQkJZWJ4LAlEV09SRCBQVFJbR1ZQb2ludGVyKzBdCTsgVSAtIGZldGNoIFBpdGNoIAoJCQkJCQltb3YJCQllYXgsCTIyNAoJCQkJCQlzdWIJCQllYngsCTEwMjQgCgkJCQkJCW1vdgkJCWVkeCwJMSAKCQkJCQkJbW92CQkJZWN4LAkxNgkJCQk7IFUgbG9vcF94IAoJCQkJCQltb3YJCQllYnAsCTY0IAoKCQkJCQlhbGlnbiAxNgoJCQkJCVNfTE9PUDoKCQkJCQkJbW92ZHFhIAkJeG1tMCwgCVtlc2krMDAwaF0JCSA7IGZldGNoIFAwCgkJCQkJCW1vdmRxYSAJCXhtbTEsIAlbZXNpKzAxMGhdCQkgOyBmZXRjaCBQMQoJCQkJCQltb3ZkcWEJCXhtbTIsIAlbZXNpKzAyMGhdCQkgOyBmZXRjaCBQMgoJCQkJCQltb3ZkcWEJCXhtbTMsCVtlc2krMDMwaF0JCSA7IGZldGNoIFAzCgkJCQkJCW1vdmRxYSAJCXhtbTQsCXhtbTAJCQkgOyB4bW00ID0geG1tMCA9IFAwIAkKCQkJCQkJcHVucGNrbGJ3IAl4bW0wLCAJeG1tNgkJCSA7IFJHQiBjcm9zcy1kZWNvbXBvc2l0aW9uIEwwLUwxIChQMCkKCQkJCQkJcG11bGh1dyAJeG1tMCwgCXhtbTcJCQkgOyBSR0IgY3Jvc3MtbXVsIGdldCBoaWdoIEwwLUwxIChQMCkKCQkJCQkJbW92ZHFhCQl4bW01LCAJeG1tMSAJCQkgOyB4bW01ID0geG1tMSA9IFAxIAkgICAKCQkJCQkJcHVucGNraGJ3IAl4bW00LCAJeG1tNgkJCSA7IFJHQiBjcm9zcy1kZWNvbXBvc2l0aW9uIEgwLUgxIChQMCkKCQkJCQkJcG11bGh1dyAJeG1tNCwgCXhtbTcJCQkgOyBSR0IgY3Jvc3MtbXVsIGdldCBoaWdoIEgwLUgxIChQMCkKCQkJCQkJcHVucGNrbGJ3IAl4bW0xLCAJeG1tNgkJCSA7IFJHQiBjcm9zcy1kZWNvbXBvc2l0aW9uIEwwLUwxIChQMSkKCQkJCQkJcGFja3Vzd2IgCXhtbTAsIAl4bW00CQkJIDsgUDAgIG1lcmdlIAkKCQkJCQkJcG11bGh1dyAJeG1tMSwgCXhtbTcJCQkgOyBSR0IgY3Jvc3MtbXVsIGdldCBoaWdoIEwwLUwxIChQMSkJCQoJCQkJCQlwdW5wY2toYncgCXhtbTUsIAl4bW02CQkJIDsgUkdCIGNyb3NzLWRlY29tcG9zaXRpb24gSDAtSDEgKFAxKQoJCQkJCQltb3ZkcWEJCXhtbTQsIAl4bW0yIAkJCSA7IHhtbTQgPSB4bW0yID0gUDIKCQkJCQkJcG11bGh1dyAJeG1tNSwgCXhtbTcJCQkgOyBSR0IgY3Jvc3MtbXVsIGdldCBoaWdoIEgwLUgxIChQMSkJCgkJCQkJCXB1bnBja2xidyAJeG1tMiwgCXhtbTYJCQkgOyBSR0IgY3Jvc3MtZGVjb21wb3NpdGlvbiBMMC1MMSAoUDIpCgkJCQkJCXBhY2t1c3diIAl4bW0xLCAJeG1tNQkJCSA7IFAxICBtZXJnZSAJCgkJCQkJCXBtdWxodXcgCXhtbTIsIAl4bW03CQkJIDsgUkdCIGNyb3NzLW11bCBnZXQgaGlnaCBMMC1MMSAoUDIpCgkJCQkJCXB1bnBja2hidyAJeG1tNCwgCXhtbTYJCQkgOyBSR0IgY3Jvc3MtZGVjb21wb3NpdGlvbiBIMC1IMSAoUDIpCgkJCQkJCW1vdmRxYQkJeG1tNSwJeG1tMwkJCSA7IHhtbTUgPSB4bW0zID0gUDMgCgkJCQkJCXBtdWxodXcgCXhtbTQsIAl4bW03CQkJIDsgUkdCIGNyb3NzLW11bCBnZXQgaGlnaCBIMC1IMSAoUDIpCgkJCQkJCXB1bnBja2xidyAJeG1tMywgCXhtbTYJCQkgOyBSR0IgY3Jvc3MtZGVjb21wb3NpdGlvbiBMMC1MMSAoUDMpCgkJCQkJCXBhY2t1c3diIAl4bW0yLCAJeG1tNAkJCSA7IFAyICBtZXJnZSAKCQkJCQkJcG11bGh1dyAJeG1tMywgCXhtbTcJCQkgOyBSR0IgY3Jvc3MtbXVsIGdldCBoaWdoIEwwLUwxIChQMykKCQkJCQkJcHVucGNraGJ3IAl4bW01LCAJeG1tNgkJCSA7IFJHQiBjcm9zcy1kZWNvbXBvc2l0aW9uIEgwLUgxIChQMykKCQkJCQkJcG11bGh1dyAJeG1tNSwgCXhtbTcJCQkgOyBSR0IgY3Jvc3MtbXVsIGdldCBoaWdoIEgwLUgxIChQMykKCQkJCQkJcGFja3Vzd2IgCXhtbTMsIAl4bW01CQkJIDsgUDMgIG1lcmdlIAoJCQkJCQltb3ZkcWEgCQlbZWRpKzAwMGhdLCB4bW0wCQkgOyB3cml0ZSBQMAoJCQkJCQltb3ZkcWEgCQlbZWRpKzAxMGhdLCB4bW0xCQkgOyB3cml0ZSBQMQoJCQkJCQltb3ZkcWEJCVtlZGkrMDIwaF0sIHhtbTIJCSA7IHdyaXRlIFAyCgkJCQkJCW1vdmRxYQkJW2VkaSswMzBoXSwgeG1tMwkJIDsgd3JpdGUgUDMKCQkJCQkJYWRkCQkJZXNpLAllYnAJCQkJIDsgbmV4dCA2NCBieXRlcwoJCQkJCQlhZGQJCQllZGksCWVicAkJCQkgOyBuZXh0IDY0IGJ5dGVzCgkJCQkJCXN1YgkJCWVjeCwJZWR4CQkJCSA7IGxvb3BfeCAtLSAKCQkJCQkJam5lCQkJU19MT09QCQkJCQkgOyBKQ0MgY29udGluZS9vdXQgCgkJCQkJCWFkZAkJCWVzaSwJNjQJCQkJIDsgbmV4dCBsaW5lIAoJCQkJCQlhZGQJCQllZGksCWVieAkJCQkgOyBuZXh0IGxpbmUgCgkJCQkJCW1vdgkJCWVjeCwJMTYKCQkJCQkJc3ViCQkJZWF4LAllZHggCgkJCQkJCWpuZQkJCVNfTE9PUAkJCQkJIDsgSkNDIGNvbnRpbmUvb3V0IAoJCQlfX0dHU0FfUkVRQU5TX0VSWDoKCQkJCQkJcHVzaAkJZWF4IAoJCQkJCQlwdXNoCQllYXgKCQkJCQkJcHVzaAkJZWF4CgkJCQkJCXB1c2gJCWVheAoJCQkJCQltb3YJCQllYXgsCURXT1JEIFBUUltJQmFzZUdyYXBoaWNzXQoJCQkJCQltb3YJCQllY3gsCURXT1JEIFBUUltlYXhdCgkJCQkJCW1vdgkJCWVkeCwJRFdPUkQgUFRSW2VjeCs2OF0KCQkJCQkJcHVzaAkJZWF4CgkJCQkJCWNhbGwJCWVkeAoJCQkJCQlwb3AJCQllZGkgCgkJCQkJCXBvcAkJCWVzaSAKCQkJCQkJcG9wCQkJZWJwIAoJCQkJCQlwb3AJCQllYnggCgoJCQlBU01fRU5EIAoJfQ==
prog.c:2:2: error: expected identifier or '(' before 'for'
for (Index=63;Index!=-1;Index--) {
^
prog.c:2:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '!=' token
for (Index=63;Index!=-1;Index--) {
^
prog.c:2:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '--' token
for (Index=63;Index!=-1;Index--) {
^
prog.c:86:63: error: expected identifier or '(' before '{' token
IBaseGraphics->lpVtbl->Present(IBaseGraphics,0,0,0,0); == */ {
^
prog.c:117:24: error: invalid suffix "h" on integer constant
movdqa xmm0, [esi+000h]
^
prog.c:118:24: error: invalid suffix "h" on integer constant
movdqa xmm1, [esi+010h]
^
prog.c:119:25: error: invalid suffix "h" on integer constant
movdqa xmm2, [esi+020h]
^
prog.c:120:25: error: invalid suffix "h" on integer constant
movdqa xmm3, [esi+030h]
^
prog.c:121:24: error: invalid suffix "h" on integer constant
movdqa xmm4, [esi+040h]
^
prog.c:122:24: error: invalid suffix "h" on integer constant
movdqa xmm5, [esi+050h]
^
prog.c:123:25: error: invalid suffix "h" on integer constant
movdqa xmm6, [esi+060h]
^
prog.c:124:25: error: invalid suffix "h" on integer constant
movdqa xmm7, [esi+070h]
^
prog.c:128:18: error: invalid suffix "h" on integer constant
movdqa [edi+000h], xmm0
^
prog.c:129:18: error: invalid suffix "h" on integer constant
movdqa [edi+010h], xmm1
^
prog.c:130:19: error: invalid suffix "h" on integer constant
movdqa [edi+020h], xmm2
^
prog.c:131:19: error: invalid suffix "h" on integer constant
movdqa [edi+030h], xmm3
^
prog.c:132:18: error: invalid suffix "h" on integer constant
movdqa [edi+040h], xmm4
^
prog.c:133:18: error: invalid suffix "h" on integer constant
movdqa [edi+050h], xmm5
^
prog.c:134:19: error: invalid suffix "h" on integer constant
movdqa [edi+060h], xmm6
^
prog.c:135:19: error: invalid suffix "h" on integer constant
movdqa [edi+070h], xmm7
^
prog.c:162:28: error: invalid suffix "h" on integer constant
movdqa xmm0, [esi+000h] ; fetch P0
^
prog.c:163:28: error: invalid suffix "h" on integer constant
movdqa xmm1, [esi+010h] ; fetch P1
^
prog.c:164:27: error: invalid suffix "h" on integer constant
movdqa xmm2, [esi+020h] ; fetch P2
^
prog.c:165:26: error: invalid suffix "h" on integer constant
movdqa xmm3, [esi+030h] ; fetch P3
^
prog.c:190:21: error: invalid suffix "h" on integer constant
movdqa [edi+000h], xmm0 ; write P0
^
prog.c:191:21: error: invalid suffix "h" on integer constant
movdqa [edi+010h], xmm1 ; write P1
^
prog.c:192:20: error: invalid suffix "h" on integer constant
movdqa [edi+020h], xmm2 ; write P2
^
prog.c:193:20: error: invalid suffix "h" on integer constant
movdqa [edi+030h], xmm3 ; write P3
^