;==============================================================================
;	<< MASM V5.1 >>  for  FM TOWNS
;==============================================================================
	page		60,132
	name		INT_TIMER
	title		Interval Timer
;==============================================================================
;	タイマ管理BIOS
;
;	CREATE : 1990.08.17
;	FINISH : 1990.08.17  V0.50
;
;	MSC 用 関数(ｽﾓｰﾙﾓﾃﾞﾙ)
;	-- ｲﾝﾀｰﾊﾞﾙﾀｲﾏの使用 --
;	intime_init(void) ;
;	intime_release(void) ;
;
;	< HISTORY >
;	1990.08.17 : CREATE
;
;	All Rights Reserved, Copyright (C) Y.Hirata 1990.
;
;	Programmed by Y.Hirata ( NIFTY-ID : NAB03321 )
;==============================================================================
;
			.286							;
			.MODEL	SMALL,C					;
			.STACK	100h					;
;
;********************************************
;			データ領域
;********************************************
			.DATA							;
;
			public	ITcount					;
ITcount			dw		?					; ｲﾝﾀｰﾊﾞﾙﾀｲﾏ･ｶｳﾝﾀ
;
;
;********************************************
;			コード領域
;********************************************
			.CODE							;
;
COPYRIGHT	db			0Dh
			db			'     ',0Dh,0Ah,07h
			db			0Dh,0Ah,'        '
			db			'INTERVAL TIMER V0.50   1990-08-17',0Dh,0Ah
			db			0Dh,0Ah,'        '
			db			'Copyright (C) Y.Hirata 1990.'
			db			0Dh,0Ah,0Dh,0Ah,1Ah
;
;
;********************************************
;			定数定義
;********************************************
TRUE		EQU			1
FALSE		EQU			0
;
ZERO		EQU			0
;
INT_TIME	EQU			97h					; ﾀｲﾏ管理BIOS
;
INT_MODE	EQU			0					; 割り込みﾓｰﾄﾞ : ｲﾝﾀｰﾊﾞﾙﾓｰﾄﾞ
INT_INF		EQU			0					; 割り込みﾓｰﾄﾞ使用
;
TITLE_name	db			'INTERVAL TIMER'
TITLE_len	EQU			$-TITLE_name
;
;
;********************************************
;			データ定義
;********************************************
parablock	db		INT_MODE				;
			db		ZERO					;
			dw		offset itimer_handr		; ﾊﾝﾄﾞﾗ･ｵﾌｾｯﾄ
			dw		?						; ﾊﾝﾄﾞﾗ･ｾｸﾞﾒﾝﾄ
			dw		ZERO					;
			dw		1						; 10ms のｲﾝﾀｰﾊﾞﾙ設定
;
itimer_no	db		?						; ﾀｲﾏ管理番号
;
;
;********************************************
;			タイマハンドラ
;********************************************
itimer_handr	proc	far					;
			push	ds						;
;
			mov		ax,@data				; load ds
			mov		ds,ax					;
			mov		ax,ITcount				;
			inc		ax						;
			mov		ITcount,ax				; ｲﾝﾀｰﾊﾞﾙﾀｲﾏｶｳﾝﾀ･ｲﾝｸﾘﾒﾝﾄ
;
			pop		ds						;
			ret
itimer_handr	endp						;
;
;********************************************
;			タイマの登録
;********************************************
ITIMER_init		proc	near				;
			push	ds						;
			push	di						;
;
			push	cs						;
			pop		ds						; ds = cs
;
			mov		WORD ptr [parablock+4],cs	;
			mov		di,offset parablock		;
			xor		ax,ax					;
			int		INT_TIME				;
;
			mov		itimer_no,al			; ﾀｲﾏ管理番号
;
			pop		di						;
			pop		ds						;
			ret								;
ITIMER_init		endp						;
;
;********************************************
;			タイマの取消
;********************************************
ITIMER_release	proc	near				;
			push	ds						;
;
			push	cs						;
			pop		ds						; ds = cs
;
			mov		ah,01h					;
			mov		al,itimer_no			;
			int		INT_TIME				;
;
			shr		ax,8					; ﾘﾀｰﾝｺｰﾄﾞ
;
			pop		ds						;
			ret								;
ITIMER_release	endp						;
;
;
			end

