;------------------------------------------------- ; Вывод часов вверху панели ;------------------------------------------------- show_clock: db 3Eh ; ld a,.. enable_clock: db false ; флаг вывода часов or a ret z call test_show_panels ; тест на режим вкл. панелей ret z ; выкл. call get_systime ; узнать сист. время ld de,clock_string ; буфер часов ld hl,0301h ; с 0-й строки in a,(PORT_Y) ld b,a ; сохр. порт in a,(SLOT0) ld c,a ; сохр.порт di ld a,50h ; видео-страница out (SLOT0),a ld a,75+81h ; +0 (смещ. слева) out (PORT_Y),a ; колонка ; вывод текста ld d,d ; уст. размер блока ld a,5 ; длина строки ld b,b ; выкл. аксель ld l,l ; копировать блок ld a,(de) ld b,b ; выкл. аксель ld a,a ; копирование блока (верт. линии) ld (hl),a ld b,b ; выкл. аксель ; вывод атрибутов ld de,clock_attr ; строка атрибутов ld a,75+81h ; +0 (смещ. слева) out (PORT_Y),a inc hl ; перейти на атрибуты ld d,d ; уст. размер блока ld a,5 ; длина строки ld b,b ; выкл. аксель ld l,l ; копировать блок ld a,(de) ld b,b ; выкл. аксель ld a,a ; копирование блока (верт. линии) ld (hl),a ld b,b ; выкл. аксель ld a,b out (PORT_Y),a ; восст. порт ld a,c out (SLOT0),a ; восст. порт ei ret ;------------------------------------------------- ; Убрать часы ;------------------------------------------------- hidden_clock: ld a,(cur_panel) ; акт. панель 0/80h - левая/правая or a push af call z,change_panel ; перейти на правую call print_up_path ; затереть часы pop af call z,change_panel ; вернуть акт. панель ret ; Прочитать сист. время из регистра "A" CMOS get_systime: ld hl,clock_string ; буфер строки ld d,04h ; регистр часов (0=рег.A, адрес = +4) call get_systime__ inc hl ld d,02h ; регистр минут ; Чтение cmos-регистра ; вход: d=номер регистра и адрес get_systime__: ld bc,0DFBDh ; порт записи адреса CMOS out (c),d ld bc,0FFBDh ; порт чтения данных CMOS in a,(c) ; hex-формат ld c,a rra rra rra rra call $+4 ld a,c and 0Fh cp 9+1 sbc a,69h daa ld (hl),a inc hl ret clock_string: db "00:00" ; строка часов clock_attr: db 30h,30h,30h,30h,30h ; цвет часов