HuC6280 해체: PC Engine의 터보차저 심장

PC Engine(북미에서는 TurboGrafx-16으로 알려짐)은 게임 역사에서 매우 매력적인 위치를 차지하고 있습니다. 1987년에 출시된 이 기기는 NES와 같은 3세대 콘솔과 Sega Genesis 및 Super Nintendo와 같은 4세대 강자들 사이의 어정쩡한 위치에 있었습니다. 뛰어난 그래픽 덕분에 종종 후자 그룹에 묶이기도 하지만, PC Engine의 내부 아키텍처는 비트 폭(bit-width)보다 가공할 만한 속도를 중시한 다른 이야기를 들려줍니다.

이 시스템의 중심에는 Hudson Soft가 설계한 커스텀 CPU 패키지인 HuC6280이 있습니다. 일반적인 관찰자에게 TurboGrafx-16의 "16"이라는 숫자는 마케팅용 거짓말로 보일 수 있지만, 기술적인 관점에서 HuC6280은 8비트 아키텍처를 최적화하여 체급 이상의 성능을 내도록 만든 마스터클래스입니다.

터보차저가 장착된 6502 아키텍처

브랜딩에도 불구하고 PC Engine은 16비트 CPU를 탑재하고 있지 않습니다. 이 CPU는 8비트 레지스터, 8비트 ALU, 그리고 8비트 데이터 버스를 사용합니다. 하지만 이 한계를 압도적인 속도로 보완합니다. HuC6280은 NES에 사용된 전설적인 MOS 6502의 향상된 버전인 WDC 65C02를 기반으로 합니다.

HuC6280의 가장 눈에 띄는 특징 중 하나는 클록 속도입니다. CPU는 두 가지 모드로 작동할 수 있습니다:

  • Low Speed: ~1.79 MHz (NES와 유사).
  • High Speed: ~7.16 MHz.

대부분의 게임은 CSH (Clock Speed High) 명령어를 사용하여 즉시 고속 모드로 전환됩니다. 7.16 MHz에서 PC Engine CPU는 SNES CPU보다 두 배 빠릅니다. 또한, 대부분의 ROM 및 RAM 영역이 단일 클록 사이클 내에 응답할 수 있기 때문에 SNES를 괴롭혔던 메모리 지연 문제를 피할 수 있습니다.

커뮤니티 구성원들이 언급했듯이, 이러한 설계 선택은 매우 실용적이었습니다. 화면 해상도가 가로 256 픽셀에 불과했기 때문에 대부분의 게임 계산은 8비트로 유지되었고, 이는 느린 16비트 CPU보다 빠른 8비트 CPU가 더 효율적임을 의미했습니다. 한 기여자는 SNES의 16비트 CPU조차 8비트 데이터 버스로 인해 16비트 연산 시 여분의 사이클이 필요했다는 점을 지적했습니다.

메모리 관리 및 내장 MMU

표준 16비트 주소 공간의 64 KB 제한을 극복하기 위해 HuC6280은 내장된 메모리 관리 장치(MMU)를 탑재하고 있습니다. 이 MMU는 물리적 주소 공간을 21비트로 확장하여 2 MB의 주소 범위를 허용합니다.

시스템은 16비트 논리 주소 공간을 여덟 개의 8 KB 페이지로 나눕니다. 각 페이지는 8비트 Memory Page Register (MPR)를 통해 물리적 페이지에 매핑됩니다. 이 아키텍처는 NES 카트리지에 사용된 매퍼(mapper)와 유사하지만, 이를 CPU에 통합함으로써 Hudson는 대부분의 카트리지에서 값비싼 매퍼 하드웨어가 필요 없게 만들었습니다.

물리 메모리 맵

Pages Description
$00-$7F HuCard 게임 카트리지 또는 CD-ROM 2 System Card
$80-$F7 확장 (CD-ROM 2 추가 RAM)
$F8 8 KB working RAM
$F9-$FB 확장 (SuperGrafx 추가 RAM)
$FF 메모리 매핑 I/O 레지스터 및 포트

Genesis(64 KB)나 SNES(128 KB)에 비하면 8 KB의 working RAM은 미미하지만, CD-ROM 2 애드온은 디스크 읽기의 높은 지연 시간을 처리하기 위해 64 KB에서 2 MB 사이의 추가 RAM을 더함으로써 이를 크게 보강했습니다.

특수 명령어 및 블록 전송

HuC6280은 표준 6502에 비해 상당한 성능 향상을 제공하는 여러 명령어를 도입했습니다.

블록 전송 명령어

가장 눈에 띄는 추가 사항은 블록 전송 명령어(TAI, TDD, TIA, TII, TIN)입니다. 이를 통해 다양한 주소 스텝 옵션(증가, 감소 또는 교차)을 사용하여 대량의 메모리 복사가 가능합니다.

"Arcade Card 애드온은 그래픽을 VRAM으로 빠르게 전송하기 위해 전송 명령어를 사용하는 것을 염두에 두고 설계되었으며, 이는 이 장치가 매우 잘하는 작업이었습니다. 덕분에 정말 훌륭한 Neo Geo 포팅이 가능해졌습니다."

이 명령어들은 6 사이클당 1바이트의 속도로 데이터를 복사합니다. 전용 DMA 유닛만큼 빠르지는 않지만, 소프트웨어 기반 복사보다는 훨씬 효율적입니다. 하지만 이 명령어들은 인터럽트가 불가능합니다. 대규모 전송은 CPU가 여러 번의 VBlank 인터럽트를 놓치게 만들 수 있으므로, 일반적으로 화면 전환이나 게임 플레이 중이 아닌 순간을 위해 예약되어 있습니다.

기타 주목할 만한 명령어

  • SET (Set T): 다음 명령어(예: ADC 또는 AND)가 어큐뮬레이터 대신 제로 페이지(zero-page) 값에서 작동할 수 있게 하여, 어큐뮬레이터를 통해 데이터를 옮겨야 하는 필요성을 줄여줍니다.
  • BSR (Branch to Subroutine): PC-상대적 변위를 사용하여 코드가 어떤 메모리 뱅크에 매핑되어 있는지에 관계없이 작동하게 합니다.
  • VDC Direct Writes: ST0, ST1, ST2 명령어는 즉치 피연산자(immediate operands)를 비디오 디스플레이 컨트롤러 포트에 직접 기록하여 레지스터 업데이트 속도를 높입니다.

기술적 유산

PC Engine의 아키텍처는 특정 철학을 나타냅니다. 즉, 클록 속도를 높이고 특수 하드웨어 지원을 추가함으로써 이미 알려진 효율적인 8비트 코어의 유용성을 극대화하는 것입니다. SNES가 더 많은 배경 레이어와 복잡한 비디오 하드웨어에 집중한 반면, 화면을 그리는 동안 비디오 메모리에 접근할 수 있는 PC Engine의 능력은 강력한 CPU 속도와 결합되어 Soldier BladeR-Type와 같은 슈팅 게임에서 볼 수 있는 믿기지 않을 정도로 부드러운 성능을 만들어냈습니다.

비록 서구권에서는 "16비트 전쟁"에 가려졌을지 모르지만, HuC6280은 6502 계보의 효율성과 잘 구현된 MMU의 힘을 보여주는 증거로 남아 있습니다.

Sources