GN⁺: 슈퍼 닌텐도 비디오 시스템 설계 이해
(fabiensanglard.net)슈퍼 닌텐도 비디오 시스템 설계
90년대 초 TV의 내부
- 슈퍼 닌텐도는 표준 TV 세트에 비디오를 출력함
- TV는 안테나를 통해 아날로그 TV 방송(NTSC)을 수신하고, 튜너를 통해 신호를 받아 CRT(음극선관)에 이미지를 표시함
- TV에는 보조 입력(AUX)이 있으며, 기본 TV 세트에는 비디오 신호를 전달하는 컴포지트 커넥터(노란색)와 스테레오 오디오 신호를 전달하는 전용 잭(흰색 및 빨간색)이 있음
CRT의 작동 원리
- CRT는 15kHz로 작동하며 초당 약 15,000개의 선을 그림
- CRT 내부에는 세 개의 전자포가 있으며, 전자포는 항상 정면으로 전자를 발사하고, 두 개의 자석 세트(수직 및 수평)가 전자를 위아래 및 좌우로 이동시킴
- CRT에는 픽셀이 없으며, 전자포에서 발사된 전자는 항상 올바른 색상 스트립에 도달함
CRT 제어 방법
- CRT는 빨강, 초록, 파랑 신호를 각각의 전자포에 연결하여 소비함
- 동기화 신호(HSYNC 및 VSYNC)는 하나의 흰색 와이어를 통해 전달되며, 이를 합성 동기화(CSYNC)라고 함
- CRT는 신호를 소비하고 전자포를 동기화하려고 시도함
CRT가 이미지를 그리는 방법
- CRT는 왼쪽에서 오른쪽으로 선을 그림
- HSYNC 이벤트를 받으면 화면의 왼쪽(X=0)으로 돌아가고, VSYNC 이벤트를 받으면 화면의 맨 위(Y=0)로 돌아감
- CRT는 오른쪽으로 이동하면서 아래로 기울어지며 선을 그림
CRT 이해의 핵심
- CRT의 핵심은 전자포가 화면의 오른쪽으로 이동하면서 아래로 기울어지는 것을 이해하는 것임
- VSYNC가 마지막 HSYNC와 동시에 발생하면 선이 항상 화면의 동일한 위치에 그려짐
- VSYNC가 두 HSYNC 사이에 발생하면 선이 교차하여 그려짐
선 내부의 내용
- CRT는 선을 그릴 때는 디지털이지만, 선 내부의 내용은 아날로그임
- 세 개의 전자포는 RGB 와이어에 직접 연결되어 있으며, 시스템은 색상 신호를 자유롭게 변경할 수 있음
기존 시스템 처리
- SNES 설계자는 CRT가 처리할 수 있는 신호를 제공해야 했음
- NTSC 신호 사양을 준수해야 했음
- 4:3 화면 비율, 필드당 262.5개의 선, 선당 341.25개의 점, 필드 주파수 59.94Hz
닌텐도 엔지니어 되기
- CRT가 작동하는 방식을 이해한 후, 비디오 시스템을 설계해야 했음
- 262개의 선을 사용하여 프로그레시브 모드를 만들고, 59.94Hz의 프레임 속도를 목표로 함
- 350개의 점을 사용하여 4:3 화면 비율을 맞추고, 5,496,498Hz의 도트 클럭이 필요함
문제 해결
- 5,496,498Hz의 도트 클럭을 사용할 수 없었음
- 마스터 오실레이터를 사용하여 서브 시스템이 분주기를 통해 사용해야 했음
- 오버스캔 문제를 해결해야 했음
오버스캔 도입
- 전자포가 수평 또는 수직으로 리셋될 때 전자를 계속 발사하면 가시적인 아티팩트가 발생함
- TV는 화면 영역을 오버스캔하여 화면이 약간 더 크게 표시됨
- VSYNC 및 HSYNC 후에 전자포를 멈추는 시간이 필요함
SNES 수직 해상도 선택
- 경쟁 시스템은 224개의 가시적인 선을 사용함
- 닌텐도는 262개의 선을 224개의 가시적인 선과 38개의 빈 선으로 나눔
SNES 수평 해상도 선택
- 262개의 선을 사용하고, 21.47727MHz의 마스터 클럭을 사용하여 5.3693175MHz의 도트 클럭을 얻음
- 341개의 점을 사용하여 60.098Hz의 프레임 속도를 얻음
SNES 수평 오버스캔 선택
- 341개의 점 중 256개의 가시적인 점을 사용하고, 85개의 점을 HBLANK로 사용함
- 화면 비율은 8:7로 약간의 왜곡이 발생함
고해상도 모드: 인터레이싱
- 수직 해상도를 448개의 선으로 두 배로 늘릴 수 있음
- 수평 해상도를 두 배로 늘리는 것은 어려움
PAL 대 NTSC
- 유럽에서는 NTSC 대신 PAL을 사용하고, 프랑스에서는 SECAM을 사용함
- PAL은 50Hz의 프레임 속도와 필드당 312.5개의 선을 사용함
- PAL 버전의 SNES는 17.7344750MHz의 마스터 클럭을 사용함
- 가시적인 해상도는 224개의 선과 256개의 점을 사용하고, 프레임 속도는 50.00697891Hz임
출력
- SNES는 CRT 신호를 컴포지트 및 S-Video로 변환함
- AV 커넥터를 통해 순수 "RGB/CSync" 신호, "Composite" 신호, 및 S-Video 신호를 제공함
GN⁺의 정리
- 이 글은 슈퍼 닌텐도 비디오 시스템의 설계 과정을 설명하며, CRT의 작동 원리와 신호 처리 방식을 다룸
- CRT의 동작 방식과 신호 처리에 대한 이해를 통해 SNES 비디오 시스템의 설계 결정을 설명함
- 이 글은 비디오 게임 콘솔의 하드웨어 설계에 관심이 있는 사람들에게 유익하며, CRT 기술의 역사와 작동 원리를 이해하는 데 도움이 됨
- 비슷한 기능을 가진 다른 프로젝트로는 Sega Genesis와 Neo-Geo AES가 있음
Hacker News 의견
-
224는 16으로 나누어 떨어지는 숫자라서 그래픽 렌더링 파이프라인 타일맵과 잘 맞음
- CGA/EGA/VGA는 모두 320x200 모드를 가졌음
- NES는 256x224였고, SNES도 마찬가지였음
- Pac-man은 아케이드에서 288x224였음
- PC에서 Pacman 클론은 항상 이상하게 보였음
- 기계의 세부 사항을 배우고 나서야 이해하게 되었음
- 픽셀이 PC 해상도에서 정사각형이 아님
- Pacman 포트나 클론을 보면 세계 크기, 타일 크기, 스프라이트 크기를 알아내려고 했음
-
59.94Hz는 이상한 숫자임
- 북미와 몇몇 다른 지역은 60Hz 전력망을 사용함
-
8:7 아트워크 비율은 다른 플랫폼으로 포팅된 SFC/SNES 게임에서 볼 수 있음
- PSX/Saturn/PC 버전은 원본 아트를 유지하고 4:3으로 패딩을 추가함
- Saturn 버전의 스크린샷을 보면 모든 것이 약간 너무 날씬해 보임
-
유럽 게임은 50.00697891Hz에서 VSYNC가 발생하여 게임이 의도보다 17% 느리게 실행됨
- Sonic the Hedgehog를 Mega Drive에서 처음 플레이했을 때 실망했음
- NTSC와 PAL의 속도 차이를 유튜브를 통해 알게 되었음
- 음악도 PAL에서 끔찍하게 들림
- SNES의 DooM은 NTSC 버전이 더 큰 화면을 가졌음
- NES에서 Punch-Out을 잘했지만, 미국에서 경쟁했다면 첫 라운드에서 패배했을 것임
-
TFA에 오타가 있음; 8:6 비율은 4:3과 같음
- RF 출력을 사용하여 SNES와 TV 안테나를 전환했음
-
256x224 (8:7) 출력 해상도가 4:3 이미지로 확장됨
- SNES의 도트 속도는 ATSC 표준의 정사각형 픽셀 속도보다 느림
- 픽셀이 가로로 8/7로 확장되어 8:7 해상도가 64:49로 확장됨
- 224*(4/3) = 298 가시 도트가 됨
- 224*(7/6) = 261.33... 가시 도트가 더 가까움
-
CRT 외관을 정확하게 시뮬레이션하는 에뮬레이터가 있는지 궁금함
- GPU 셰이더로 성능적으로 가능할 것임
-
이로 인해 상징적인 게임 디자인이 어떻게 이루어졌는지에 대한 통찰을 기대했음
- SNES를 사랑했지만 부모님을 설득하지 못했음
- 글 작성에 감사함. 매우 흥미로웠음