committed by
GitHub
commit
de83ce2c58
21
rtc.S
21
rtc.S
@@ -1,20 +1,35 @@
|
|||||||
/* https://github.com/cirosantilli/x86-bare-metal-examples#rct */
|
/* https://github.com/cirosantilli/x86-bare-metal-examples#rct */
|
||||||
|
|
||||||
/* TODO what do those numbers mean? Where is this all documented? */
|
/*
|
||||||
|
* Reference: https://wiki.osdev.org/CMOS
|
||||||
|
Register Contents Range
|
||||||
|
0x00 Seconds 0–59
|
||||||
|
0x02 Minutes 0–59
|
||||||
|
0x04 Hours 0–23 in 24-hour mode,
|
||||||
|
1–12 in 12-hour mode, highest bit set if pm
|
||||||
|
0x07 Day of Month 1–31
|
||||||
|
0x08 Month 1–12
|
||||||
|
0x09 Year 0–99
|
||||||
|
|
||||||
|
0x0A Status Register A
|
||||||
|
RTC has an "Update in progress" flag (bit 7 of Status Register A).
|
||||||
|
To read the time and date properly you have to wait until
|
||||||
|
the "Update in progress" flag goes from "set" to "clear".
|
||||||
|
*/
|
||||||
.equ RTCaddress, 0x70
|
.equ RTCaddress, 0x70
|
||||||
.equ RTCdata, 0x71
|
.equ RTCdata, 0x71
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
BEGIN
|
BEGIN
|
||||||
update_in_progress:
|
update_in_progress:
|
||||||
mov $10, %al
|
mov $0x0A, %al
|
||||||
out %al, $RTCaddress
|
out %al, $RTCaddress
|
||||||
in $RTCdata, %al
|
in $RTCdata, %al
|
||||||
testb $0x80, %al
|
testb $0x80, %al
|
||||||
jne update_in_progress
|
jne update_in_progress
|
||||||
|
|
||||||
/* Second. */
|
/* Second. */
|
||||||
mov $0, %al
|
mov $0x00, %al
|
||||||
out %al, $RTCaddress
|
out %al, $RTCaddress
|
||||||
in $RTCdata, %al
|
in $RTCdata, %al
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user