2013-06-28 5 views
2

비디오 메모리 (0xB8000)의 주소로 비디오 메모리를이 주소에 매핑합니까?
주소에서 데이터를 복사하고 화면에 표시하는 루틴입니다. 프로세서 내장 함수입니까? (이 드라이버는 프로세서와 함께 제공됩니까?)?
당신이 주소로 쓸 때 어떻게됩니까비디오 메모리 주소

답변

3

:

주소 공간의 영역을 RAM에 매핑되지는 대신 귀하의 VGA 카드에 시스템 버스를 통해 전송됩니다. BIOS는 부팅 할 때 VGA 카드를 사용하여 설정합니다 (많은 주소 범위는 다양한 장치에 메모리 매핑 됨). 주소 공간의이 영역에 쓸 때 픽셀을 플롯하기 위해 CPU에서 코드가 실행되지 않습니다. VGA 카드는 RAM 대신이 정보를 수신하여이 작업을 수행합니다.

원하는 경우 BIOS 기능 호출을보고 하드웨어를 다시 구성하여 대신 비디오 주소에 장소 문자 대신 픽셀을 플롯 할 수 있습니다. VESA를 지원하는지 확인하고 멋진 1280 * 768 32bpp 해상도로 전환 할 수도 있습니다. 그러면 BIOS가 선택한 주소 공간의 영역을 VGA 카드에 매핑합니다. BIOS에 대한

더보기 :

BIOS에서 CPU의 때 처음으로 힘을 실행하는 마더 보드와 함께 제공되는 프로그램입니다. 모든 하드웨어를 설정하고, 모든 메모리 매핑 장치를 매핑하고, 다양한 유용한 테이블을 만들고, IO 포트를 지정하고, 메모리에 남겨둔 루틴까지 인터럽트를 연결합니다. 그런 다음 장치에서 부트 섹터를로드하고 OS 코드로 이동합니다.

왼쪽 뒤에있는 루틴과 데이터 구조를 통해 OS를 실행할 수 있습니다. 섹터를 디스크에서로드하고, 화면에 텍스트를 쓰고, 시스템에 대한 정보를 얻을 수 있습니다 (메모리 맵, ACPI 테이블, MP 테이블 등). 이러한 루틴과 데이터 구조가 없으면 수용 가능한 부트 섹터를 만들고 시스템에 대한 모든 정보를 가지고 기능적 커널을 구축하는 것이 훨씬 더 어렵습니다.

그러나 루틴은 날짜가 있으며 느리며 매우 제한이 있습니다. 하나의 메모리에 남아있는 루틴은 16 비트 리얼 모드 코드이므로 32 비트 보호 모드로 전환하자 마자 끊임없이 되돌아 가거나 VM86 모드를 사용하여 액세스해야합니다 (64 비트 모드에서는 완전히 액세스 할 수 없음, 수정 된 명령으로 명령을 분명히 에뮬레이션 함). 리눅스 x86emu 라이브러리는 옵션입니다). 따라서 루틴은 일반적으로 매우 느립니다. 따라서 실제 모드 프로그래밍에서 벗어나면 자신 만의 드라이버를 처음부터 작성해야합니다. 대부분의 경우

0

은 PC 모니터 standard 의해 0xB8000의 어드레스부터 MMIO 통해 text buffer (32킬로바이트 크기)를 설정하기위한 모드를 포함하는 VGA-compatible device이다. MMIO가 어떻게 작동하는지

How MMIO works:

위의 그림은 요약 한 것입니다.