GN⁺: 개 한 마리와 Windows 3.1 그래픽 스택 대결
(wuffs.org)One Dog v. the Windows 3.1 Graphics Stack
Introduction
- VGA 하드웨어에 대해 배우면서 오래된 비디오 드라이버를 수정하는 과정에서 발생한 문제를 해결하려고 시도함.
- Asus Eee PC 1000H에 Windows 3.11을 설치하여 적절한 비디오 출력을 얻으려는 시도.
Windows 3.x의 기본 비디오 출력
- 기본적으로 Windows 3.x는 VGA 640x480 해상도에서 16색으로 렌더링함.
- Eee PC의 1024x600 화면에서는 이 해상도가 적절하지 않음.
Super VGA 드라이버의 문제
- Windows 3.11에는 오래된 비디오 어댑터용 드라이버가 포함되어 있지만, Intel GMA 950을 지원하지 않음.
- Super VGA 드라이버는 1024x768 해상도와 256색을 지원하지만, 작동하지 않음.
IBM PC 비디오의 문제점
- VGA는 1980년대 IBM에 의해 설계된 매우 특정한 비디오 컨트롤러임.
- SVGA는 VGA보다 발전된 기술을 의미하지만, 표준은 아님.
VBE (VESA BIOS Extensions)
- VBE는 소프트웨어가 비디오 어댑터와 상호작용할 수 있도록 하는 인터페이스임.
- BearWindows의 VBE9x와 VBEMP는 Windows 9x와 NT에서 VBE를 사용할 수 있게 함.
- SVGAPatch는 Microsoft의 256색 Super VGA 드라이버를 VBE를 사용하도록 패치함.
SVGAPatch의 문제점
- SVGAPatch는 DOS 소프트웨어와의 호환성 문제를 일으킴.
- DOS 프롬프트를 열면 화면이 손상됨.
Windows 3.x의 구조
- Enhanced Mode에서는 세 개의 운영 체제가 동시에 실행됨.
- 가상 머신 관리자가 가상 머신을 생성하고, 첫 번째 가상 머신 내에서 표준 모드 Windows가 실행됨.
디스플레이 드라이버의 구조
- Windows Setup에서 비디오 어댑터를 선택하면 여러 드라이버가 설치됨.
- Grabber, Display Driver, Virtual Display Device (VDD)로 구성됨.
SVGAPatch의 작동 원리
- SVGAPatch는 특정 비디오 모드를 설정하고, VBE를 사용하여 비디오 메모리를 관리함.
- 특정 비디오 어댑터에 대한 기능을 대체하여 VBE를 지원하도록 함.
VDD의 역할
- DOS 프로그램은 하드웨어에 직접 접근하는 것을 기대함.
- Windows는 가상화된 구현을 통해 이를 처리함.
결론
- SVGAPatch는 VBE를 사용하여 더 나은 비디오 출력을 제공하지만, DOS 프로그램과의 호환성 문제를 해결해야 함.
- VDD의 복잡한 상태 관리가 문제의 원인일 수 있음.
Hacker News 의견
-
현대 PC에서 Windows 3.x를 로드하고 기본 VGA를 즉시 사용할 수 있는 점이 놀라움. 그러나 현대 Linux/BSD에서는 올바른 드라이버와 설정 파일이 없으면 기본 소프트웨어 가속 VGA 프레임버퍼를 지원받기 어려움
- xfree86 프로젝트가 이 문제를 해결하려 했으나, Xorg 포크에서는 이 접근법이 유지되지 않았음
-
Windows 3.1의 GUI가 현재의 것보다 직관적이고 효율적이며 사용하기 쉬워 보임
-
Win11의 시작 메뉴는 키워드를 입력하고 기도하는 것 외에는 거의 사용할 수 없을 정도로 불편함
-
Windows NT와 2k가 최적의 상태였고, 이후 제품 관리자들이 변화를 주기 시작했음
-
KDE와 Gnome이 시간이 지남에 따라 점점 더 매력적으로 보임
-
DOS 프롬프트를 창 모드로 열 때 화면이 손상되는 문제는 DOS 프롬프트가 별도의 VM에서 실행되기 때문임
- VGA ROM BIOS가 VBE의 래퍼일 가능성이 있으며, 이는 VBE I/O 포트와 통신하는 IN 및 OUT 명령을 포함할 수 있음
-
Windows 3.x/9x 디스플레이 드라이버 작성자는 I/O 포트 트랩을 설정하여 하드웨어 접근을 가상화하는 방법을 사용했음
-
가상 디스플레이 장치(VDD)는 비디오 하드웨어의 멀티플렉서 역할을 하며, DOS 앱이 전체 화면일 때 명령을 실제 VGA 어댑터로 직접 전송함
-
Windows 3.x GUI는 DOS VM에서 실행되며, 하이퍼바이저 커널 VMM32가 이를 다른 DOS 프로세스 VM과 멀티플렉싱함
-
Win9x VESA 프레임버퍼 드라이버를 작성하면서 GPU 상태를 저장하고 복원하는 방법이 벤더에 따라 다르다는 것을 깨달음
-
DOSBox에서 텍스트 모드가 손상된 문자로 표시되며, Eee PC에서는 GUI의 일부 색상이 사라짐
-
Eee PC에서 32비트 Debian을 실행 중이며, Firefox는 무겁지만 mpv는 비디오 스트리밍에 충분히 작동함
-
오래된 DOS 기반 Windows 버전이 어떻게 작동했는지 읽을 때 항상 경외감을 느낌
-
ET4000H가 Windows 3.1에서 지원되지 않았을 때 MS 기술 지원에 연락하여 드라이버 디스크를 받았던 경험이 있음
-
EEEPC 207g를 소유하고 있으며, 이를 사용하여 레트로 게임을 시도하는 것이 재미있을 것 같음
-
GUI와 DOS 모드의 상태 변화를 비교하며 패턴을 분석함
-
웹사이트 디자인이 과거 인터넷의 최고의 시절을 떠올리게 하여 상쾌함을 느낌