; Резидентная программка-будильничек, в определенные часы выводит
; время и надпись, задаваемые пользователем
;_—-== вывод строки string на экран ==—-
@DisStr MACRO string
mov ah,9h
mov dx,offset &string
int 21h
ENDM
PAGE 60,132
TITLE ALARM — CLOCK
;_____________________________________________________________________________
code segment para public ‘code’
assume cs:code,ds:code
org 100h
start: jmp init
;_____________________________________________________________________________
;_——== новый вектор преырывания 1Ch ==——
int_1Ch:
cli
push AX
push CX
push DX
push ES
push DI
push BX
push SI
;_——== начнем с проверки ==——
call check_time
cmp CX,[CS:tim]
jnz finish
call check_time
cmp AL,5
jg finish
call mes_out
a: call click ;звонок
;сообщение
;_——== А вот и конец обработки ==——
finish:
pop SI
pop BX
pop DI
pop ES
pop DX
pop CX
pop AX
sti
iret
;_____________________________________________________________________________
;_——== проверка на время ==——
check_time PROC NEAR
call check_busy
cli
mov AL,4 ;часы
call read_clock
mov AH,AL
mov AL,2 ;минуты
call read_clock
mov cx,ax
mov al,0 ;секунды
call read_clock
sti
ret
check_time ENDP
;_____________________________________________________________________________
;_——== проверить,не идет ли изменение времени ==——
check_busy PROC NEAR
push CX
mov CX,1168h
repeat:
mov AL,0ah
cli
out 70h,AL ;пошлем в порт для проверки
jmp short $+2
in AL,71h ;получим измененное значение
and AL,80h ;7 бит занятости
jz go_out
sti
loop repeat
mov AL,80h
go_out:
pop CX
ret
check_busy ENDP
;______________
