亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xpbmclip.asm

?? 視頻游戲開發C語言源程序
?? ASM
?? 第 1 頁 / 共 3 頁
字號:
	dec si
@@Nocarry:
	dec   [Plane]                     ; Decrement plane counter
	jnz   @@PlaneLoop                 ; Jump if more planes left

	xor   ax,ax
	pop   ds                          ; restore data segment
	pop   di                          ; restore registers
	pop   si
	mov   sp,bp                       ; dealloc local variables
	pop   bp
	ret
_x_put_pbm_clipx  endp



;----------------------------------------------------------------------
; x_put_pbm_clipy - Write a planar bitmap from system ram to video ram
;                    with clipping in y direction only. similar to
;		     "x_put_pbm".
;
; See Also:  x_put_pbm,x_put_pbm_clipx,x_put_pbm_clipxy
;
; Clipping region variables: TopClip,BottomClip
;
; Written by Themie Gouthas
;----------------------------------------------------------------------
_x_put_pbm_clipy  proc
ARG X:word,Y:word,ScrnOffs:word,Bitmap:dword
LOCAL   Width,Height,TopRow,LineInc,PlaneInc:word=LocalStk
	push  bp
	mov   bp,sp
	sub   sp,LocalStk                 ; Create space for local variables
	push  si
	push  di
	push  ds
	cld

	les   si,[Bitmap]

	xor   bh,bh
	mov   bl,byte ptr es:[si+1]   ; BX = height
	;mov   [Height],bx

	xor   ah,ah
	mov   al,byte ptr es:[si]     ; AX = width
	mov   [Width],ax

	mov   cx,ax                       ; Save AX
	mul   bx                          ; AX = AX*BX = bytes/plane
	mov   [PlaneInc],ax               ;  save as PlaneInc
	mov   ax,cx                       ; Restore AX

	mov   di,[X]
	mov   cx,di
	and   cx,3
	shr   di,2

	;;;;; CLIP PROCESSING FOR TOP CLIP BORDER ;;;;;;;;;;;;;;;;;;;;;

	mov   dx,[_TopClip]           ; Compare u.l. Y coord with Top
	sub   dx,[Y]                  ; clipping border
	jle   @@NotTopClip            ; jump if VBM not clipped from above
	cmp   dx,bx
	jnl   @@NotVisible            ; jump if VBM is completely obscured
	mov   [TopRow],dx
	sub   bx,dx
	add   [Y],dx
	jmp   short @@VertClipDone

	;;;; EXIT FOR COMPLETELY OBSCURED P.B.M's ;;;;;;;;;;;;;;;;;;;;;;

@@NotVisible:
	mov   ax,1
	pop   ds                          ; restore data segment
	pop   di                          ; restore registers
	pop   si
	mov   sp,bp                       ; dealloc local variables
	pop   bp
	ret

	;;;;; CLIP PROCESSING FOR BOTTOM CLIP BORDER ;;;;;;;;;;;;;;;;;;;

@@NotTopClip:
	mov   dx,[_BottomClip]
	sub   dx,[Y]
	js    @@NotVisible
	mov   [TopRow],0
	cmp   dx,bx
	jg    @@VertClipDone
	inc   dx
	mov   bx,dx

@@VertClipDone:

	mov   [Height],bx                 ; Calculate relative offset in data
	mul   [TopRow]                    ;  of first visible scanline
	add   ax,2                        ; Skip dimension bytes in source
	add   si,ax                       ; Skip top rows that arent visible


	mov   ax,[Y]                      ; Calculate screen row
	mov   bx,[_ScrnLogicalByteWidth]  ;  by mult. Y coord by Screen
	mul   bx                          ;  width then adding screen offset
	add   di,ax
	add   di,[ScrnOffs]
	sub   bx,[Width]                  ; calculate difference from end of
	mov   [LineInc],bx                ; b.m. in curr line to beginning of
					  ; b.m. on next scan line
	mov   ax,es                       ; copy ES to DS
	mov   ds,ax
	mov   ax,SCREEN_SEG               ; Point ES to VGA segment
	mov   es,ax

	mov   ah,11h                      ; Set up initial plane mask
	shl   ah,cl

	mov   dx,SC_INDEX                 ; Prepare VGA for cpu to video writes
	mov   al,MAP_MASK
	out   dx,al
	inc   dx
	mov   bh,4                        ; Set plane counter to 4
@@PlaneLoop:
	push  di 			  ; Save bitmap's start dest. offset
	push  si                          ; Save Bitmaps data offset
	mov   bl,byte ptr [Height]        ; Reset row counter (BL)
	mov   al,ah
	out   dx,al                       ; set vga write plane
@@RowLoop:
	mov   cl,byte ptr [Width]         ; Reset Column counter cl
	shr   cl,1
	rep   movsw                       ; Copy a complete row
	adc   cl,0
	rep   movsb

	add   di,[LineInc]                ; Move to next row
	dec   bl                          ; decrement row counter
	jnz   @@RowLoop                   ; Jump if more rows left
	pop   si                          ; Restore SI and set to offset of
	add   si,[PlaneInc]               ; first vis pixel in next plane data
	pop   di                          ; Restore bitmaps start dest byte
	rol   ah,1                        ; Shift mask for next plane
	adc   di,0                        ; if carry increment screen offset
	dec   bh                          ; Decrement plane counter
	jnz   @@PlaneLoop                 ; Jump if more planes left

	xor   ax,ax
	pop   ds                          ; restore data segment
	pop   di                          ; restore registers
	pop   si
	mov   sp,bp                       ; dealloc local variables
	pop   bp
	ret
_x_put_pbm_clipy   endp


;----------------------------------------------------------------------
; x_put_pbm_clipxy - Write a planar bitmap from system ram to video ram
;                    with clipping in x and y directions. similar to
;		     "x_put_pbm".
;
; See Also:  x_put_pbm,x_put_pbm_clipy,x_put_pbm_clipx
;
; Clipping region variables: LeftClip,RightClip,TopClip,BottomClip
;
; Written by Themie Gouthas
;----------------------------------------------------------------------
_x_put_pbm_clipxy  proc
ARG X:word,Y:word,ScrnOffs:word,Bitmap:dword
LOCAL   Plane:byte,CType,LeftSkip,DataInc,Width,Height,TopRow,LineInc,PlaneInc:word=LocalStk
	push  bp
	mov   bp,sp
	sub   sp,LocalStk                 ; Create space for local variables
	push  si
	push  di
	push  ds
	cld

	les   si,[Bitmap]

	xor   ax,ax
	mov   [CType],ax
	mov   al,byte ptr es:[si]         ; AX = width
	xor   bh,bh
	mov   bl,byte ptr es:[si+1]       ; BX = height

	mov   cx,ax                       ; Save AX
	mul   bx                          ; AX = AX*BX = bytes/plane
	mov   [PlaneInc],ax               ;  save as PlaneInc
	mov   ax,cx                       ; Restore AX


	mov   di,[X]                      ; DI = X coordinate of dest.
	mov   cx,di                       ; save in CX
	sar   di,2                        ; convert to address byte


		;;;;; CLIP PROCESSING FOR TOP CLIP BORDER ;;;;;;;;;;;;;;;;;;;;;

	mov   dx,[_TopClip]           ; Compare u.l. Y coord with Top
	sub   dx,[Y]                  ; clipping border
	jle   @@NotTopClip            ; jump if VBM not clipped from above
	cmp   dx,bx
	jnl   @@NotVisible            ; jump if VBM is completely obscured
	mov   [TopRow],dx
	sub   bx,dx
	add   [Y],dx
	jmp   short @@VertClipDone

	;;;; EXIT FOR COMPLETELY OBSCURED P.B.M's ;;;;;;;;;;;;;;;;;;;;;;

@@NotVisible:
	mov   ax,1
	pop   ds                          ; restore data segment
	pop   di                          ; restore registers
	pop   si
	mov   sp,bp                       ; dealloc local variables
	pop   bp
	ret

	;;;;; CLIP PROCESSING FOR BOTTOM CLIP BORDER ;;;;;;;;;;;;;;;;;;;

@@NotTopClip:
	mov   dx,[_BottomClip]
	sub   dx,[Y]
	js    @@NotVisible
	mov   [TopRow],0
	cmp   dx,bx
	jg    @@VertClipDone
	inc   dx
	mov   bx,dx

@@VertClipDone:

	;;;;; CLIP PROCESSING FOR LEFT CLIP BORDER ;;;;;;;;;;;;;;;;;;;

	mov   dx,[_LeftClip]
	sub   dx,di
	jle   @@NotLeftClip
	cmp   dx,ax
	jnl   @@NotVisible

	add   di,dx
	mov   [LeftSkip],dx
	mov   [DataInc],dx
	sub   ax,dx
	mov   [CType],1
	jmp   short @@HorizClipDone

	;;;;; CLIP PROCESSING FOR RIGHT CLIP BORDER ;;;;;;;;;;;;;;;;;;;

@@NotLeftClip:
	mov   dx,[_RightClip]
	sub   dx,di
	js    @@NotVisible
	mov   [LeftSkip],0
	mov   [DataInc],0
	cmp   dx,ax
        jge   @@HorizClipDone       ; was jg
	inc   dx
	sub   ax,dx
	mov   [DataInc],ax
	mov   ax,dx
	mov   [CType],-1

@@HorizClipDone:



	mov   [Width],ax                  ; Save width and height of clipped
	mov   [Height],bx                 ;  image

	add   ax,[DataInc]                ; AX = original width of image
	mul   [TopRow]                    ; Calculate bytes in clipped top
	add   si,ax		          ;  rows
	add   si,2                        ; Skip dimension bytes in source
	add   si,[LeftSkip]               ; Skip pixels in front of row that
					  ;  are clipped

	mov   bx,[_ScrnLogicalByteWidth]  ; Set BX to Logical Screen Width
	mov   dx,bx                       ; BX - Width of image = No. bytes
	sub   dx,[Width]                  ;  to first byte of next screen
	mov   [LineInc],dx                ;  row.

	mov   ax,[Y]                      ; Calculate screen start row
	mul   bx                          ;  then adding screen offset
	add   di,ax
	add   di,[ScrnOffs]
	mov   ax,es                       ; copy ES to DS
	mov   ds,ax
	mov   ax,SCREEN_SEG               ; Point ES to VGA segment
	mov   es,ax



	and   cx,3
	mov   ah,11h                      ; Set up initial plane mask
	shl   ah,cl

	mov   dx,SC_INDEX                 ; Prepare VGA for cpu to video writes
	mov   al,MAP_MASK
	out   dx,al
	inc   dx
	mov   [Plane],4                   ; Set plane counter to 4
	mov   bh,byte ptr [Width]         ; set bh to width for fast looping
@@PlaneLoop:
	push  di 			  ; Save bitmap's start dest. offset
	push  si
	mov   bl,byte ptr [Height]        ; Reset row counter (BL)
	mov   al,ah
	out   dx,al                       ; set vga write plane
@@RowLoop:
	mov   cl,bh                       ; Reset Column counter cl
	shr   cl,1
	rep   movsw                       ; Copy a complete row
	adc   cl,0
	rep   movsb
	add   si,[DataInc]                ; Move to next source row
	add   di,[LineInc]                ; Move to next screen row
	dec   bl                          ; decrement row counter
	jnz   @@RowLoop                   ; Jump if more rows left
	pop   si                          ; Restore SI and set to offset of
	add   si,[PlaneInc]               ; first vis pixel in next plane data
	pop   di                          ; Restore bitmaps start dest byte
	rol   ah,1		          ; Shift mask for next plane

	; Plane Transition (A HACK but it works!)

	jnb   @@Nocarry                   ; Jump if not plane transition
	mov   bl,ah                       ; Save Plane Mask
	mov   ax,[CType]                  ; set AX to clip type inc variable
	add   bh,al                       ; Update advancing variables
	sub   [DataInc],ax                ;
	sub   [LineInc],ax                ;
	cmp   al,0                        ; What type of clip do we have
	mov   ah,bl                       ;   restore Plane mask
	jg    @@RightAdvance              ; jump on a right clip!
	inc   di                          ; otherwise increment DI
	jmp   @@Nocarry
@@RightAdvance:
	dec si
@@Nocarry:
	dec   [Plane]                     ; Decrement plane counter
	jnz   @@PlaneLoop                 ; Jump if more planes left

	xor   ax,ax
	pop   ds                          ; restore data segment
	pop   di                          ; restore registers
	pop   si
	mov   sp,bp                       ; dealloc local variables
	pop   bp
	ret
_x_put_pbm_clipxy  endp

	end



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品午夜视频免费| 7777精品伊人久久久大香线蕉经典版下载 | 美国精品在线观看| 99国产精品国产精品毛片| 久久九九久精品国产免费直播| 一区二区三区高清在线| 成人午夜在线免费| 精品国产一区二区三区久久久蜜月 | 久久99精品国产麻豆婷婷| 日韩欧美一级在线播放| 怡红院av一区二区三区| 久久国产精品72免费观看| 911精品国产一区二区在线| 亚洲自拍偷拍欧美| 91丝袜高跟美女视频| 亚洲自拍偷拍网站| 色系网站成人免费| 一区二区三区在线免费视频| 欧美三级日韩三级| 日韩av一区二区三区四区| 日韩欧美中文字幕制服| 精品一区二区三区免费播放| 亚洲精品一区二区在线观看| 国产激情偷乱视频一区二区三区| 久久亚洲免费视频| 91在线观看地址| 亚洲欧洲日产国码二区| 在线观看日韩国产| 亚洲成a人片在线观看中文| 日韩一级片在线观看| 国产成人丝袜美腿| 亚洲一区二区三区四区不卡 | 日韩毛片视频在线看| 欧美日韩国产精选| 国产精品一品二品| 亚洲成人av电影| 欧美经典三级视频一区二区三区| 不卡av在线网| 极品美女销魂一区二区三区| 亚洲欧美国产77777| 久久夜色精品国产噜噜av| 色哟哟国产精品| 国产99久久久精品| 久久精品夜色噜噜亚洲aⅴ| 成人sese在线| 国产高清在线精品| 日韩制服丝袜先锋影音| 国产精品久久久久影院| 久久精品人人做人人综合| 欧美群妇大交群的观看方式| 99re这里只有精品首页| 国产传媒欧美日韩成人| 极品少妇xxxx偷拍精品少妇| 午夜欧美大尺度福利影院在线看| 久久久久久久久久久99999| 精品成人私密视频| 亚洲精品在线电影| 国产午夜亚洲精品不卡| 久久先锋影音av鲁色资源网| 日韩视频免费直播| 欧美肥妇bbw| 欧美变态tickle挠乳网站| 欧美精品一二三区| 欧美电视剧在线观看完整版| wwwwxxxxx欧美| 国产日产欧产精品推荐色| 久久看人人爽人人| 国产亚洲成aⅴ人片在线观看| 国产亚洲女人久久久久毛片| 日本一区二区在线不卡| 日韩一区欧美一区| 日韩成人午夜精品| 国模冰冰炮一区二区| 国产综合久久久久久久久久久久 | 国产黄色精品网站| 床上的激情91.| 一本色道久久综合狠狠躁的推荐| 欧美性一二三区| 国产日韩一级二级三级| 一区二区三区精品| 精品一区二区三区免费观看| 97精品久久久久中文字幕| 欧美一区二区三区免费视频| 国产精品污网站| 午夜精品久久久久久久99水蜜桃| 国产高清久久久久| 欧美一区二区三区男人的天堂| 国产清纯白嫩初高生在线观看91| 一区二区三区色| 国产在线乱码一区二区三区| 色综合av在线| 国产欧美日韩另类一区| 蜜桃在线一区二区三区| 91免费看视频| 精品成人一区二区三区四区| 亚洲国产日韩综合久久精品| 国产69精品久久777的优势| 日韩免费一区二区| 亚洲国产精品久久人人爱 | 午夜成人免费视频| 懂色av一区二区三区免费观看 | 日韩精品中文字幕一区| 亚洲午夜日本在线观看| 久久国产综合精品| 欧美色倩网站大全免费| 亚洲精选在线视频| 欧美在线免费视屏| 中文字幕色av一区二区三区| 成人免费视频网站在线观看| 精品免费视频一区二区| 日韩国产在线一| 欧美一级生活片| 天天综合天天综合色| 欧美日韩国产天堂| 久久99久久精品| 欧美电影免费观看高清完整版在| 一区二区三区**美女毛片| 国产精品免费视频网站| 久久99热这里只有精品| 亚洲精品在线一区二区| 麻豆91小视频| 国产人成一区二区三区影院| 国产91精品在线观看| 国产蜜臀av在线一区二区三区| 成人免费视频视频在线观看免费 | 色综合一个色综合亚洲| 亚洲高清在线视频| 欧美精品一区二| 91欧美一区二区| 奇米精品一区二区三区四区| 欧美成人三级在线| 成人av影院在线| 麻豆国产精品一区二区三区| 中文字幕一区二区三区不卡在线| 欧美一级在线免费| 亚洲一区二区五区| 久久网站最新地址| 91在线码无精品| 精品一区二区在线播放| 亚洲欧美日韩中文字幕一区二区三区| 91美女福利视频| 丁香一区二区三区| 免费看日韩精品| 亚洲国产视频一区| 亚洲卡通动漫在线| 国产精品成人免费在线| 久久综合九色综合97_久久久| 欧美日韩二区三区| 欧美亚洲免费在线一区| 成人高清免费观看| www.亚洲精品| 国产aⅴ精品一区二区三区色成熟| 青青草原综合久久大伊人精品优势| 亚洲人成7777| 亚洲专区一二三| 亚洲免费三区一区二区| 国产精品女主播在线观看| 久久久亚洲欧洲日产国码αv| 亚洲精品一区二区精华| 久久综合色婷婷| 国产午夜一区二区三区| 国产欧美日韩在线| 亚洲婷婷综合久久一本伊一区| 中文字幕在线一区| 亚洲女人的天堂| 亚洲视频免费观看| 亚洲午夜久久久| 男女男精品视频网| 国产成人高清在线| 欧美四级电影在线观看| 欧美久久久久久久久中文字幕| 日韩欧美在线123| 中文字幕日韩精品一区| 亚洲a一区二区| 蜜桃精品视频在线| 精品一区二区三区在线播放视频| 成人精品亚洲人成在线| 欧美日韩国产天堂| 久久综合九色综合97婷婷女人| 日韩美女啊v在线免费观看| 亚洲mv在线观看| 91在线视频免费观看| 精品国产三级电影在线观看| 亚洲摸摸操操av| 国产一区在线观看麻豆| 欧美美女黄视频| 亚洲男帅同性gay1069| 久久精品久久99精品久久| 在线中文字幕不卡| 欧美经典三级视频一区二区三区| 日本三级亚洲精品| 色综合久久综合网97色综合| 国产亚洲人成网站| 国产乱子轮精品视频| 日本电影欧美片| ...中文天堂在线一区| 高清国产午夜精品久久久久久| 日韩一级欧美一级| 青青青爽久久午夜综合久久午夜| 欧美日韩你懂的|