ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • VGA 텍스트 모드
    공학/컴퓨터구조 2023. 8. 5. 03:05

    글의 참고

    - https://en.wikipedia.org/wiki/VGA_text_mode

    - https://en.wikipedia.org/wiki/Text_mode

    - https://web.archive.org/web/20150816220334/http://www.eyetap.org/cyborgs/manuals/soft_vga.pdf

    - https://wiki.osdev.org/Text_mode

    - https://wiki.osdev.org/Printing_To_Screen


    글의 전제

    - 내가 글을 쓰다가 궁금한 점은 파란색 볼드체로 표현했다. 나도 모르기 때문에 나중에 알아봐야 할 내용이라는 뜻이다.

    - 밑줄로 작성된 글은 좀 더 긴 설명이 필요해서 친 것이다. 그러므로, 밑 줄 처친 글이 이해가 안간다면 링크를 따라서 관련 내용을 공부하자.

    - `글의 참조`에서 빨간색 볼드체로 체크된 링크는 이 글을 작성하면 가장 많이 참조한 링크다.

    - `운영체제 만들기` 파트에서 퍼온 모든 참조 글들과 그림은 반드시 `이 글과 그림을 소스 코드로 어떻게 구현을 해야할까` 라는 생각으로 정말 심도있게 잠시 멈춰서 생각해봐야 실력이 발전한다.


    글의 내용

    - VGA 텍스트

    : VGA는 Video Graphics Array의 약자이다. VGA는 이전에 존재했던 CGA, EGA, MDA 그래픽 카드들과의 호환성을 유지한다. 대개 그래픽 카드들이 이전 모델들과 호환성을 지키려고 노력하는 편이다. 그래서 VGA에 대한 스펙보다 CGA, EGA의 스펙을 봐도 어느 정도 VGA를 구현할 수가 있다. 호환성 덕에 앞에 언급된 모든 그래픽 카드들의 컬러 모드가 모두 동일한 텍스트 속성을 갖는다. 즉, 16비트로 글자를 표현할 수 있다. 8비트는 실제 글자, 8비트는 색을 나타낸다. 그리고 대부분 그래픽 카드의 텍스트 모드는 기본 설정으로 80 컬럼에 25 행을 사용한다. 

     

    : VGA Text Mode는 현대의 운영체제의 일부 애플리케이션들이 여전히 사용하고 있다.

     

    : VGA도 하드웨어의 일종이다. 즉, 디바이스 드라이버를 작성해야 VGA를 컨트롤 할 수 있다. 디바이스 드라이버의 작성은 해당 디바이스를 초기화하고 읽기/쓰기 동작이 되면, 80% 이상은 됬다고 볼 수 있다. 그런데, 우리는 초기화를 할 필요가 없다. 왜냐면, 이미 BIOS가 초기화를 해줬기 때문이다. 즉, 읽기/쓰기를 통해 VGA를 우리가 원하는 대로 동작시키도록 하면 된다.

     

    : VAA 텍스트 모드에 접근하는 방법은 크게 2가지가 있다.

    1" BIOS 서비스를 이용한다. 구체적으로, INT 0x10을 이용한다.
    2" 직접적으로 RAM에 액세스(MMIO)하거나 I/O Port를 이용한다.

     

    : 어떤 방식으로 하는게 좋을까? 16비트만 사용한다면, 1번이 좋을 것 같다. 왜? BIOS 서비스를 이용하면, 드라이버를 직접 작성할 필요가 없기 때문이다. 그러나 32비트, 64비트까지 가려면 2번을 사용해야 한다. 왜냐면, BIOS 서비스는 16비트에서만 동작하기 때문이다. 32비트에 진입하는 순간 BIOS 서비스는 이용할 수 없다. 

     

     

    : VGA의 텍스트 버퍼의 위치는 오피셜하게 고정되어 있다. 즉, PC에서 VGA의 MMIO는 스펙으로 정의가 되어 있다. 그 위치는 0xB8000이다. 대개 이 주소는 16비트 리얼 모드에서 사용되는 주소이다. 즉, 리얼 모드에서만 유효한 주소라는 것이다. 보호 모드에서도 이 메모리 맵이 유효한 지는 보호 모드에서 알아보자.

     

     : 우리가 VGA에서 필요한 기능은 다음과 같다.

    1" 텍스트를 모니터에 뿌리기
    2" 커서의 위치를 변경

    : 지원하는해상도가 80x25라는 것은 어떻게 알 수 있을까? 

     

    : VGA BIOS에 정의된 텍스트 모드는 총 5개가 있다. 각 텍스트 모드들은 한 글자를 16비트로 표현한다. 유니코드로 오해하면 안된다. 16비트에서 하위 8비트는 실제 디스플레이에 출력될 한 개의 아스키 코드를 의미하고, 상위 8비트는 디스플레이 나타날 글자의 색, 배경색, 깜빡임등 글자의 설정 정보를 나타낸다. 

    출처 - https://web.archive.org/web/20150816220334/http://www.eyetap.org/cyborgs/manuals/soft_vga.pdf

    : 위의 표는 5가지 VGA 텍스트 모드의 종류를 보여준다. CGA, EGA, MDA 모두 VGA와 같은 디스플레이 모드이다. 전부다 굉장히 구형 디스플레이 모드들이다. 우리가 지금 알아볼 VGA 텍스트 모드는 다른 말로 `VGA 모드-3`라고 부른다. 위 표에서 두 번째에 정의되어 있다. `VGA 모드-3`의 스크린 사이즈는 기본적으로 80x25 이다.

     

    출처 - https://web.archive.org/web/20150816220334/http://www.eyetap.org/cyborgs/manuals/soft_vga.pdf

    : 위의 표는 4비트 칼라 팔레트(4-bit RGBI)를 사용하고 있는데, 이건 EGA와의 호환성을 위해서다. VGA의 경우 기본 설정이 4비트 칼라라서 바꾸지 않으면, EGA와 호환이 된다. 참고로, VGA는더 큰 비트단위 칼라 팔레트를 지원한다.

     

    출처 - https://en.wikipedia.org/wiki/Enhanced_Graphics_Adapter

     

    : 위에서 `Default palette number` 값이 실제 VGA에 사용되는 값이다. 아래에서 보겠지만, VGA 텍스트 자료 구조에서 상위 1바이트가 속성값인데, 거기에 0을 쓰면 검은색이 된다. 4를 쓰면 빨간색이 된다.

     

    - VGA 텍스트 자료구조

    : VGA 텍스트 자료 구조는 단순하다. 글자와 글자의 속성을 16비트로 표현한게 끝이다. 하위 1바이트가 `문자`, 상위 1바이트가 `속성`이 된다. 위에서 보았다 시피, `VGA 모드-3`텍스트 버퍼의 위치는 0xB8000이다. MMIO이기 때문에, 여기에 쓰기만 하면, 해당 내용이 스크린에 바로 적용이 된다.

    출처 - https://en.wikipedia.org/wiki/VGA_text_mode#cite_note-cyrix-14

     

Designed by Tistory.