The CMOS memory information
CMOS stands for: Complementary Metal Oxide Semiconductor
In the 286 and up, the CMOS memory chip holds 64 bytes of data. The data is held in the chip by the battery. This is so that when you turn your machine off, the machine can still keep track of the time, data, disk type(s) and so one.
The CMOS memory is accessed via 2 I/O ports, at addresses 70h and 71h. A program writes the config. address (00h through 3Fh) to I/O port 70h and then writes a new byte value or reads the current byte value at I/O port 71h. I strongly suggest that you don't write to these ports unless you know what you are doing. You could severely mess up your machine
The following table specifies the information in the CMOS memory:
address (hex) Contents
00h Current Second (either in BCD or hex format, see bit 2 of offset 0Bh below)
01h Second Alarm
02h Current Minute
03h Minute Alarm
04h Current Hour (see bit 1 of offset OBh below)
05h Hour Alarm
06h Day of the Week
07h Day of the Month
08h Month
09h Year (00-99) (see offset 32h)
0Ah Clock Register A
0Bh Clock Register B
bits: 76543210 Meaning
X....... 1 = enable clock setting by freezing updates
.X...... 1 = enable periodic interrupt
..X..... 1 = enable alarm interrupt
...X.... 1 = enable update-ended interrupt
....X... 1 = enable square wave output
.....X.. 1 = Data Mode - 0: BCD, 1: Binary
......X. 1 = 24/12 hour selection - 1 enables 24 hour mode
.......X 1 = Daylight Savings Enable
=1 enables automatic switching to/from DST
in April and October
0Ch Clock Register C
0Dh Clock Register D
0Eh Diagnostic byte (got during Power On Self Test)
bits: 76543210 Meaning
X....... 1 = CMOS battery Dead
.X...... 1 = checksum incorrect
..X..... 1 = config. byte incorrect
...X.... 1 = memory size incorrect
....X... 1 = hard disk or controller error
.....X.. 1 = date or time incorrect
......XX Not used
0Fh Power-down system status ?what was last boot?
10h Bits 4-7: first floppy disk type
0000 = no disk drive
0001 = 5.25" 320k or 360k
0010 = 5.25" 1.2m
0011 = 3.5" 720k
0100 = 3.5" 1.44m
0110 = 3.5" 2.88m
Bits 0-3: second floppy disk type
same as above
11h reserved
12h Bits 4-7: first Hard Drive type
Bits 3-0: second Hard Drive type
13h reserved
14h Configuration byte
bits: 76543210 Function Meaning
XX...... number of disk drives 00 = 1 drive
01 = 2 drives
..XX.... Primary display type 00 = display has its own BIOS
01 = 40-column CGA
10 = 80-column CGA
11 = MDA
....XX.. not used
......X. 1 = math coprocessor installed
......X. 0 = no floppy drives
1 = floppy drives available
15h Low byte of base memory size
100h = 256k
200h = 512k
280h = 640k
16h High byte of 15h above
17h Low expansion memory byte
18h High expansion memory byte
200h = 512k
400h = 1024k
600h-3C00h = 1536-15,360k
19h Extended type byte: Hard drive 1
1Ah Extended type byte: Hard drive 2
1Bh-2Dh reserved
2Eh check-sum for addresses 10h-2Dh (word)
2Fh see above
30h Low expansion memory byte
31h High expansion memory byte
200h = 512k
400h = 1024k
600h-3C00h = 1536-15,360k
32h Centry in BCD (19 or 20) (see offset 09h)
33h Information flag
You may also use INT 11h to get some of this data.
For more detailed information, download the following zip file: CMOSINFO.ZIP
For a sample assembler program to print the date and time, download the following asm file: cmosdt.asm (3k)
This was extracted from Peter Norton's PC Programmers Bible