📄 bitmaps.asm
字号:
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
shl eax,1
add esi,eax
loop @@16m_1
;
@@9: ret
PutScaleBitmap32k endp
;-------------------------------------------------------------------------
PutScaleBitmap64k 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 64k blit.
;
@@256:
@@256_1: movzx eax,b[esi]
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
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 64k blit.
;
@@32k:
@@32k_1: movzx ebx,w[esi]
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
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 64k blit.
;
@@64k:
@@64k_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 @@64k_0
jmp @@9
;
;16m to 64k blit.
;
@@16m:
@@16m_1: mov eax,[esi]
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
mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
add esi,eax
shl eax,1
add esi,eax
loop @@16m_1
;
@@9: ret
PutScaleBitmap64k endp
;-------------------------------------------------------------------------
PutScaleBitmap16m 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 16m blit.
;
@@256:
@@256_1: movzx eax,b[esi]
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
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 16m blit.
;
@@32k:
@@32k_1: mov ax,[esi]
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
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 16m blit.
;
@@64k:
@@64k_1: mov ax,[esi]
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
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 16m blit.
;
@@16m:
@@16m_0: mov eax,[esi]
stosw
shr eax,16
stosb
mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
add esi,eax
shl eax,1
add esi,eax
loop @@16m_0
;
@@9: ret
PutScaleBitmap16m endp
;-------------------------------------------------------------------------
PutORScaleBitmap256 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]
cmp al,b[_BBB_Chroma]
jz @@256_3
stosb
@@256_2: mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
add esi,eax
loop @@256_0
jmp @@9
@@256_3: inc edi
jmp @@256_2
;
;32k to 256 blit.
;
@@32k:
@@32k_1: mov ax,[esi]
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: 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
@@32k_3: inc edi
jmp @@32k_2
;
;64k to 256 blit.
;
@@64k:
@@64k_1: mov ax,[esi]
cmp ax,w[_BBB_Chroma]
jz @@64k_3
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: 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
@@64k_3: inc edi
jmp @@64k_2
;
;16m to 256 blit.
;
@@16m:
@@16m_1: mov eax,[esi]
and eax,0FFFFFFh
cmp eax,d[_BBB_Chroma]
jz @@16m_3
mov ah,al
shr eax,8
or al,ah
stosb
@@16m_2: mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
shl eax,1
add esi,eax
loop @@16m_1
jmp @@9
@@16m_3: inc edi
jmp @@16m_2
;
@@9: ret
PutORScaleBitmap256 endp
;-------------------------------------------------------------------------
PutORScaleBitmap32k 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]
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: mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
add esi,eax
loop @@256_1
jmp @@9
@@256_3: add edi,2
jmp @@256_2
;
;32k to 32k blit.
;
@@32k:
@@32k_0: mov ax,[esi]
cmp ax,w[_BBB_Chroma]
jz @@32k_3
stosw
@@32k_2: 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
@@32k_3: add edi,2
jmp @@32k_2
;
;64k to 32k blit.
;
@@64k:
@@64k_1: movzx ebx,w[esi]
cmp bx,w[_BBB_Chroma]
jz @@64k_3
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: 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
@@64k_3: add edi,2
jmp @@64k_2
;
;16m to 32k blit.
;
@@16m:
@@16m_1: mov eax,[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: mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
shl eax,1
add esi,eax
loop @@16m_1
jmp @@9
@@16m_3: add edi,2
jmp @@16m_2
;
@@9: ret
PutORScaleBitmap32k endp
;-------------------------------------------------------------------------
PutORScaleBitmap64k 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 64k blit.
;
@@256:
@@256_1: movzx eax,b[esi]
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: mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
add esi,eax
loop @@256_1
jmp @@9
@@256_3: add edi,2
jmp @@256_2
;
;32k to 64k blit.
;
@@32k:
@@32k_1: movzx ebx,w[esi]
cmp bx,w[_BBB_Chroma]
jz @@32k_3
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: 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
@@32k_3: add edi,2
jmp @@32k_2
;
;64k to 64k blit.
;
@@64k:
@@64k_0: mov ax,[esi]
cmp ax,w[_BBB_Chroma]
jz @@64k_3
stosw
@@64k_2: mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
shl eax,1
add esi,eax
loop @@64k_0
jmp @@9
@@64k_3: add edi,2
jmp @@64k_2
;
;16m to 64k blit.
;
@@16m:
@@16m_1: mov eax,[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: mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
add esi,eax
shl eax,1
add esi,eax
loop @@16m_1
jmp @@9
@@16m_3: add edi,2
jmp @@16m_2
;
@@9: ret
PutORScaleBitmap64k endp
;-------------------------------------------------------------------------
PutORScaleBitmap16m 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 16m blit.
;
@@256:
@@256_1: movzx eax,b[esi]
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
stosw
shr eax,16
stosb
@@256_2: mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
add esi,eax
loop @@256_1
jmp @@9
@@256_3: add edi,3
jmp @@256_2
;
;32k to 16m blit.
;
@@32k:
@@32k_1: movzx ebx,w[esi]
cmp bx,w[_BBB_Chroma]
jz @@32k_3
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: 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
@@32k_3: add edi,3
jmp @@32k_2
;
;64k to 16m blit.
;
@@64k:
@@64k_1: movzx ebx,w[esi]
cmp bx,w[_BBB_Chroma]
jz @@64k_3
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: 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
@@64k_3: add edi,3
jmp @@64k_2
;
;16m to 16m blit.
;
@@16m:
@@16m_0: mov eax,[esi]
and eax,0FFFFFFh
cmp eax,d[_BBB_Chroma]
jz @@16m_3
stosw
shr eax,16
stosb
@@16m_2: mov eax,_BBB_wfrac
add _BBB_wacc,eax
mov eax,0
adc eax,_BBB_wwhole
add esi,eax
shl eax,1
add esi,eax
loop @@16m_0
jmp @@9
@@16m_3: add edi,3
jmp @@16m_2
;
@@9: ret
PutORScaleBitmap16m endp
sdata
;
_BBB_Source dd ?
_BBB_Dest dd ?
_BBB_Chroma dd ?
;
_BBB_wfrac dd ?
_BBB_wwhole dd ?
_BBB_dfrac dd ?
_BBB_dwhole dd ?
_BBB_wacc dd ?
_BBB_dacc dd ?
PutRoutines dd PutBitmap256, PutBitmap32k, PutBitmap64k, PutBitmap16m
dd 12 dup (NearNull)
PutORRoutines dd PutORBitmap256, PutORBitmap32k, PutORBitmap64k, PutORBitmap16m
dd 12 dup (NearNull)
PutScaleRoutines dd PutScaleBitmap256, PutScaleBitmap32k, PutScaleBitmap64k, PutScaleBitmap16m
dd 14 dup (nearNull)
PutORScaleRoutines dd PutORScaleBitmap256, PutORScaleBitmap32k, PutORScaleBitmap64k, PutORScaleBitmap16m
dd 14 dup (nearNull)
efile
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -