CMOS Memory Map

도스박물관
Pc1412 (토론 | 기여)님의 2026년 6월 17일 (수) 04:20 판 (새 문서: {{문서 정보 |분류=하드웨어 |대상=IBM PC/AT 호환기종 |주제=CMOS RAM / RTC / BIOS 설정 |상태=정리중 }} = CMOS Memory Map = '''CMOS'''는 IBM PC/AT 계열 호환기종에서 실시간 시계(RTC)와 BIOS 설정값을 저장하기 위해 사용되는 배터리 백업 RAM이다. 일반적으로 64바이트 또는 128바이트 크기를 가지며, RTC 칩 내부의 RAM 영역으로 존재한다. PC/AT 이후에는 Motorola '''MC146818''' 또는 호환 RTC...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
둘러보기로 이동검색으로 이동

틀:문서 정보

CMOS Memory Map

CMOS는 IBM PC/AT 계열 호환기종에서 실시간 시계(RTC)와 BIOS 설정값을 저장하기 위해 사용되는 배터리 백업 RAM이다. 일반적으로 64바이트 또는 128바이트 크기를 가지며, RTC 칩 내부의 RAM 영역으로 존재한다.

PC/AT 이후에는 Motorola MC146818 또는 호환 RTC 칩이 메인보드에 탑재되면서 CMOS RAM이 시스템 구성 정보 저장용으로 널리 사용되었다. RTC 자체는 시간 유지에 일부 바이트만 사용하고, 나머지 영역은 플로피 드라이브 종류, 하드디스크 타입, 메모리 크기, 부팅 옵션, 체크섬, BIOS 제조사별 확장 설정 등에 사용된다.

개요

항목 내용
명칭 CMOS RAM
용도 RTC 시간 정보 및 BIOS 설정 저장
일반 크기 64바이트 또는 128바이트
접근 방식 I/O 포트 70h, 71h
대표 칩 Motorola MC146818 및 호환 RTC
배터리 메인보드 배터리로 내용 유지

접근 방법

CMOS RAM은 일반 메모리 주소 공간에 직접 매핑되어 있지 않으며, I/O 포트를 통해 접근한다.

포트 용도
70h CMOS 주소 선택
71h 선택한 CMOS 주소의 데이터 읽기/쓰기

CMOS 값을 읽을 때는 먼저 포트 70h에 읽고 싶은 CMOS 주소를 출력한 뒤, 포트 71h에서 값을 읽는다.

10 CLS
20 FOR I = 0 TO &H7F
30 OUT &H70, I
40 PRINT USING "\   \"; HEX$(INP(&H71));
50 NEXT I
60 PRINT " "

포트 70h의 bit 7은 NMI(Non-Maskable Interrupt) 제어에 사용된다. 따라서 일부 BIOS나 프로그램은 CMOS 접근 시 bit 7 처리에 주의한다.

주소 영역 요약

CMOS 주소 용도
00h-09h RTC 시간 및 날짜 데이터
0Ah-0Dh RTC 상태 레지스터
0Eh-0Fh 진단 상태 / 리셋 코드
10h-2Dh PC/AT 표준 및 BIOS 제조사별 시스템 설정
2Eh-2Fh 표준 CMOS 체크섬
30h-33h 확장 메모리, 세기 바이트, 정보 플래그
34h-3Fh AMI/AWARD/Phoenix 등 BIOS별 확장 설정
40h-7Fh 확장 CMOS 영역 또는 00h-3Fh 미러

RTC 영역

CMOS의 00h-0Dh 영역은 RTC 하드웨어에 의해 정의된다.

주소 이름 설명
00h Seconds
01h Second Alarm 초 알람
02h Minutes
03h Minute Alarm 분 알람
04h Hours
05h Hour Alarm 시 알람
06h Day of Week 요일
07h Date of Month
08h Month
09h Year 연도
0Ah Status Register A RTC 상태 레지스터 A
0Bh Status Register B RTC 상태 레지스터 B
0Ch Status Register C RTC 상태 레지스터 C
0Dh Status Register D RTC 상태 레지스터 D

시간 데이터 형식

시간 값은 RTC 설정에 따라 BCD 또는 바이너리 형식으로 저장된다. 이 설정은 CMOS 0Bh, 즉 RTC Status Register B의 bit 2에 의해 결정된다.

항목 설명
BCD 모드 00-59 등의 값을 BCD 형식으로 저장
Binary 모드 값을 일반 16진수/바이너리 값으로 저장
12/24시간 모드 CMOS 0Bh bit 1에 의해 결정

RTC 상태 레지스터

CMOS 0Ah - Status Register A

비트 설명
7 시간 갱신 진행 중
6-4 22단 분주기 설정
3-0 주기 인터럽트 속도 선택

CMOS 0Bh - Status Register B

비트 설명
7 갱신 사이클 제어
6 주기 인터럽트 활성화
5 알람 인터럽트 활성화
4 갱신 완료 인터럽트 활성화
3 Square wave 출력 활성화
2 데이터 모드. 0=BCD, 1=Binary
1 시간 모드. 1=24시간
0 일광절약시간제 활성화

CMOS 0Ch - Status Register C

비트 설명
7 인터럽트 요청 플래그
6 주기 인터럽트 플래그
5 알람 인터럽트 플래그
4 갱신 완료 인터럽트 플래그

CMOS 0Dh - Status Register D

비트 설명
7 Valid RAM. 배터리 전원 정상 여부
6-0 미사용

PC/AT 표준 CMOS 영역

CMOS 10h - 플로피 드라이브 타입

CMOS 10h는 A:와 B: 플로피 드라이브의 종류를 저장한다.

비트 설명
7-4 첫 번째 플로피 드라이브 A:
3-0 두 번째 플로피 드라이브 B:
드라이브 종류
00h 없음
01h 360KB 5.25인치
02h 1.2MB 5.25인치
03h 720KB 3.5인치
04h 1.44MB 3.5인치
05h 2.88MB 3.5인치

예를 들어 A:가 1.2MB 5.25인치이고 B:가 1.44MB 3.5인치이면 CMOS 10h 값은 24h가 된다.

CMOS 12h - 하드디스크 타입

비트 설명
7-4 첫 번째 하드디스크 타입
3-0 두 번째 하드디스크 타입

값이 0Fh인 경우 실제 확장 하드디스크 타입은 CMOS 19h 또는 1Ah에 저장된다.

CMOS 14h - Equipment Byte

CMOS 14h는 장착된 기본 장치 정보를 나타낸다.

비트 설명
7-6 플로피 드라이브 수
5-4 모니터 종류
3 디스플레이 활성화
2 키보드 활성화
1 수학 보조프로세서 장착 여부
0 플로피 드라이브 장착 여부

모니터 종류는 다음과 같이 해석된다.

설명
00b CGA/MDA 아님. EGA/VGA 등
01b 40x25 CGA
10b 80x25 CGA
11b MDA

CMOS 15h-16h - 기본 메모리 크기

주소 설명
15h 기본 메모리 KB 단위, Low Byte
16h 기본 메모리 KB 단위, High Byte

640KB 기본 메모리는 0280h로 저장되므로, CMOS 15h는 80h, 16h는 02h가 된다.

CMOS 17h-18h - 확장 메모리 크기

주소 설명
17h 확장 메모리 KB 단위, Low Byte
18h 확장 메모리 KB 단위, High Byte

하드디스크 확장 타입

주소 설명
19h 첫 번째 확장 하드디스크 타입
1Ah 두 번째 확장 하드디스크 타입

PC/AT 표준 타입 1-14를 넘어서는 하드디스크 타입은 이 영역에 저장된다. 많은 BIOS에서 마지막 타입, 예를 들어 Type 47 또는 Type 49는 사용자 정의 하드디스크로 사용된다.

체크섬 영역

주소 설명
2Eh 표준 CMOS 체크섬 High Byte
2Fh 표준 CMOS 체크섬 Low Byte

IBM PC/AT 표준에서는 CMOS 10h-2Dh 영역의 바이트 합을 2Eh-2Fh에 저장한다. 많은 호환 BIOS는 이 체크섬이 맞지 않으면 CMOS Checksum Error를 표시한다.

확장 메모리 및 세기 바이트

주소 설명
30h 확장 메모리 KB 단위, Low Byte
31h 확장 메모리 KB 단위, High Byte
32h Century Byte
33h Information Flag

CMOS 32h는 세기 값을 BCD로 저장하는 용도로 사용된다. 예를 들어 1900년대는 19h로 저장된다. 단, IBM PS/2에서는 32h-33h가 구성 CRC 용도로 사용된다.

BIOS 제조사별 차이

CMOS 10h-3Fh 영역은 IBM PC/AT 표준을 기반으로 하지만, 실제 호환기종에서는 BIOS 제조사에 따라 의미가 달라질 수 있다.

제조사/기종 특징
IBM PC/AT 표준 CMOS 배치의 기준
IBM PS/2 일부 영역이 PC/AT 표준과 다름
AMI / AMI Hi-Flex 키보드 반복속도, 고급 설정, 캐시, 섀도우 RAM 등 저장
AMI WinBIOS 부팅 옵션, IDE/LBA, 캐시, 패스워드 관련 플래그 저장
AWARD NumLock, IDE Block Mode, BIOS Shadow, 패스워드, 부팅 옵션 등 저장
Phoenix 하드디스크 사용자 정의 정보 및 섀도우 관련 설정 저장
AMSTRAD PC/XT급 8086/8088 시스템에서 자체 정의 사용
HP Vectra 별도 체크섬 및 예약 영역 존재

64바이트 CMOS와 128바이트 CMOS

초기 시스템은 64바이트 CMOS를 사용하는 경우가 많다. 이 경우 40h-7Fh 주소를 읽으면 실제 별도 영역이 아니라 00h-3Fh가 반복되어 보일 수 있다.

일부 후기 RTC 칩과 BIOS는 128바이트 CMOS를 사용하며, 40h 이후 영역을 칩셋 설정, PCI 설정, 전원 관리, 캐시 설정 등에 사용한다.

주의사항

  • CMOS 값은 시스템 설정과 직접 연결되므로 임의로 변경하면 부팅 오류가 발생할 수 있다.
  • CMOS 체크섬이 맞지 않으면 BIOS에서 CMOS Checksum Error를 표시할 수 있다.
  • RTC 시간 영역은 갱신 중일 수 있으므로 Status Register A의 update-in-progress bit를 확인하는 것이 안전하다.
  • IBM PS/2, AMSTRAD, 일부 OEM 기종은 일반 PC/AT 호환기와 CMOS 배치가 다를 수 있다.
  • 배터리가 방전되면 CMOS 값이 손상되거나 초기화된다.

관련 오류

오류 의미
CMOS Checksum Error CMOS 설정값과 체크섬이 맞지 않음
CMOS Battery Low 배터리 전압 저하
Time and Date Not Set RTC 시간 정보 손실
Equipment Configuration Error 장착 장치 정보와 CMOS 설정 불일치

관련 항목

참고