.MODEL large .186 UP EQU 1 DOWN EQU 0 CONT_BASE EQU 0FF00H EOI_REGISTER EQU CONT_BASE + 022H TIMER_CONTROL_REGISTER EQU CONT_BASE + 032H TIMER_CTL EQU CONT_BASE + 00032H TIMER0_CNT EQU CONT_BASE + 00050H TIMER0_MAXA EQU CONT_BASE + 00050H TIMER0_MAXB EQU CONT_BASE + 00054H TIMER0_CTL EQU CONT_BASE + 00056H TIMER1_CNT EQU CONT_BASE + 00058H TIMER1_MAXA EQU CONT_BASE + 0005AH TIMER1_MAXB EQU CONT_BASE + 0005CH TIMER1_CTL EQU CONT_BASE + 0005EH TIMER2_MAX EQU CONT_BASE + 00062H TIMER2_CTL EQU CONT_BASE + 00066H NON_SPECIFIC_EOI EQU 08000H YARD_INCREMENT EQU 010000000000B YARD_DECREMENT EQU 01000000000000B DGROUP group _DATA, _BSS _DATA segment word public 'DATA' @curseg ENDS _BSS segment word public 'BSS' @curseg ENDS EXTRN _dt_ymppr:WORD EXTRN _dt_ymdydx:WORD EXTRN _io_evnt:DWORD EXTRN AAEVSIG:far assume cs:_TEXT,ds:DGROUP _TEXT segment byte public 'CODE' public _dt_ym0 public _dt_ym1 _dt_ym0 proc far push ax push bx push dx xor ax,ax mov dx,TIMER1_CNT in al,dx or al,al jnz FIXCOUNT0 xor ax,ax out dx,ax mov dx,TIMER0_CNT out dx,ax jmp SIGDEC FIXCOUNT0: mov bx,ax mov ax,_dt_ymppr sub ax,bx mov dx,TIMER0_CNT out dx,ax xor ax,ax mov dx,TIMER1_CNT out dx,ax jmp VAMOS0 SIGDEC: mov _dt_ymdydx,DOWN push word ptr 0FFFFH push word ptr YARD_DECREMENT push word ptr _io_evnt call far ptr AAEVSIG add sp,6 VAMOS0: mov dx,EOI_REGISTER mov ax,NON_SPECIFIC_EOI out dx,ax pop dx pop bx pop ax ret _dt_ym0 endp _dt_ym1 proc far push ax push bx push dx xor ax,ax mov dx,TIMER0_CNT in al,dx or al,al jnz FIXCOUNT1 xor ax,ax out dx,ax mov dx,TIMER1_CNT out dx,ax jmp SIGINC FIXCOUNT1: mov bx,ax mov ax,_dt_ymppr sub ax,bx mov dx,TIMER1_CNT out dx,ax xor ax,ax mov dx,TIMER0_CNT out dx,ax jmp VAMOS1 SIGINC: mov _dt_ymdydx,UP push word ptr 0FFFFH push word ptr YARD_INCREMENT push word ptr _io_evnt call far ptr AAEVSIG add sp,6 VAMOS1: mov dx,EOI_REGISTER mov ax,NON_SPECIFIC_EOI out dx,ax pop dx pop bx pop ax ret _dt_ym0 endp @curseg ENDS end