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

📄 bitmaps.asm

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