home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 3
/
FreeSoftwareCollection3pd199x-jp.img
/
pao
/
ms_dos
/
swatch
/
src
/
vsync.asm
< prev
next >
Wrap
Assembly Source File
|
1980-01-02
|
5KB
|
197 lines
;==============================================================================
; << MASM V5.1 >> for FM TOWNS
;==============================================================================
page 60,132
name VSYNC
title VSYNC
;==============================================================================
; VSYNC割り込み
;
; CREATE : 1990.08.17
; FINISH : 1990.08.20 V0.50
;
; MSC 用 関数(スモールモデル)
; -- インターバルタイマの使用 --
; VSYNC_init(void) ;
; VSYNC_release(void) ;
;
; < HISTORY >
; 1990.08.17 : CREATE
;
; All Rights Reserved, Copyright (C) Y.Hirata 1990.
;
; Programed by Y.Hirata ( NIFTY-ID : NAB03321 )
;==============================================================================
;
.286 ;
.MODEL SMALL,C ;
.STACK 100h ;
;
;********************************************
; データ領域
;********************************************
.DATA ;
;
public Vcount ;
Vcount dw ? ; VSYNCカウンタ
;
;
;********************************************
; コード領域
;********************************************
.CODE ;
;
COPYRIGHT db 0Dh
db ' ',0Dh,0Ah,07h
db 0Dh,0Ah,' '
db 'VSYNC INTERRUPT V0.50 1990-08-17',0Dh,0Ah
db 0Dh,0Ah,' '
db 'Copyright (C) Y.Hirata 1990.'
db 0Dh,0Ah,0Dh,0Ah,1Ah
;
TITLE_name db 'VSYNC INTERRUPT'
TITLE_len EQU $-TITLE_name
;
;
;********************************************
; 定数定義
;********************************************
TRUE EQU 1
FALSE EQU 0
;
ZERO EQU 0
;
INT_INT EQU 0AEh ; 割り込み管理BIOS
INT_NUM EQU 00Bh ; IRQ B (オプションボード)
IRQ_0B_ON EQU 08h ; IRQ B 割り込み許可 (11 ビット)
IRQ_0B_OFF EQU 0F7h ; IRQ B 割り込み不許可 (11 ビット)
VSYNC_CLR EQU 05CAh ; VSYNC割り込み原因クリアレジスタ
;
;
;********************************************
; データ定義
;********************************************
int_mask_data label BYTE ; 割り込み許可データ
db ? ; ビット 31~24 +0
db ? ; ビット 23~16 +1
db ? ; ビット 15~ 8 +2
db ? ; ビット 7~ 0 +3
;
vsync_offset dw ? ; 割り込みデータブロック・オフセット
vsync_segment dw ? ; 割り込みデータブロック・セグメント
;
vsync_adrs db 0 ; 割り込みデータブロック..
db 0 ;
dw VSYNC_handr ; ハンドラアドレス・オフセット
dw ? ; ハンドラアドレス・セグメント
;
;
;********************************************
; VSYNCハンドラ
;********************************************
VSYNC_handr proc FAR ;
push ds ;
push dx ;
;
cli ;
mov dx,VSYNC_CLR ;
out dx,al ; ダミーライト (VSYNC割り込み原因クリア)
sti ;
;
mov ax,@data ; load ds
mov ds,ax ;
mov ax,Vcount ;
inc ax ;
mov Vcount,ax ; VSYNCカウンタ・インクリメント
;
pop dx ;
pop ds ;
lds di,DWORD ptr cs:vsync_offset
; 本来のVSYNCハンドラに処理を移す
jmp DWORD ptr ds:[di+2] ; Jump Real Handler
;
ret
VSYNC_handr endp ;
;
;********************************************
; VSYNC割り込みの登録
;********************************************
VSYNC_init proc NEAR ;
push ds ;
push di ;
push dx ;
;
push cs ;
pop ds ; ds = cs
;
mov ah,01h ;
mov dl,INT_NUM ; 割り込み要因コード
int INT_INT ; 割り込みデータブロックアドレスの取り出し
;
mov cs:vsync_offset,di ; データブロックアドレス・オフセット
mov cs:vsync_segment,ds ; データブロックアドレス・セグメント
;
push cs ;
pop ds ; ds = cs
;
mov WORD ptr cs:[vsync_adrs+4],cs
; VSYNC ハンドラのセグメント
mov ah,00h ;
mov dl,INT_NUM ; 割り込み要因コード
mov di,offset cs:vsync_adrs ;
int INT_INT ; 割り込みデータブロックアドレスの登録
;
mov ah,03h ;
mov di,offset cs:int_mask_data ; 割り込み許可データ
int INT_INT ; 割り込み管理データの取り出し
;
or BYTE ptr [di+2],IRQ_0B_ON
; VSYNC 割り込みの許可
mov ah,02h ;
int INT_INT ; 割り込み許可データの書き込み
;
shr ax,8 ; リターンコード
;
pop dx ;
pop di ;
pop ds ;
ret ;
VSYNC_init endp ;
;
;********************************************
; VSYNC割り込みの取消
;********************************************
VSYNC_release proc near ;
push ds ;
push di ;
push dx ;
;
push cs ;
pop ds ; ds = cs
;
mov ah,03h ;
mov di,offset cs:int_mask_data ; 割り込み許可データ
int INT_INT ; 割り込み管理データの取り出し
and BYTE ptr [di+2],IRQ_0B_OFF
; VSYNC 割り込みの禁止
mov ah,02h ;
int INT_INT ; 割り込み許可データの書き込み
;
mov ah,00h ;
mov dl,INT_NUM ; 割り込み要因コード
lds di,DWORD ptr cs:vsync_offset
; 割り込みデータブロック
int INT_INT ; 割り込みデータブロックアドレスの登録
;
shr ax,8 ; リターンコード
;
pop dx ;
pop di ;
pop ds ;
ret ;
VSYNC_release endp ;
;
;
end