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

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

?? xvsync.asm

?? 視頻游戲開發C語言源程序
?? ASM
字號:
; MODULE XVSYNC
; Xlib comptible vsync handler
; Written by Tore Bastiansen
; based on REND386 by Dave Stampe and Bernie Roehl

include xlib.inc
include xmain.inc
include xvsync.inc


TIMER_VECT                      equ 08h

PIC_CMD                         equ 20h
NONSPEC_EOI                     equ 20h
TIMER_MODE                      equ 34h
TIMER_CONTROL                   equ 43h
TIMER_0                         equ 40h

LATCH_COUNT                     equ 00h

INT_IN_ADVANCE                  equ 100

DOS_GETVECT                     equ 3500h
DOS_SETVECT                     equ 2500h


.data
_TicksPerSecond         dw 0
_VsyncIntTicks          label dword
VsyncIntTicksLo         dw 0
VsyncIntTicksHi         dw 0
_VsyncPeriod            dw 0             ;Time (in clicks) between each vsync
									 ;1 click = 1.193 microseconds

ClockRate               dw 0             ;Clock rate (in clicks) for timer 0
ClockCounter            dw 0             ;Counts total clicks modulo 65536
UserVsyncHandler        label dword      ;Pointer to user routine called
UserVsyncOffs           dw 0             ;called once each vsync period.
UserVsyncSeg            dw 0
InUserHandler           dw 0
			db 100h dup(?)
LocalStack              label byte       ;Local stack for user handler
StackSeg                dw 0
StackPtr                dw 0


ElapsedVrts            dw 0
VrtsToSkip             dw 1

.code
get_vsync_period proc near
	mov    al,TIMER_MODE            ;Start timer
	out    TIMER_CONTROL,al
	mov    al,0
	out    TIMER_0,al
	out    TIMER_0,al

	WaitVsyncStart

	mov    al,LATCH_COUNT
	out    TIMER_CONTROL,al
	in     al,TIMER_0
	mov    cl,al
	in     al,TIMER_0
	mov    ch,al                    ;cx=65536-clicks

	WaitVsyncStart

	mov    al,LATCH_COUNT
	out    TIMER_CONTROL,al
	in     al,TIMER_0
	mov    dl,al
	in     al,TIMER_0
	mov    dh,al                    ;dx=65536-clicks

	sub    cx,dx                    ;cx=clicks between two vsyncs
	mov    ax,cx                    ;return in ax
	ret
get_vsync_period endp

vsync_int proc far
	pusha                            ;Save regs
	push   ds
	push   es

	mov    ax,@data                 ;Set the right datasegment
	mov    ds,ax
	add    [VsyncIntTicksLo],1      ;Increment _VsyncIntTicks
	adc    [VsyncIntTicksHi],0

        inc    [ElapsedVrts]
        mov    cx,[ElapsedVrts]
        cmp    cx,[VrtsToSkip]
        jl     @@StopClock

	cmp    [_StartAddressFlag],1    ;Change in start address
	jne    @@StopClock

	mov    dx,CRTC_INDEX            ;Yes, set start address
	mov    ax,[_WaitingStartLow]
	mov    bx,[_WaitingStartHigh]
	out    dx,ax
	mov    ax,bx
	out    dx,ax

@@StopClock:
	cli
	mov    al,TIMER_MODE            ;Stop the timer
	out    TIMER_CONTROL,al         ;Dont want any interrupts
	mov    al,255
	out    TIMER_0,al
	out    TIMER_0,al
	sti

	cli
	mov    dx,INPUT_STATUS_0                   ;Wait for vsync
@@WaitVS:
	in     al,dx
	test   al,08h
	jz     @@WaitVS

	mov    al,TIMER_MODE            ;Start timer again
	out    TIMER_CONTROL,al
	mov    ax,[ClockRate]
	out    TIMER_0,al
	mov    al,ah
	out    TIMER_0,al

        cmp    cx,[VrtsToSkip]
        jl     @@PaletteInt

	cmp    [_StartAddressFlag],1    ;Any change in start address ?
	jne    @@PaletteInt

        xor    cx,cx
        mov    [ElapsedVrts],cx

	mov    ax,[_WaitingPelPan]      ;Yes, set pel pan register
	mov    dx,AC_INDEX
	out    dx,al
	mov    al,ah
	out    dx,al
	mov    [_StartAddressFlag],0

@@PaletteInt:
	cmp    [_VsyncPaletteCount],0   ;Any changes in the palette
	je     @@MouseInt
	mov    si, offset _VsyncPaletteBuffer  ;Yes
	mov    cx, [_VsyncPaletteCount]
	mov    ax, [_VsyncPaletteStart]
	mov    dx, DAC_WRITE_INDEX
	out    dx, al
	mov    dx, DAC_DATA

@@DacOutLoop:
	outsb
	outsb
	outsb
	loop    @@DacOutLoop
	mov     [_VsyncPaletteCount],0

@@MouseInt:
	cmp    [_MouseRefreshFlag],1             ; Does the mouse need refresh
	jne    @@UserInt
	call   dword ptr [_MouseVsyncHandler]    ; Yes
											  ;(this is not yet implemented)

@@UserInt:
	cmp    [UserVsyncSeg], 0       ;Is the a user interrupt routine?
	je     short @@Sim182
	cmp    [InUserHandler],0       ;Yes, but is it already active?
	jne    short @@Sim182
	mov    [InUserHandler],1       ;No, mark it as active
	mov    [StackSeg],ss           ;make a local stack
	mov    [StackPtr],sp
	push    ds
	pop     ss
	mov     sp, offset LocalStack
	sti
	call    dword ptr [UserVsyncHandler]
	cli
	mov     sp, [StackPtr]          ;Restore old stack
	mov     ss, [StackSeg]
	mov     [InUserHandler],0       ;Mark as not active

;       SIM 18.2 Hz
@@Sim182:
	mov     ax,[_VsyncPeriod]       ;Count number of clicks
	add     [ClockCounter],ax       ;If it is bigger than 65536
	jnc     short @@DontChainOld
	pop     es                      ;more than 1/18.2 secs has gone
	pop     ds
	popa
	sti
	db     0eah                    ; jmp instruction
	OldTimerInt    dd 0            ; Pointer to old int8 routine
				       ;  Selfmodyfiing code
	;jmp    dword ptr [OldTimerInt] Chain to old
@@DontChainOld:

; CLEAN UP AND RETURN
	mov    al,NONSPEC_EOI
	out    PIC_CMD,al


	pop    es
	pop    ds
	popa
	sti
	iret
vsync_int endp


_x_install_vsync_handler proc
ARG VrtSkipCount:word
        push    bp
        mov     bp,sp
        mov     ax,[VrtSkipCount]
        or      ax,ax
        jnz     @@NonZeroCount
        mov     ax,1
@@NonZeroCount:
        mov     [VrtsToSkip],ax
        mov     [ElapsedVrts],0
	cmp     [_VsyncHandlerActive],TRUE      ;Is it already active
	je      short @@Return
	call    get_vsync_period                ;no, get the vsync period

	mov     [_VsyncPeriod],ax
	sub     ax,INT_IN_ADVANCE               ;We need a little extra
	mov     [ClockRate],ax                  ;time

	mov     dx,18                           ;dx:ax=1193000
	mov     ax,13352
	idiv    [_VsyncPeriod]
	mov     [_TicksPerSecond],ax            ;1193/_VsyncPeriod

	mov     word ptr [_VsyncIntTicks],0
	mov     word ptr [_VsyncIntTicks+2],0

	cli
	mov     ax, DOS_GETVECT+TIMER_VECT      ;Get address of old timer int
	int     21h
	mov     ax,es
	mov     word ptr cs:[OldTimerInt],bx       ;Store in OldTimerInt
	mov     word ptr cs:[OldTimerInt+2],ax

	mov     [_VsyncHandlerActive],TRUE      ;Mark handler as active
	mov     ax,DOS_SETVECT+TIMER_VECT       ;Set the new timer int
	push    ds
	mov     dx,seg vsync_int
	mov     ds,dx
	mov     dx,offset vsync_int
	int     21h
	pop     ds

	mov     al,TIMER_MODE                   ;Reprogram timer 0
	out     TIMER_CONTROL,al
	mov     ax,ClockRate
	out     TIMER_0,al
	mov     al,ah
	out     TIMER_0,al
	sti
@@Return:
        pop     bp
	ret
_x_install_vsync_handler endp

_x_remove_vsync_handler proc
	cmp     [_VsyncHandlerActive],FALSE
	je      short @@Return
	mov     dx, word ptr cs:[OldTimerInt]
	mov     ax, word ptr cs:[OldTimerInt+2]
	push    ds
	mov     ds,ax
	mov     ax,DOS_SETVECT+TIMER_VECT       ;Restore the old timer int
	cli
	int     21h
	pop     ds
	mov     al,TIMER_MODE                   ;Restore timer 0
	out     TIMER_CONTROL,al
	mov     al,0
	out     TIMER_0,al
	out     TIMER_0,al
	sti
@@Return:
	ret
_x_remove_vsync_handler endp


; WARNING:  The user vsync handler cannot use the 386 specific registers
;           (EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP,FS,GS)
;                       whithout saving them first.
;                       It must not do any drawing.
;                       Only 256 butes of stack is provided.

_x_set_user_vsync_handler proc
ARG handler_proc:dword
	push    bp
	mov     bp,sp
	mov     ax, word ptr [handler_proc]
	mov     dx, word ptr [handler_proc+2]
	cli
	mov     word ptr [UserVsyncHandler],ax
	mov     word ptr [UserVsyncHandler+2],dx
	sti
	pop     bp
	ret
_x_set_user_vsync_handler endp

end

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级片网站| 国产精品灌醉下药二区| 色综合中文字幕国产| 免费成人性网站| 亚洲精品日产精品乱码不卡| 日韩精品资源二区在线| 欧美日韩精品欧美日韩精品一| 成人午夜视频在线观看| 久久精品国产精品亚洲精品 | 精品成人一区二区三区四区| 欧美日韩在线观看一区二区| 91在线免费播放| av亚洲精华国产精华精华| 国产精品91一区二区| 精品亚洲成a人在线观看 | 99久久精品99国产精品| 国产福利91精品| 国产传媒日韩欧美成人| 国产成人精品免费看| 风间由美一区二区av101| 国产一区二区三区免费| 精品一区二区日韩| 久久不见久久见免费视频1| 久久综合综合久久综合| 精品一区二区三区日韩| 久久99精品国产麻豆婷婷洗澡| 久久国产精品无码网站| 国产专区欧美精品| 成人永久aaa| 日本电影亚洲天堂一区| 欧美精选在线播放| 日韩欧美高清一区| 久久九九全国免费| 国产精品成人网| 亚洲午夜精品一区二区三区他趣| 香蕉加勒比综合久久| 麻豆国产精品一区二区三区 | 福利视频网站一区二区三区| 国产美女精品一区二区三区| caoporm超碰国产精品| 欧美日韩激情一区| 精品日韩一区二区三区免费视频| 欧美经典一区二区| 亚洲小说欧美激情另类| 韩国av一区二区| 一本久久a久久精品亚洲| 欧美一区二区福利在线| 久久久精品国产免大香伊| 国产精品传媒在线| 五月婷婷欧美视频| 国产美女精品一区二区三区| 99re6这里只有精品视频在线观看| 欧美性受xxxx黑人xyx性爽| www国产精品av| 亚洲成人动漫精品| 成人精品视频网站| 欧美日韩高清在线| 国产亚洲午夜高清国产拍精品 | 久久蜜臀精品av| 日韩国产精品久久久久久亚洲| 成人精品在线视频观看| 欧美不卡视频一区| 亚洲成a人片在线不卡一二三区| 国产91精品一区二区麻豆网站 | 一本大道久久精品懂色aⅴ| 26uuu精品一区二区三区四区在线| 樱桃国产成人精品视频| 成人手机在线视频| 久久网站最新地址| 蜜臀精品久久久久久蜜臀| 在线视频亚洲一区| 国产欧美1区2区3区| 一区二区三区美女视频| 韩国成人精品a∨在线观看| 欧美日韩aaaaaa| 樱桃国产成人精品视频| 99久久免费精品高清特色大片| 久久精品亚洲一区二区三区浴池| 精品在线观看视频| 日韩欧美一级二级| 精品在线免费视频| 久久久噜噜噜久久中文字幕色伊伊| 裸体在线国模精品偷拍| 精品国产一区二区在线观看| 久久91精品国产91久久小草| 精品免费国产一区二区三区四区| 日韩电影网1区2区| 日韩一区二区三区观看| 奇米影视一区二区三区| 欧美一区二区视频在线观看2020| 日本 国产 欧美色综合| 欧美一级高清片在线观看| 麻豆一区二区在线| 精品av综合导航| 成人教育av在线| 亚洲一区二区3| 欧美一区二区三区播放老司机| 久久精品久久久精品美女| 久久久久9999亚洲精品| 99re热这里只有精品免费视频| 亚洲综合色网站| 一本大道久久a久久综合婷婷| 亚洲精品美腿丝袜| 777久久久精品| 国产在线精品一区二区夜色| 国产精品麻豆欧美日韩ww| 一本久久a久久免费精品不卡| 亚洲成人www| 精品国产91乱码一区二区三区| 国产**成人网毛片九色 | 国产mv日韩mv欧美| 亚洲欧美日韩在线| 日韩欧美aaaaaa| 岛国精品一区二区| 亚洲高清免费在线| 久久久久久99精品| 91福利视频久久久久| 日本不卡免费在线视频| 国产精品电影院| 精品国产乱码久久久久久浪潮| 91首页免费视频| 国产精品123| 美女视频一区二区| 亚洲国产精品欧美一二99| 国产精品网曝门| 欧美顶级少妇做爰| 91影院在线观看| 国产成人自拍网| 捆绑调教美女网站视频一区| 亚洲欧美电影院| 中文在线一区二区| 日韩区在线观看| 欧美精品在线一区二区| 欧美性一级生活| 欧洲精品中文字幕| 成人免费毛片app| 国产一区二区女| 激情小说亚洲一区| 强制捆绑调教一区二区| 亚洲高清三级视频| 亚洲宅男天堂在线观看无病毒| 中文字幕精品三区| 欧美极品xxx| 欧美高清在线一区| 国产日韩精品一区二区三区| 精品国产乱码久久久久久老虎| 欧美精选午夜久久久乱码6080| 91蝌蚪porny九色| 欧美在线|欧美| 在线视频观看一区| 欧美日韩精品一区二区三区蜜桃 | 国产精品996| 懂色av中文一区二区三区| 久久99国产精品尤物| 韩国精品在线观看| 成人一区二区三区视频在线观看| 成人精品视频网站| av电影在线观看完整版一区二区| av一区二区三区四区| eeuss国产一区二区三区| 99久久99久久精品免费观看| 91久久线看在观草草青青| 欧美日韩久久久一区| 欧美电影一区二区| 欧美成人a视频| 国产欧美日韩麻豆91| 亚洲精品国产品国语在线app| 亚洲高清中文字幕| 狠狠久久亚洲欧美| 高清成人免费视频| 色综合久久久久综合体桃花网| 欧美色手机在线观看| 日韩精品一区二区在线观看| 国产精品区一区二区三区| 亚洲成人免费看| 国产一区二区三区综合| 91久久精品一区二区二区| 欧美一区二区三区免费| 久久免费午夜影院| 一区二区三区在线观看国产| 青青青爽久久午夜综合久久午夜 | 精品一区二区精品| 99re视频这里只有精品| 4438x成人网最大色成网站| 在线免费观看成人短视频| 91精品国产91久久久久久最新毛片 | 国产免费成人在线视频| 亚洲bt欧美bt精品777| 国产精品69久久久久水密桃| 欧美日韩亚洲综合| 久久精品一区二区三区不卡| 亚洲电影在线播放| 99视频精品免费视频| 久久这里都是精品| 奇米亚洲午夜久久精品| 欧美日本乱大交xxxxx| 亚洲男同性视频| 成人污视频在线观看| 欧美精品一区二区三区四区| 美国十次了思思久久精品导航|