- SNES 비디오는 1990년대 초 CRT TV와 NTSC 신호의 한계 안에서 256x224 화면, 60.098Hz 프레임레이트, 블랭킹 구간을 맞춘 설계였음
- CRT는 픽셀 격자가 아니라 전자총과 RGB 신호, HSYNC/VSYNC로 주사선을 그리며, 프로그레시브와 인터레이스도 동기 신호 위치 차이에서 갈림
- 별도 비디오 오실레이터를 둘 수 없었던 SNES는 21.47727MHz 마스터 클록을 나눠 5.3693175MHz 도트 클록을 만들고, 262라인·341도트 조합으로 NTSC 표준 59.94Hz와 다른 60.098Hz에 도달함
- 기본 모드는 262라인 중 224라인 표시와 38라인 VBLANK, 341도트 중 256도트 표시와 85도트 HBLANK로 구성되어 PPU의 스프라이트 라인 버퍼 작업 시간을 확보함
- PAL SNES는 50Hz·312.5라인 환경에 맞춰 다른 오실레이터와 240라인 오버스캔 모드를 제공했지만, 대부분의 게임은 224라인 기준이라 검은 띠와 17% 느린 실행이 흔했음
CRT TV가 설계를 제한한 지점
- SNES가 영상을 출력하는 기본 대상은 표준 CRT TV였고, 당시 TV는 안테나로 NTSC 아날로그 방송을 받거나 AUX 입력으로 외부 영상을 받음
- 일반 TV의 보조 입력은 노란색 컴포지트 비디오 단자와 흰색·빨간색 스테레오 오디오 단자로 구성됨
- CRT는 초당 약 15,000개 선을 그릴 수 있는 15kHz급 선 그리기 장치로 볼 수 있음
CRT는 픽셀이 아니라 주사선과 신호로 동작함
- CRT 내부에는 세 개의 전자총이 있고, 전자는 수직·수평 자석에 의해 위아래와 좌우로 꺾임
- 전자 자체에는 색이 없으며, 마스크가 각 전자총의 전자를 올바른 색 형광체 스트립에 닿게 함
- CRT에는 픽셀이 없고, 슬롯도 픽셀이 아님
- 고해상도 TV는 슬롯이 더 작아 같은 색 신호를 수평 방향으로 더 충실하게 표현할 수 있음
- CRT는 다섯 신호를 네 가닥 선으로 받음
- Red, Green, Blue 신호는 각각 전자총에 직접 연결됨
- 세 RGB 선에 신호가 없으면 전자가 발사되지 않아 검은색이 표시됨
- 흰색 선은 Composite Sync(CSYNC) 로 HSYNC와 VSYNC를 함께 전달함
- CRT는 VSYNC를 만들지 않고, 외부 시스템이 보내는 동기 신호를 받아 전자총 위치를 맞춤
프로그레시브와 인터레이스의 차이
- CRT는 한 줄을 왼쪽에서 오른쪽으로 그리고, HSYNC를 받으면 화면 왼쪽 X=0으로 돌아감
- VSYNC를 받으면 화면 위쪽 Y=0으로 복귀함
- 전자총은 오른쪽으로 이동하는 동안 아래쪽으로 기울어진 경로를 따라가며, HSYNC 뒤의 다음 줄은 이전 줄 아래에 그려짐
- VSYNC가 마지막 HSYNC와 같은 시점에 발생하면 같은 위치에 필드가 그려지는 프로그레시브 스캔이 됨
- VSYNC가 두 HSYNC 사이에서 발생하면 다음 필드의 선들이 이전 필드 사이에 들어가는 인터레이스가 됨
- 인터레이스는 수직 해상도를 두 배로 만들지만 각 줄의 갱신률은 절반으로 떨어짐
- NTSC는 약 30Hz로 두 필드를 내보내므로 CRT는 인터레이싱을 위한 선 간격을 확보했고, 프로그레시브로 그릴 때는 검은 스캔라인 간격이 보임
NTSC 사양과 단순 설계안의 한계
- SNES 설계는 NTSC TV가 처리할 수 있는 값에 가까워야 했음
- 화면비: 4:3
- 필드당 라인 수: 262.5
- 한 줄의 도트 수: 341.25
- 필드 주파수: 59.94Hz
- 흑백 NTSC는 원래 60Hz였지만, 컬러 NTSC는 하위 호환성을 유지하며 색을 추가하는 과정에서 아티팩트를 피하기 위해 주파수를 0.1% 낮춤
- 단순하게는 262라인 프로그레시브, 350도트, 59.94Hz를 골라 5,496,498Hz 도트 클록을 요구할 수 있음
- 하지만 이 설계는 실제 SNES에 맞지 않았음
- 비용 제약 때문에 비디오 시스템 전용 오실레이터를 둘 수 없고, 서브시스템은 마스터 오실레이터를 분주해 써야 함
- CRT는 화면 복귀 중에도 전자총이 계속 발사될 수 있어 오버스캔과 블랭킹 처리가 필요함
블랭킹과 수직 해상도 선택
- 전자총 위치가 수평 또는 수직으로 리셋될 때 계속 전자를 쏘면 보이는 아티팩트가 생김
- TV는 화면보다 약간 큰 그림을 표시하는 오버스캔을 하며, 그 정도는 TV마다 다름
- VSYNC와 HSYNC 뒤에는 전자총 위치가 잠시 흔들리므로 안정된 직선을 얻기까지 전자 발사를 멈추는 시간이 필요함
- VSYNC 뒤 전자 발사 중지 구간은 VBLANK
- HSYNC 뒤 전자 발사 중지 구간은 HBLANK
- 당시 경쟁 시스템도 블랭킹을 사용함
- Capcom CPS-1: 262라인, VBLANK 38라인, 표시 224라인, 59.6294fps
- Sega Genesis: 262라인, VBLANK 38라인, 표시 224라인, 59.9227fps
- Neo-Geo AES: 264라인, VBLANK 40라인, 표시 224라인, 59.18fps
- SNES는 262라인을 224 표시 라인 + 38 블랭크 라인으로 나눔
- 224는 16으로 나누어떨어져 16x16 타일 기반 그래픽 파이프라인과 잘 맞음
수평 해상도와 60.098Hz
- SNES는 21.47727MHz 마스터 클록을 4로 나눠 5.3693175MHz 도트 클록을 사용함
- 프레임레이트, 라인 수, 한 줄의 도트 수, 도트 클록은 서로 연결됨
- 목표 프레임레이트 59.94Hz와 262라인을 넣으면 한 줄당 약 342도트가 나오지만, 컴포지트 출력의 캐리어 아티팩트 때문에 Nintendo 엔지니어는 341도트를 사용해야 했음
- 이 조합에서 SNES의 프레임레이트는 5.3693175MHz / (341 * 262) = 60.098Hz가 됨
- 60.098Hz는 NTSC의 59.94Hz와 다르지만 CRT의 허용 범위 안에서 동작함
256x224 기본 화면이 된 이유
- 한 줄 341도트 전체를 표시 영역으로 쓸 수는 없고, 흔들림·아티팩트·TV 오버스캔을 숨기기 위한 HBLANK가 필요함
- 224라인에서 4:3에 가까운 표시 폭은 224 * 4/3 = 298도트임
- 타일맵 파이프라인은 16x16 타일을 쓰므로 가능한 값은 304, 288, 272, 256, 240 등임
- 304도트는 화면 왜곡이 거의 없는 값에 가까움
- PPU가 HBLANK 동안 스프라이트 라인 버퍼를 채워야 하는 제약도 있었음
- 304도트 표시를 선택하면 HBLANK가 37도트, 약 7µs에 그침
- 최대 128개 스프라이트 데이터를 가져오기에는 더 긴 시간이 필요했을 가능성이 있음
- 최종 선택은 256 표시 도트 + 85 HBLANK 도트였음
- PPU는 HBLANK 동안 약 16µs를 확보함
- 표시 영역의 종횡비는 4:3이 아니라 8:7이어서 CRT 표시 시 약간의 왜곡이 생김
고해상도 모드의 타협
- 기본 SNES 비디오 구성은 오버스캔 해상도 341x262, 표시 해상도 256x224, 프레임레이트 60.098Hz임
- 게임의 99%는 이 구성을 사용했지만, SNES에는 수직 또는 수평 해상도를 두 배로 만드는 고해상도 모드도 있음
- 수직 해상도 448라인은 VSYNC를 마지막 HSYNC 뒤 반 줄 지점에 내보내 인터레이스 프레임을 만들면 됨
- 이 경우 한 줄은 60.098/2 = 30.049Hz로 갱신됨
- 깜빡임이 생기고 보기 좋지 않지만 수직 해상도는 높아짐
- 수평 해상도 두 배는 필요한 도트 클록이 없어서 더 어려움
- SNES는 두 번째 필드를 수평으로 조금 이동시켜 점들이 이전 필드의 점 사이에 오도록 함
- 결과적으로 절반 프레임레이트와 큰 색 번짐이 생김
- fullsnes.txt는 여러 타이틀의 고해상도 사용 예를 정리함
- Donkey Kong Country 1의 Nintendo 로고: 512x224, BgMode5
- Seiken Densetsu 2 설정 화면: 512x224, BgMode5
- RPM Racing: 인트로와 게임 내 512x448, BgMode5+Interlace
- Ranma 1/2 사례는 실제로 256x224인데 인터레이스가 우연히 켜져 불필요한 깜빡임이 생김
PAL, SECAM, 유럽판 SNES의 문제
- 유럽 TV는 NTSC가 아니라 PAL을 쓰고, 프랑스는 SECAM도 사용함
- PAL 환경은 정확히 50Hz와 필드당 312.5라인을 기대함
- PAL SNES는 NTSC의 21.4772700MHz 대신 17.7344750MHz 오실레이터를 탑재함
- S-CLK 칩이 6/5 처리를 하고, 다시 /4 분주해 5.32034250MHz 도트 클록을 만듦
- 224라인 그래픽만 쓰면 표시 영역 위아래에 큰 검은 띠가 생김
- 이를 줄이기 위해 표시 라인을 240으로 늘리는 오버스캔 모드가 있었음
- 추가 16라인은 타일 한 칸 높이에 해당함
- 실제로는 대부분의 타이틀이 224라인에 맞춰 제작되어 이 모드를 거의 쓰지 않음
- 총 12개 타이틀만 사용함
- Super Mario World는 PAL에서 수직 시야 범위를 늘리는 방식으로 대응함
- NTSC와 PAL 모두 4:3 화면비를 쓰므로 PAL 이미지는 NTSC보다 수직으로 조금 더 압축됨
- 많은 게임 코드는 VSYNC가 60.098Hz가 아니라 50.00697891Hz에서 발생하는 점을 반영하지 않았고, 결과적으로 게임이 의도보다 17% 느리게 실행됨
출력 신호와 AV 커넥터
- 앞서 본 RGB와 동기 신호는 CRT를 직접 구동하는 순수 신호지만, 실제 TV 대부분은 CRT에 직접 신호를 넣을 수 없었음
- 많은 TV는 뒷면의 노란색 컴포지트 입력만 갖고 있었고, 일부 고급 모델은 S-Video 입력을 제공함
- SNES는 CRT용 신호를 컴포지트와 S-Video로 모두 변환함
- AV 커넥터는 신호를 버리지 않고 여러 출력 방식을 제공함
- Red, Green, Blue
- C-Sync
- Luminance와 Chrominance 기반 S-Video
- Composite Video
- +5V DC
- Ground
- Left Audio, Right Audio
- 유럽 TV, 특히 프랑스 TV는 SCART 커넥터를 갖춘 경우가 많았고, 이 방식은 CRT에 더 직접적으로 신호를 넣는 케이블 제작을 가능하게 함
- 그 결과 유럽 사용자는 17% 느리고 검은 띠가 있는 게임을 높은 영상 충실도로 즐길 수 있었음