Работа с CMOS памятью

Материал из Wiki.ROM.by
Перейти к: навигация, поиск

Имеет несколько стандартных портов:
70h - регистр адреса
71h - регистр данных
И еще несколько..

Read_CMOS  proc          
    out     70h, al   ; CMOS Memory:
                      ; used by real-time clock
    jcxz    $+2       ; Jump if CX is 0
    jcxz    $+2       ; Jump if CX is 0
    in      al, 71h   ; CMOS Memory
    jcxz    $+2       ; Jump if CX is 0
    jcxz    $+2       ; Jump if CX is 0
    retn              ; Return from Procedure
Read_CMOS  endp    
Write_CMOS  proc          
    out     70h, al   ; CMOS Memory:
                      ; used by real-time clock
    jcxz    $+2       ; Jump if CX is 0
    jcxz    $+2       ; Jump if CX is 0
    out     71h, ah   ; CMOS Memory
    jcxz    $+2       ; Jump if CX is 0
    jcxz    $+2       ; Jump if CX is 0
    retn              ; Return from Procedure
Write_CMOS  endp    

Оператор jcxz $+2 организует программную задержку в несколько миллисекунд для корректного чтения/записи CMOS.
С такой же целью могут быть вставлены операторы mov ax, ax или out EBh, ax.
Ещё одно замечание: часто можно видеть что-то типа:

mov al, 8Fh
out     70h, al   ; CMOS Memory:
                  ; used by real-time clock
jcxz    $+2       ; Jump if CX is 0
jcxz    $+2       ; Jump if CX is 0
in      al, 71h   ; CMOS Memory
jcxz    $+2       ; Jump if CX is 0
jcxz    $+2       ; Jump if CX is 0
retn              ; Return from Procedure

Это не есть чтение ячейки 8Fh. Это есть чтение ячейки 0Fh но с установленным битом запрещения прерывания NMI (седьмой бит).


Персональные инструменты
Google