; 2000/01/15 by shigeo ; vram, layer, BGV は 15bit colorが2つ分( dword size ) ; for( i = 0; i < counter; i++ ){ ; BGV[i] = ( layer[i] ) ? layer[i] : VRAM[i]; ; } ; mov edi,[esp+4] ;edi=BGV mov edx,[esp+8] ;edx=layer mov ebx,[esp+12] ;ebx=VRAM adr mov ecx,[esp+16] ;ecx=counter mov ax,1Ch mov es,ax ;vram selector align 4 #lp: mov eax,[edx] add edx,4 mov esi,eax add eax,7FFF7FFFh mov ebp,[ebx] and eax,80008000h ;7FFFhを足して8000h以上になるのは元が0で無い時 ;(但し、色が32767以下であることを使っている) ;よって上位下位16bitそれぞれについて ; if esi == 0 then eax = 0 else eax = 8000h add ebx,4 shr eax,15 add eax,7FFF7FFFh ;if esi == 0 then eax = 7FFFh else eax = 8000h and eax,ebp ;if esi == 0 then eax = ebp else eax = 0 ;(ここでも色が32767以下であることを使ってる) or eax,esi ;if esi == 0 then eax = ebp else eax = esi mov es:[edi],eax add edi,4 dec ecx jnz short #lp