⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitmaps.asm

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	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 + -