Материал из Wiki.
Имеет несколько стандартных портов:
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 (седьмой бит).
Отправить комментарий