📄 bitmaps.asm
字号:
mov eax,ebp
shl ebp,1
add ebp,eax
lea ecx,[ecx+ecx*2]
@@16m_0: pushm ecx,esi,edi
rep_movsb
popm ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@16m_0
;
@@9: ret
PutBitmap16m endp
;-------------------------------------------------------------------------
PutORBitmap256 proc near
mov eax,BM_Flags[ebx]
and eax,15
jz @@256
dec eax
jz @@32k
dec eax
jz @@64k
dec eax
jz @@16m
jmp @@9
;
;256 to 256 blit.
;
@@256: mov ebx,BM_Wide[ebx]
mov ebp,BM_Wide[ebp]
@@256_0: pushm ecx,esi,edi
@@256_1: lodsb
cmp al,b[_BBB_Chroma]
jz @@256_3
stosb
@@256_2: loop @@256_1
popm ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@256_0
jmp @@9
@@256_3: inc edi
jmp @@256_2
;
;32k to 256 blit.
;
@@32k: mov ebx,BM_Wide[ebx]
mov ebp,BM_Wide[ebp]
shl ebx,1
@@32k_0: pushm ebx,ecx,esi,edi
@@32k_1: lodsw
cmp ax,w[_BBB_Chroma]
jz @@32k_3
mov ebx,eax
shl ebx,16+1
shld eax,ebx,5
shl eax,3
shl ebx,5
shld eax,ebx,5
shl eax,3
shl ebx,5
shld eax,ebx,5
shl eax,3
call SearchRGB
stosb
@@32k_2: loop @@32k_1
popm ebx,ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@32k_0
jmp @@9
@@32k_3: inc edi
jmp @@32k_2
;
;64k to 256 blit.
;
@@64k: mov ebx,BM_Wide[ebx]
mov ebp,BM_Wide[ebp]
shl ebx,1
@@64k_0: pushm ebx,ecx,esi,edi
@@64k_1: lodsw
cmp ax,w[_BBB_Chroma]
jz @@64k_3
lodsw
mov ebx,eax
shl ebx,16
shld eax,ebx,5
shl eax,3
shl ebx,5
shld eax,ebx,6
shl eax,2
shl ebx,6
shld eax,ebx,5
shl eax,3
call SearchRGB
stosb
@@64k_2: loop @@64k_1
popm ebx,ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@64k_0
jmp @@9
@@64k_3: inc edi
jmp @@64k_2
;
;16m to 256 blit.
;
@@16m: mov ebx,BM_Wide[ebx]
mov ebp,BM_Wide[ebp]
mov eax,ebx
shl ebx,1
add ebx,eax
@@16m_0: pushm ecx,esi,edi
@@16m_1: lodsd
dec esi
and eax,0FFFFFFh
cmp eax,d[_BBB_Chroma]
jz @@16m_3
or ah,al
shr eax,8
or al,ah
stosb
@@16m_2: loop @@16m_1
popm ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@16m_0
jmp @@9
@@16m_3: inc edi
jmp @@16m_2
;
@@9: ret
PutORBitmap256 endp
;-------------------------------------------------------------------------
PutORBitmap32k proc near
mov eax,BM_Flags[ebx]
and eax,15
jz @@256
dec eax
jz @@32k
dec eax
jz @@64k
dec eax
jz @@16m
jmp @@9
;
;256 to 32k blit.
;
@@256: mov ebx,BM_Wide[ebx]
mov ebp,BM_Wide[ebp]
shl ebp,1
@@256_0: pushm ebx,ecx,esi,edi
@@256_1: xor eax,eax
lodsb
cmp al,b[_BBB_Chroma]
jz @@256_3
mov eax,d[HardwarePalette+eax+eax*2]
mov bl,al
shr eax,8
xchg ah,bl
shl eax,8
mov al,bl
mov ebx,eax
shl ebx,2+8 ;Convert 0-63 value to 0-255 value.
xor eax,eax
shld eax,ebx,5
shl ebx,8
shld eax,ebx,5
shl ebx,8
shld eax,ebx,5
stosw
@@256_2: loop @@256_1
popm ebx,ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@256_0
jmp @@9
@@256_3: add edi,2
jmp @@256_2
;
;32k to 32k blit.
;
@@32k: mov ebx,BM_Wide[ebx]
shl ebx,1
mov ebp,BM_Wide[ebp]
shl ebp,1
@@32k_0: pushm ecx,esi,edi
@@32k_1: lodsw
cmp ax,w[_BBB_Chroma]
jz @@32k_3
stosw
@@32k_2: loop @@32k_1
popm ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@32k_0
jmp @@9
@@32k_3: add edi,2
jmp @@32k_2
;
;64k to 32k blit.
;
@@64k: mov ebx,BM_Wide[ebx]
shl ebx,1
mov ebp,BM_Wide[ebp]
shl ebp,1
@@64k_0: pushm ebx,ecx,esi,edi
@@64k_1: lodsw
cmp ax,w[_BBB_Chroma]
jz @@64k_3
movzx ebx,ax
xor eax,eax
shl ebx,16
shld eax,ebx,5
shl ebx,5
shld eax,ebx,5
shl ebx,6
shld eax,ebx,5
stosw
@@64k_2: loop @@64k_1
popm ebx,ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@64k_0
jmp @@9
@@64k_3: add edi,2
jmp @@64k_2
;
;16m to 32k blit.
;
@@16m: mov ebx,BM_Wide[ebx]
mov eax,ebx
shl ebx,1
add ebx,eax
mov ebp,BM_Wide[ebp]
shl ebp,1
@@16m_0: pushm ebx,ecx,esi,edi
@@16m_1: lodsd
dec esi
and eax,0FFFFFFh
cmp eax,d[_BBB_Chroma]
jz @@16m_3
shl eax,8
mov ebx,eax
xor eax,eax
shld eax,ebx,5
shl ebx,8
shld eax,ebx,5
shl ebx,8
shld eax,ebx,5
stosw
@@16m_2: loop @@16m_1
popm ebx,ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@16m_0
jmp @@9
@@16m_3: add edi,2
jmp @@16m_2
;
@@9: ret
PutORBitmap32k endp
;-------------------------------------------------------------------------
PutORBitmap64k proc near
mov eax,BM_Flags[ebx]
and eax,15
jz @@256
dec eax
jz @@32k
dec eax
jz @@64k
dec eax
jz @@16m
jmp @@9
;
;256 to 64k blit.
;
@@256: mov ebx,BM_Wide[ebx]
mov ebp,BM_Wide[ebp]
shl ebp,1
@@256_0: pushm ebx,ecx,esi,edi
@@256_1: xor eax,eax
lodsb
cmp al,b[_BBB_Chroma]
jz @@256_3
mov eax,d[HardwarePalette+eax+eax*2]
shl eax,2
mov bl,al
shr eax,8
xchg ah,bl
shl eax,8
mov al,bl
mov ebx,eax
shl ebx,8
xor eax,eax
shld eax,ebx,5
shl ebx,8
shld eax,ebx,6
shl ebx,8
shld eax,ebx,5
stosw
@@256_2: loop @@256_1
popm ebx,ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@256_0
jmp @@9
@@256_3: add edi,2
jmp @@256_2
;
;32k to 64k blit.
;
@@32k: mov ebx,BM_Wide[ebx]
shl ebx,1
mov ebp,BM_Wide[ebp]
shl ebp,1
@@32k_0: pushm ebx,ecx,esi,edi
@@32k_1: lodsw
cmp ax,w[_BBB_Chroma]
jz @@32k_3
movzx ebx,ax
xor eax,eax
shl ebx,16+1
shld eax,ebx,5
shl ebx,5
shld eax,ebx,5
shl eax,1
shl ebx,5
shld eax,ebx,5
stosw
@@32k_2: loop @@32k_1
popm ebx,ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@32k_0
jmp @@9
@@32k_3: add edi,2
jmp @@32k_2
;
;64k to 64k blit.
;
@@64k: mov ebx,BM_Wide[ebx]
shl ebx,1
mov ebp,BM_Wide[ebp]
shl ebp,1
@@64k_0: pushm ecx,esi,edi
@@64k_1: lodsw
cmp ax,w[_BBB_Chroma]
jz @@64k_3
stosw
@@64k_2: loop @@64k_1
popm ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@64k_0
jmp @@9
@@64k_3: add edi,2
jmp @@64k_2
;
;16m to 64k blit.
;
@@16m: mov ebx,BM_Wide[ebx]
mov eax,ebx
shl ebx,1
add ebx,eax
mov ebp,BM_Wide[ebp]
shl ebp,1
@@16m_0: pushm ebx,ecx,esi,edi
@@16m_1: lodsd
dec esi
and eax,0FFFFFFh
cmp eax,d[_BBB_Chroma]
jz @@16m_3
shl eax,8
mov ebx,eax
xor eax,eax
shld eax,ebx,5
shl ebx,8
shld eax,ebx,6
shl ebx,8
shld eax,ebx,5
stosw
@@16m_2: loop @@16m_1
popm ebx,ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@16m_0
jmp @@9
@@16m_3: add edi,2
jmp @@16m_2
;
@@9: ret
PutORBitmap64k endp
;-------------------------------------------------------------------------
PutORBitmap16m proc near
mov eax,BM_Flags[ebx]
and eax,15
jz @@256
dec eax
jz @@32k
dec eax
jz @@64k
dec eax
jz @@16m
jmp @@9
;
;256 to 16m blit.
;
@@256: mov ebx,BM_Wide[ebx]
mov ebp,BM_Wide[ebp]
mov eax,ebp
shl ebp,1
add ebp,eax
@@256_0: pushm ebx,ecx,esi,edi
@@256_1: lodsb
cmp al,b[_BBB_Chroma]
jz @@256_3
movzx eax,al
mov eax,d[HardwarePalette+eax][eax*2]
shl eax,2
mov bl,al
shr eax,8
xchg ah,bl
shl eax,8
mov al,bl
stosw
shr eax,16
stosb
@@256_2: loop @@256_1
popm ebx,ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@256_0
jmp @@9
@@256_3: add edi,3
jmp @@256_2
;
;32k to 16m blit.
;
@@32k: mov ebx,BM_Wide[ebx]
shl ebx,1
mov ebp,BM_Wide[ebp]
mov eax,ebp
shl ebp,1
add ebp,eax
@@32k_0: pushm ebx,ecx,esi,edi
@@32k_1: lodsw
cmp ax,w[_BBB_Chroma]
jz @@32k_3
movzx ebx,ax
shl ebx,1
xor eax,eax
shld eax,ebx,5
shl eax,3
shl ebx,5
shld eax,ebx,5
shl eax,3
shl ebx,5
shld eax,ebx,5
shl eax,3
stosw
shr eax,16
stosb
@@32k_2: loop @@32k_1
popm ebx,ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@32k_0
jmp @@9
@@32k_3: add edi,3
jmp @@32k_2
;
;64k to 16m blit.
;
@@64k: mov ebx,BM_Wide[ebx]
shl ebx,1
mov ebp,BM_Wide[ebp]
mov eax,ebp
shl ebp,1
add ebp,eax
@@64k_0: pushm ebx,ecx,esi,edi
@@64k_1: lodsw
cmp ax,w[_BBB_Chroma]
jz @@64k_3
movzx ebx,ax
xor eax,eax
shld eax,ebx,5
shl eax,3
shl ebx,5
shld eax,ebx,6
shl eax,2
shl ebx,6
shld eax,ebx,5
shl eax,3
stosw
shr eax,16
stosb
@@64k_2: loop @@64k_1
popm ebx,ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@64k_0
jmp @@9
@@64k_3: add edi,3
jmp @@64k_2
;
;16m to 16m blit.
;
@@16m: mov ebx,BM_Wide[ebx]
mov eax,ebx
shl ebx,1
add ebx,eax
mov ebp,BM_Wide[ebp]
mov eax,ebp
shl ebp,1
add ebp,eax
@@16m_0: pushm ecx,esi,edi
@@16m_1: lodsd
dec esi
and eax,0FFFFFFh
cmp eax,d[_BBB_Chroma]
jz @@16m_3
stosw
shr eax,16
stosb
@@16m_2: loop @@16m_1
popm ecx,esi,edi
add esi,ebx
add edi,ebp
dec edx
jnz @@16m_0
jmp @@9
@@16m_3: add edi,3
jmp @@16m_2
;
@@9: ret
PutORBitmap16m endp
;-------------------------------------------------------------------------
PutScaleBitmap256 proc near
mov _BBB_wacc,0
mov eax,BM_Flags[ebx]
and eax,15
jz @@256
dec eax
jz @@32k
dec eax
jz @@64k
dec eax
jz @@16m
jmp @@9
;
;256 to 256 blit.
;
@@256:
@@256_0: mov al,[esi]
stosb
mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
add esi,eax
loop @@256_0
jmp @@9
;
;32k to 256 blit.
;
@@32k:
@@32k_1: mov ax,[esi]
mov ebx,eax
shl ebx,16+1
shld eax,ebx,5
shl eax,3
shl ebx,5
shld eax,ebx,5
shl eax,3
shl ebx,5
shld eax,ebx,5
shl eax,3
call SearchRGB
stosb
mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
shl eax,1
add esi,eax
loop @@32k_1
jmp @@9
;
;64k to 256 blit.
;
@@64k:
@@64k_1: mov ax,[esi]
mov ebx,eax
shl ebx,16
shld eax,ebx,5
shl eax,3
shl ebx,5
shld eax,ebx,6
shl eax,2
shl ebx,6
shld eax,ebx,5
shl eax,3
call SearchRGB
stosb
mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
shl eax,1
add esi,eax
loop @@64k_1
jmp @@9
;
;16m to 256 blit.
;
@@16m:
@@16m_1: mov al,[esi]
or al,[esi+1]
or al,[esi+2]
stosb
mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
shl eax,1
add esi,eax
loop @@16m_1
;
@@9: ret
PutScaleBitmap256 endp
;-------------------------------------------------------------------------
PutScaleBitmap32k proc near
mov _BBB_wacc,0
mov eax,BM_Flags[ebx]
and eax,15
jz @@256
dec eax
jz @@32k
dec eax
jz @@64k
dec eax
jz @@16m
jmp @@9
;
;256 to 32k blit.
;
@@256:
@@256_1: movzx eax,b[esi]
mov eax,d[HardwarePalette+eax+eax*2]
mov bl,al
shr eax,8
xchg ah,bl
shl eax,8
mov al,bl
mov ebx,eax
shl ebx,2+8 ;Convert 0-63 value to 0-255 value.
xor eax,eax
shld eax,ebx,5
shl ebx,8
shld eax,ebx,5
shl ebx,8
shld eax,ebx,5
stosw
mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
add esi,eax
loop @@256_1
jmp @@9
;
;32k to 32k blit.
;
@@32k:
@@32k_0: mov ax,[esi]
stosw
mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
shl eax,1
add esi,eax
loop @@32k_0
jmp @@9
;
;64k to 32k blit.
;
@@64k:
@@64k_1: movzx ebx,w[esi]
xor eax,eax
shl ebx,16
shld eax,ebx,5
shl ebx,5
shld eax,ebx,5
shl ebx,6
shld eax,ebx,5
stosw
mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
shl eax,1
add esi,eax
loop @@64k_1
jmp @@9
;
;16m to 32k blit.
;
@@16m:
@@16m_1: mov eax,[esi]
shl eax,8
mov ebx,eax
xor eax,eax
shld eax,ebx,5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -