.model compact, C
.286
extrn new_isr: far
extrn old_isr: dword
extrn timer_pos: word
.code
public set_clock, restore_clock

set_clock proc C
  push ds
  mov timer_pos, 0  
  mov ax, 3508h
  int 21h
  mov cx, bx
  mov bx, seg old_isr
  mov ds, bx
  mov bx, offset old_isr
  mov word ptr ds:[bx], cx
  add bx, 2
  mov word ptr ds:[bx], es
  mov ax, 2508h
  mov dx, seg new_isr
  mov ds, dx 
  mov dx, offset new_isr
  int 21h
  pop ds
  mov al, 36h
  out 43h, al
  mov al, 149
  out 40h, al
  sub al, al
  out 40h, al
  ret
set_clock ENDP

restore_clock proc C
  push ds
  mov bx, seg old_isr
  mov es, bx 
  mov bx, offset old_isr
  mov ax, 2508h
  mov dx, es:[bx]
  add bx, 2
  mov cx, es:[bx]
  mov ds, cx
  int 21h 
  mov al, 36h
  out 43h, al
  sub al, al
  out 40h, al
  out 40h, al
  pop ds
  ret
restore_clock ENDP
END
