1P by GN⁺ | ★ favorite | 댓글 1개
  • Nintendo 3DS는 스마트폰과 앱스토어가 커지던 시기의 휴대용 콘솔로, 무안경 입체 3D와 듀얼 스크린, 하위 호환 CPU, 다양한 I/O를 복잡한 SoC 구조 안에 묶음
  • 상단 800×240 LCD는 반폭 픽셀패럴랙스 배리어로 400×240 프레임 2개를 동시에 보여주며, 깊이 슬라이더와 New 3DS의 얼굴 추적으로 시야각·피로 문제를 줄임
  • 기본 모델은 268MHz ARM11 MPCore 2코어, 128MB FCRAM, DMP PICA200 GPU, CEVA TeakLite II DSP를 사용했고, New 3DS는 804MHz 4코어와 256MB FCRAM, NFC, 개선된 입체 시야 시스템을 더함
  • 내부에는 ARM11 외에도 DS용 ARM946E-S와 GBA용 ARM7TDMI가 들어 있어 Native 3DS, Nintendo DSi, Game Boy Advance 모드로 전환되지만, 개발자는 보통 ARM11 MPCore만 직접 다룸
  • 운영체제와 보안은 NATIVE_FIRM, TWL_FIRM, AGB_FIRM, SAFE_FIRM, Boot9/Boot11, AES/RSA/OTP 기반 신뢰 체인으로 구성됐고, 여러 취약점을 거치며 홈브루와 커스텀 펌웨어 생태계가 발전함

모델 계열과 하드웨어 세대

  • Nintendo는 3DS 수명주기 동안 여러 개정 모델을 출시해 가격대와 사용자층을 나눔
  • 아키텍처 관점의 모델은 6종으로 나뉨
    • Nintendo 3DS(2011), Nintendo 3DS XL(2012): 원래 아키텍처 기반이며 XL과 비 XL의 주요 차이는 화면 크기임
    • Nintendo 2DS(2013): 입체 화면을 제거하고 Game Boy에서 영감을 받은 형태를 사용한 저가형 모델임
    • New Nintendo 3DS(2014), New Nintendo 3DS XL(2015): 하드웨어 업그레이드, NFC 리더, 더 많은 버튼, 개선된 입체 시스템을 추가함
    • New Nintendo 2DS XL(2017): New Nintendo 3DS XL에서 입체 기능을 뺀 저가형 모델임
  • 게임의 공통 기준은 원래 Nintendo 3DS이며, New 계열은 별도 하드웨어 차이가 큼

무안경 3D 디스플레이

  • Nintendo 3DS는 Nintendo DS의 후속기처럼 LCD 2개를 탑재하고, 상단 화면은 800×240 픽셀 사양으로 깊이감을 표시함
  • 입체 효과는 Virtual Boy와 같은 입체 시차(stereoscopic parallax) 원리를 사용함
    • 왼쪽 눈과 오른쪽 눈에 서로 조금 다른 이미지를 보여줌
    • 두 이미지의 중심 위치 차이로 물체가 앞뒤에 있는 것처럼 인식됨
  • 상단 LCD는 물리적으로 반폭 픽셀로 구성되고 두 모드로 동작함
    • 2D 모드: 가로 픽셀 2개를 하나처럼 취급함
    • 3D 모드: 모든 픽셀을 개별로 사용해 400×240 프레임 2개를 동시에 표시함
  • 패럴랙스 배리어는 LCD 픽셀 뒤의 백라이트를 분리해 각 눈이 서로 다른 픽셀 부분집합을 보도록 만듦
  • 이 방식에는 제약이 있음
    • 추가 밝기가 필요해 배터리 사용 시간에 영향을 줌
    • 화면이 눈 기준으로 기울어지면 두 시차 프레임이 섞여 보이고 눈 피로가 커질 수 있음
    • 고정된 자세와 빠른 눈 피로 때문에 3D 기능이 번거로워질 수 있음
  • 3D 깊이 슬라이더는 두 프레임 간 차이를 늘리거나 줄여 깊이 효과를 조절함
  • New 3DS는 전면 카메라와 적외선 LED를 이용한 얼굴 추적으로 기울임 문제를 완화함
  • 게임은 GPU에 일반 프레임을 그리듯, 같은 장면을 약간 이동한 프레임 2개로 렌더링해야 함
    • 공식 API는 두 개의 투영 행렬을 구성하는 루틴을 제공함

CPU, 메모리, 하위 호환 구조

  • 메인 SoC인 CPU CTR은 저장장치와 RAM을 제외한 대부분의 시스템을 담음
  • Nintendo는 ARM과 협력해 ARM11 MPCore 기반 CPU 클러스터를 구성함
    • 원래 3DS: MP11 코어 2개, 각 268MHz
    • New 3DS: MP11 코어 4개, 각 804MHz, 공유 2MB L2 캐시
  • ARM11은 ARMv6k 명령어 집합을 사용하며, Thumb, Jazelle, VFP 같은 구성요소도 포함함
    • ARMv6은 정수 SIMD 명령과 멀티코어 동기화용 load/store 명령을 제공함
    • VFP11은 32비트 단정도와 64비트 배정도 부동소수점 연산을 가속하고 IEEE 754를 따름
  • 각 MP11 코어는 8단계 파이프라인, 동적·정적 분기 예측, CP15 시스템 제어 보조프로세서, 16KB 명령 캐시와 16KB 데이터 캐시를 가짐
  • ARM11 코어들은 ARM의 AXI 버스로 연결되며, MPCore의 Snoop Control Unit이 L1 캐시 일관성을 유지함
  • 3DS에는 ARM11 외에도 두 CPU가 더 들어 있음
    • ARM946E-S: Native 3DS 모드에서는 OS가 관리하는 보안·I/O 보조 프로세서로 동작하고, DS/DSi 게임 실행 시 주 프로세서가 됨
    • ARM7TDMI: DS/DSi 모드에서는 보조 프로세서로 동작하고, GBA 모드에서는 주 실행 CPU가 됨
  • 동작 모드는 세 가지임
    • Native 3DS mode: ARM11이 3DS 게임을 실행하고 ARM9가 I/O와 보안을 처리하며 ARM7은 꺼짐
    • Nintendo DSi mode: ARM9와 ARM7이 DS/DSi 게임을 실행하고 ARM11은 누락·재배치된 DS 하드웨어를 보조함
    • Game Boy Advance mode: ARM7이 GBA 게임 명령을 실행하고 ARM11과 ARM9는 백그라운드 지원을 함
  • 메모리 구성은 복잡함
    • 원래 3DS는 개발자 관점에서 128MB FCRAM, New 3DS는 256MB FCRAM을 제공함
    • ARM11에는 보안 목적의 512KB SRAM이 있음
    • ARM9에는 1MB SRAM, New 3DS에서는 1.5MB SRAM이 있음
    • ARM9는 32KB 명령 TCM과 16KB 데이터 TCM도 가짐
  • FCRAM은 Fujitsu와 Toshiba가 2002년에 만든 Fast Cycle DRAM으로, 비연속 읽기에서 DRAM보다 낮은 지연시간을 목표로 함
  • DMA 구성도 포함됨
    • ARM9 옆 XDMA는 최대 4채널 제공
    • ARM11 옆 CDMA는 최대 8채널 제공
    • New 3DS는 ARM11 블록 옆에 CoreLink DMA-330을 하나 더 추가함
  • 3DS 개발자는 일반적으로 ARM11 MPCore만 접근하며, 프로그램은 스레드 기반 멀티스레딩 모델로 작성됨
  • New 3DS에서 게임 메타데이터가 새 모델 대상임을 표시하면 OS가 빠른 클럭, 추가 RAM, L2 캐시 같은 기능을 활성화함
    • 그렇지 않으면 호환성을 위해 New 전용 하드웨어를 비활성화함
    • 게임은 Old용과 New용 코드베이스를 함께 담을 수 있음

그래픽 파이프라인과 PICA200

  • Nintendo 3DS는 Nintendo 휴대용 라인에서 처음으로 자체 PPU 대신 GPU 벤더의 IP 코어를 사용함
  • Nintendo는 DMP의 PICA200을 라이선스해 CPU CTR SoC 안에 넣었고, GPU는 268MHz로 동작함
  • PICA200은 저전력 3D 프로세서이며, OpenGL ES 1.1에 맞고 OpenGL ES 2.0 요소가 확장된 Maestro 2G 아키텍처를 사용함
  • 픽셀 단계는 고정 기능 구조지만, Maestro functions가 조각 조명, 다중 그림자 알고리듬, 폴리곤 분할, 범프 매핑, 절차적 텍스처, 여러 안개 효과를 제공함
  • GPU 전용 VRAM은 6MB뿐이며, 프로그래머는 즉시 접근이 필요한 명령, 버퍼, 반복 텍스처를 VRAM에 두고 나머지는 FCRAM에 배치해야 함
    • PICA200은 FCRAM과 VRAM 사이 전송용 DMA를 가짐
  • LCD 컨트롤러는 PICA200의 렌더 버퍼 형식을 직접 이해하지 못해 별도 LCD 프레임버퍼가 필요함
    • 상단 좌안, 상단 우안, 하단 화면용 최소 3개가 필요함
    • 아티팩트를 피하려면 페이지 플리핑용 복제 세트를 둘 수 있음
  • 게임 중 GPU는 보통 세 화면을 렌더링함
    • 상단 좌안: 400×240
    • 상단 우안: 400×240
    • 하단: 320×240
    • 모두 8비트 RGB 색상으로 최대 1,678만 색을 표시함
  • PICA200 파이프라인은 명령, 버텍스, 지오메트리, 래스터라이저, 프래그먼트, 후처리 단계로 구성됨
    • 명령 단계는 command buffer를 읽어 폴리곤을 그림
    • 버텍스 단계는 Vertex Processor 4개를 병렬 사용하며, 지오메트리 셰이더를 켜면 3개만 사용 가능함
    • 지오메트리 단계는 Vertex Processor 하나를 가져와 별도 셰이더로 사용함
    • 프래그먼트 단계는 텍스처 유닛 4개와 셰이딩 유닛으로 구성됨
    • 픽셀 셰이더는 없고, 색상 결합기 6개와 Maestro 기능을 조합함
    • 후처리 단계는 알파, 스텐실, 깊이 테스트와 블렌딩, 2×2 슈퍼샘플링을 수행할 수 있음
  • New 3DS에는 MVD라는 DSP가 추가된 것으로 보이며, H.264/MJPEG 압축 해제와 YUV-to-RGB 변환을 수행함
    • New 3DS 웹 브라우저가 가속 비디오 재생에 사용하는 것으로 보임
  • DS와 GBA 게임용 PPU도 SoC 안에 들어 있음
    • DS/DSi/GBA 게임은 기존 하드웨어처럼 PPU를 사용함
    • 출력은 LgyFB를 거쳐 프레임버퍼로 전달되고 PICA200이 표시를 맡음
    • 이 구조는 지연을 추가하지만 사용자에게는 무시 가능한 수준임

오디오와 I/O

  • SoC에는 오디오 블록 2개가 있음
    • 3DS 게임용 독자 DSP
    • 3DS, DS, GBA 게임이 쓰는 DS 계열 CSND
  • 3DS 전용 DSP는 CEVA TeakLite II이며 약 134MHz로 동작함
    • 스테레오 2채널, 최대 32kHz 샘플링, 16비트 해상도를 출력함
    • DSP 작업 공간으로 512KB RAM을 사용하고, 256KB씩 이중 버퍼링됨
    • DSP는 ADPCM과 PCM 샘플을 최대 24채널까지 믹싱할 수 있음
  • 프로그램은 공식 SDK에 포함된 Nintendo 작성 DSP 펌웨어를 런타임에 업로드하고, OS 오디오 서비스가 DSP 통신을 추상화함
  • CSND는 32채널을 제공하며 DS의 대응 블록보다 두 배 많음
  • 외부 I/O는 휴대용 콘솔보다 스마트폰과 경쟁하려는 구성이 강함
    • 디지털 버튼, 아날로그 Circle Pad, 3D·볼륨 슬라이더, Wi-Fi 스위치
    • 저항식 터치 센서, 자이로스코프, 가속도계
    • 전면 카메라 1개와 후면 카메라 2개
    • 적외선 송수신기, SD 카드 슬롯, 3.5mm 잭, 게임 카드 리더
  • New 3DS는 추가 I/O를 더함
    • 디지털 버튼 2개, C-Stick, 하단 화면 NFC 리더
    • 얼굴 추적용 적외선 LED
    • SD 대신 microSD 슬롯
    • Wi-Fi 스위치 제거와 소프트웨어 제어
  • 내부 인터페이스는 SPI, HID, I²C, FIFO 기반 고속 주변장치, MCU로 나뉨
    • SPI는 게임 카드 저장용 플래시, DS 전원 관리, Wi-Fi 일부, 터치스크린, 사운드, 마이크, Circle Pad 등을 연결함
    • HID는 디지털 키패드를 16비트 레지스터로 읽음
    • I²C는 카메라, 적외선 송수신기, NFC, QTM 얼굴 추적 모듈, 자이로스코프, MCU 등을 연결함
    • eMMC와 SD 슬롯은 16MB/s 주변장치로 FIFO 레지스터를 통해 연결됨
  • Auxiliary Microcontroller는 NEC 설계·Renesas 제조 78K0R MCU이며, LCD, LED, 전원 관리, 배터리, RTC, 3D 슬라이더, HOME/전원 버튼 등을 관리함
  • I/O 기반 서비스에는 QR Reader, AR Games, Face Raiders, Amiibos, SpotPass, StreetPass, Play Coins가 포함됨

운영체제와 부팅 구조

  • Nintendo 3DS는 여러 펌웨어를 저장해 네이티브 실행, 하위 호환, 유지보수 모드를 제공함
    • NATIVE_FIRM: 3DS 네이티브 기능을 동작시키며 ARM11이 메인 프로그램을 실행함
    • TWL_FIRM: 3DS를 Nintendo DSi처럼 동작하게 하며 ARM9와 ARM7이 전면에 섬
    • AGB_FIRM: 3DS를 Game Boy Advance처럼 동작하게 하며 ARM7이 메인 프로그램을 실행함
    • SAFE_FIRM: 시스템 업데이트 같은 유지보수 작업에 사용됨
  • NATIVE_FIRM에서는 ARM9와 ARM11이 각각 별도 OS 역할을 가짐
    • ARM9는 Kernel9Process9를 실행하며 보안, 암호화, I/O, 파일 시스템, 타이틀 검증·설치를 맡음
    • ARM11은 Kernel11과 여러 사용자 프로세스를 실행하며 네트워크, HOME Menu, 앱 실행, 하드웨어 서비스 추상화를 제공함
  • ARM11 스케줄러는 코어를 일반적인 범용 코어처럼 다루지 않음
    • 첫 번째 코어 appcore는 게임용이고 FIFO 스케줄링을 사용함
    • 두 번째 코어 syscore는 시스템 작업용이며 실행 시간 30%를 사용자 애플리케이션에 빌려줄 수 있음
    • New 3DS의 네 번째 MP11 코어는 얼굴 추적 전용임
    • 세 번째 MP11 코어는 기본적으로 스케줄링되지 않아 대부분 유휴 상태임
    • New 3DS의 추가 CDMA는 부팅 중에만 접근 가능하고 이후 사용되지 않음
  • 앱이 실제로 쓸 수 있는 RAM은 전체 FCRAM보다 적음
    • 원래 3DS: 128MB 중 기본 64MB
    • New 3DS: 256MB 중 기본 124MB
    • APPMEMTYPE 플래그로 HOME Menu를 띄우지 않고 부팅해 각각 최대 96MB, 176MB까지 확보할 수 있음
  • 저장 매체는 Boot ROM, OTP, eMMC NAND, SD/microSD로 구성됨
    • Boot9Boot11은 부팅용 ROM이며 보안상 숨겨져 있음
    • OTP는 제조 중 한 번 기록되는 콘솔 고유 정보와 암호화 키를 담음
    • eMMC NAND에는 시스템 데이터, 펌웨어, 3DS/DSi 모드 사용자 데이터가 저장됨
    • SD/microSD에는 eShop 소프트웨어, 저장 데이터, 사진, 녹음 등이 저장되고 AES-128-CTR로 보호됨
  • 부팅 시 ARM9의 Boot9가 먼저 동작하고 ARM11의 Boot11을 깨운 뒤, NAND의 NCSD 헤더와 펌웨어 파티션을 검증함
    • SHA-256 해시와 RSA-2048 서명을 검증해 유효한 펌웨어를 찾음
    • 실패하면 Wi-Fi 모듈의 플래시 부팅을 시도하고, 이것도 실패하면 오류 화면을 표시함
    • NATIVE_FIRM이 올라오면 Kernel9, Process9, Kernel11, 시스템 프로세스, NS, HOME Menu 또는 게임으로 이어짐
  • HOME Menu는 설치된 애플리케이션을 스크롤 가능한 그리드에 표시하는 1페이지 내비게이션 셸임
    • NS 모듈은 HOME 버튼 오버레이와 가상 키보드 같은 Applet 호출도 제공함
    • New 3DS에서는 게임이 호환 모드로 실행돼도 Applet과 NS 루틴은 전체 하드웨어를 사용할 수 있음
  • 시스템 업데이트는 온라인 또는 게임 카트리지로 가능함
    • 카트리지는 사용자 앱 업데이트 없이 시스템 업데이트만 포함함
    • 네트워크 업데이트는 전체 패키지를 포함함
    • 설치는 SAFE_FIRM으로 재부팅한 뒤 System Updater가 수행함

게임 개발, 배포, Virtual Console

  • 3DS 개발 생태계는 ARM 기반 스마트폰 산업과 컴파일러 발전의 영향을 받았지만, Nintendo는 아직 표준 툴체인까지 제공하지는 않았음
  • 하드웨어 개발 키트는 Intelligent Systems와 Kyoto MicroComputers가 공급함
    • CTR-BOX는 3DS 하드웨어가 들어 있는 금속 박스와 더미 3DS 케이스로 구성됨
    • 공식 플래시카드는 외부 테스터에게 게임 프로토타입을 배포하는 데 사용됨
    • New 3DS용으로는 SNAKE 키트가 제공됨
  • 공식 SDK에는 3DS용 armcc, 디버거, 하드웨어·OS 서비스 API, 그래픽 라이브러리, 패키저, 네트워크·오디오·비디오 라이브러리, Visual Studio 2010 플러그인, PICA200 도구와 프로파일러가 포함됨
  • 그래픽 라이브러리는 네 종류임
    • GL: 단순하지만 느린 OpenGL ES API
    • GD: PICA200 명령을 생성하는 더 빠른 대안
    • GR: 하드웨어에 가장 가까운 PICA200 명령 API
    • GX: PICA200 관리를 위한 범용 라이브러리
  • 게임 실행 매체는 세 가지임
    • Gamecard: 128MB~4GB ROM 또는 최대 2GB Flash와 저장용 backup memory를 담을 수 있음
    • eShop/SD Card: 다운로드 소프트웨어와 선주문, DLC 배포를 지원함
    • Local wireless: Download Play가 3DS로 이어졌고, 전송된 게임은 NAND에 설치되며 한 슬롯만 사용함
  • Virtual Console은 eShop을 통해 DSiWare, NES/Famicom, Sega Game Gear, Game Boy, Game Boy Color 게임을 제공함
    • New 3DS 사용자는 Super Nintendo 카탈로그도 접근 가능함
    • 대부분 ROM과 에뮬레이터를 포함한 앱 패키지로 동작함
  • Game Boy Advance 게임은 Ambassador Program 사용자에게만 공식 제공됨
    • ARM11 에뮬레이터가 아니라 AGB_FIRM을 통해 ARM7에서 네이티브로 실행됨
    • GBA 게임은 FCRAM으로 복사된 뒤 AGB_FIRM으로 재부팅되어 ARM7이 제어함
  • 게임 업데이트는 eShop으로 배포되며, Download Play를 제외한 게임 유형에 적용됨

보안, 복제 방지, 홈브루

  • 3DS 보안의 주요 대상은 Game/CTR card reader운영체제
    • CTR 카트 내부 데이터는 NCSD 형식이며 OS가 인증, 검증, 복호화를 맡음
    • 실제 신뢰 체인은 운영체제와 부팅 구조에 집중됨
  • 전용 보안 하드웨어가 포함됨
    • ARM11의 XN 플래그와 ARM9의 MPU는 임의 메모리 실행을 제한함
    • ARM9는 보안 전용 프로세서처럼 동작하며 AES, RSA, PRNG 같은 암호화 블록에 접근함
    • AES 엔진은 AES-128 암복호화, 최대 64개 키 슬롯, CTR/CCM/CBC/ECB 모드를 지원함
    • RSA 엔진은 공개키 기반 RSA 연산을 수행하며 키 슬롯은 4개임
    • OTP는 콘솔 고유 키와 CTCert를 담고, eMMC CID도 키 난독화에 사용됨
  • 신뢰 체인은 Boot9, OTP, eMMC, NCSD, NCCH, Title 검증으로 이어짐
    • NCSD와 NCCH는 RSA-2048 + SHA-256 서명을 사용함
    • NCCH 페이로드는 AES-128 CTR로 암호화됨
    • Title은 RSA-2048, RSA-4096 또는 ECDSA와 SHA-256으로 서명됨
    • eShop 다운로드 라이선스인 Ticket도 RSA-2048 + SHA-256으로 서명됨
  • 구현상 약점도 존재함
    • Kernel11의 AXI WRAM 페이지 테이블 설정이 읽기·쓰기·실행 권한을 넓게 부여함
    • 시스템 3.0.0 이전에는 OTP 메모리가 숨겨지지 않음
    • Process9와 Kernel9 사이 권한 분리가 없음
    • ASLR이 없고, 시스템 다운그레이드 보호도 없음
    • WebKit 기반 웹 브라우저가 반복적인 공격 대상이 됨
  • 초기 홈브루와 복제는 DS 플래시카드에서 출발함
    • DSi와 3DS는 허가된 카드 목록인 whitelist로 플래시카드를 차단하려 함
    • 제조사는 카트리지 헤더를 재프로그래밍하는 방식으로 다른 허가 게임처럼 식별하게 함
  • 2013년 Gateway3DS는 첫 실질적 3DS 플래시카드로 등장함
    • Blue Gateway는 DS 플래시카드로 MSET 익스플로잇 진입점을 설치함
    • Red Gateway는 FPGA와 microSD로 정품 게임 카드를 복제함
    • Launcher.dat는 MSET 익스플로잇 페이로드와 커스텀 펌웨어 역할을 함
  • Nintendo는 업데이트로 대응함
    • 5.0.0-11은 MSET 익스플로잇을 임시로 수정함
    • 7.0.0-13은 커널 익스플로잇을 막고 NCCH 복호화 신뢰 체인에 RSA 모듈을 추가함
    • 9.3.0은 Gateway3DS의 비공개 커널 익스플로잇을 패치함
    • Sky3DS는 11.0에서 블랙리스트 처리됨
  • 홈브루 생태계는 libctru, nihstro, Ninjhax, Homebrew Launcher로 발전함
    • Ninjhax는 Cubic Ninja의 QR 코드 기능을 진입점으로 사용함
    • GSPWN은 GPU DMA로 HOME Menu heap을 덮어쓰는 취약점임
    • Homebrew Launcher는 .3dsx 형식의 서명되지 않은 홈브루 앱을 실행함
  • memchunkhaxmemchunkhax2는 Kernel11 권한 상승을 가능하게 함
    • FCRAM에 저장된 memchunk header를 조작해 AXI WRAM 접근과 Kernel11 제어로 이어짐
  • 2015년 New 3DS의 arm9loader 도입 이후 arm9loaderhax가 등장함
    • 부팅 시점 Kernel9 권한의 임의 코드 실행을 가능하게 한 영구 익스플로잇임
    • Luma3DS, Godmode9, Anemone3DS, nds-bootstrap 같은 도구가 널리 사용됨
  • 2016~2017년에는 Boot9 분석으로 sighax, boot9strap, ntrboot가 등장함
    • sighax는 Boot9의 RSA-2048 서명 검증 결함을 이용해 신뢰 체인을 무력화함
    • boot9strap은 SD 카드 payload 또는 정상 부팅을 지원하는 대체 부트로더가 됨
    • ntrboot는 DS 플래시카드, 자석, 키 조합을 이용해 Boot9 권한을 얻음
    • 이 취약점들은 Boot ROM에 들어 있어 소프트웨어 업데이트로 고칠 수 없음
  • 2018년 이후 방법들은 boot9strap 설치를 단순화하는 방향으로 발전함
    • seedminer는 Friend Code와 SD 카드 하위 디렉터리 이름, 짧은 brute force로 movable.sed를 재구성함
    • BannerBomb3는 DSiWare title banner 파싱 중 Settings 앱의 스택 오버플로를 이용함
    • SAFE_FIRM 기반 unSAFE_MODE와 safehax, HOME Menu 기반 menuhax67과 nimdsphax 경로가 사용됨
  • 2023년 5월 11.17.0 업데이트는 BannerBomb3를 패치해 추가 장비가 필요 없는 마지막 진입점 중 하나를 무력화함
    • 이후 사용자는 합법 3DS 게임 익스플로잇, ntrboot 호환 DS 플래시카드, 또는 WebKit 익스플로잇을 필요로 함

댓글과 토론

Hacker News 의견들
  • Gameboy Advance 게임을 실행할 때 실제 물리 GBA CPU가 들어 있다는 게 정말 놀라움
    출시 전부터 소문을 다 읽고 파란색 모델을 예약 구매했으며, 초기에 약 250달러를 냈기 때문에 Ambassador Program 대상이었음. Nintendo가 출시 직후 가격을 크게 내리자 사과 차원에서 eShop에 없는 게임까지 포함해 여러 무료 게임을 줬고, 만족스러웠음
    어린 시절 즐기던 Mario Kart Super Circuit을 3DS의 훌륭한 슬라이드 패드로 다시 하는 건 꿈같았고, 예전에 쓰던 GBA처럼 실제 CPU에서 돌아갔다는 걸 알고 나니 더 특별한 추억이 됨

    • 그 이유가 더 놀라움. Nintendo가 하위 호환성을 마트료시카 인형처럼 쌓아 올리다 보니 GBA CPU가 거의 우연히 들어가게 된 셈임
      Nintendo 3DS에는 Nintendo DSi의 전체 시스템 구조가 들어 있고, DSi CPU는 시스템의 감독 CPU 역할도 함. DSi는 원래 Nintendo DS 구조를 대체로 오버클럭한 형태였고, 초기 Nintendo DS 두 모델은 GBA 슬롯을 통한 하위 호환을 위해 GBA의 ARM7TDMI도 포함했음
      Ambassador Program 때 Nintendo는 3DS를 Game Boy Advance 모드로 부팅하는 AGB_FIRM 펌웨어를 배포했고, Nintendo DS 모드용으로는 TWL_FIRM이 있었음. 지금 3DS를 해킹하면 다른 GBA 소프트웨어도 로드할 수 있어, 주변기기 의존성을 제외하면 사실상 완벽한 정확도로 GBA 게임을 실행할 수 있음
    • Sony도 비슷한 방식을 썼음
      PlayStation 2에는 입출력 칩이 필요했고 Sony는 PS1 CPU를 골랐음. PS1 게임을 실행할 때는 그쪽으로 실행을 넘겼음
      기억이 맞다면 초기 PlayStation 3에는 PS2 CPU와 GPU가 들어 있었지만, PS2 게임을 돌리지 않을 때는 별 역할을 하지 않았던 것 같음. 이후 비용 절감을 위해 에뮬레이션으로 바꾸면서 제거했을 가능성이 큼
    • 실제 물리 Gameboy Advance CPU를 넣는 건 오래된 요령이지만 여전히 멋짐
      GBA도 하위 호환을 위해 GBC CPU를 넣었고, 카트리지 자체가 누르는 물리 스위치로 모드를 전환했음. PS2도 PS1 CPU를 보드의 입출력 구성요소로 재사용해서 하위 호환에 쓸 수 있었고, 다른 구성요소는 에뮬레이션 도움을 받았던 것으로 기억함
    • Walmart가 공식 가격 인하와 Ambassador Program 신청 종료 며칠 전부터 이미 낮아진 가격으로 팔기 시작했음
      Reddit 글 덕분에 낮은 가격으로 사고 무료 게임도 받을 수 있었음. 무료 게임을 거의 하지 않았지만, 시스템을 속인 것 같은 기분이 들었음
    • GBA CPU는 NDS CPU의 일부라서 3DS 안에도 들어가 있는 것임
  • 3DS는 아주 느린 출발을 했지만 결국 개인적으로 가장 좋아하는 콘솔 중 하나가 됐음
    N64를 가져본 적이 없어서 훌륭한 3D 리마스터 덕분에 Ocarina of Time과 Majora’s Mask를 처음 플레이했음. 완전한 DS 하위 호환도 큰 장점이었고, 화면의 보기 싫은 비정수 배율 확대를 피하려면 Start를 누르고 실행해야 함
    소프트모드한 기기에서 지원하는 홈브루와 에뮬레이션 범위도 넓어 아주 매력적인 작은 기기임. 작은 New 3DS 디자인도 역대급으로 좋아해서, 멋져 보이는 장난스러운 교체형 페이스플레이트를 많이 샀음
    또 정말 좋았던 건 배터리가 오래되어 갈 때 Nintendo에 전화해서 본인 것과 아내 것에 쓸 새 정품 배터리 두 개를 살 수 있었다는 점임. 개당 15파운드 정도였고, 기기를 분해하지 않고 교체할 수 있었음. 요즘은 보기 드문 방식임

  • 팬데믹 때 ADHD 때문에 결국 New Nintendo 3DS XL을 3대나 샀음
    하나는 일본에서 수입해서 미국 ROM으로 바꿨음. 여행용으로 정말 좋아함. 3D 효과가 멋지고 끌 수 있는 점도 좋으며, 배터리 수명도 훌륭함
    다만 모든 취미가 그렇듯 물건이 희소해지면 욕심이 나서 모으게 되고, 콘솔 3대를 동시에 할 수는 없으니 이제 처분해야 할 듯함

    • 콘솔이 3대 있다면 친구 둘과 Tri Force Heroes를 해봐야 함
    • 배터리가 망가지는 걸 막을 방법이 있거나 앞으로 교체 배터리를 구할 수 있다면 그냥 가지고 있을 것 같음
      예전에 New Nintendo 2DS XL을 샀는데, DS 계열의 마지막 반복 모델이고 DS, DSi, 3DS 게임을 모두 실행함. “new” DS 전용으로 나온 게임은 몇 개뿐이라 약 15년치 게임 역사를 지원하는 셈임
      보이는 곳마다 DS 게임을 사려고 하지만 이미 좋은 가격을 찾기 어려워졌고, Bravely Default 같은 일부 타이틀은 이 근처에서 아직도 60유로쯤 함. DS에는 조악한 양산형 게임도 아주 많아서 그런 건 건너뜀
  • 3DS의 깊이 설정을 아주 쉽게 접근할 수 있는 물리 슬라이더로 조절하게 한 건 천재적인 설계였음
    어떤 연구 결과로 3D 기능의 핵심을 이런 방식으로 조정하게 했는지는 모르겠지만, 3D 기능의 사용성에는 결정적인 차이를 만들었음

    • 지금쯤이면 깊이 표현이 되는 화면이 터치스크린 기기의 일반 기능이 됐을 법함
      Face ID가 있으니 눈이 얼마나 떨어져 있는지 알 수 있고, 그 슬라이더 값을 자동으로 조절할 수도 있을 것임
  • 이 글은 훌륭한 시리즈의 일부임: https://www.copetti.org/writings/consoles/

  • 탈옥한 3DS에서 가장 좋아하는 기능 중 하나는 NSUI 앱임: https://3ds.eiphax.tech/nsui
    공식 Virtual Console 릴리스 덕분에 일부 오래된 Nintendo 게임을 3DS에서 할 수 있었는데, 같은 래퍼를 지원되는 시스템의 어떤 게임에도 쓸 수 있음. 에뮬레이터라기보다는 래퍼에 가까워 성능과 호환성이 바로 좋아짐
    그래서 3DS는 NES/SNES/GB/GBC/GBA 게임을 픽셀 단위로 정확하게 즐기기 좋은 휴대용 기기가 됨
    몇 년 전에야 깨달은 또 다른 점은 더 큰 microSD 카드를 쓸수록 3DS가 느려진다는 것임. 아는 한 콘솔 전체가 저장소를 블록 단위로 전부 스캔해서, 64GB 이상부터는 고통스러울 정도로 느려짐. 특히 GBA 주입 게임을 하면 3DS가 그 모드로 거의 재부팅되기 때문에 저장소를 다시 스캔함

  • “시스템 버전 3.0.0 이전에는 OTP 메모리가 숨겨지지 않았고, 어떤 취약점이든 있으면 OTP 키를 문제없이 추출할 수 있었다”는 부분이 기억남
    예전에는 3DS를 해킹하려면 OTP 추출을 위해 펌웨어 3.0.0으로 다운그레이드해야 했음. 그런데 3.0.0은 New 3DS와 완전히 호환되지 않아서, 그 모델에서 예전 펌웨어 상태로 뚜껑을 닫기만 해도 콘솔이 영구 벽돌이 됐음. 좋은 시절이었음

  • 이 시리즈가 정말 좋음
    3DS용 홈브루를 해보고 싶다면 https://github.com/devkitPro/libctru를 보면 됨

  • Nintendo가 손안에 전체 콘솔을 담는 휴대용 게임기 경험을 절대 포기하지 않았으면 함
    더 큰 인디 휴대용 게임 산업도 발전했으면 좋겠음
    고급 휴대용 기기의 임박한 종말처럼 보이는 건 클라우드 게임. 집의 콘솔을 돌리고 휴대폰으로 스트리밍하는 방식까지 포함됨
    결국 모두가 지갑으로 무엇을 선택하느냐에 달렸음. GBC가 그리움

    • 휴대용 게임기가 죽을 것 같지는 않음. 하드웨어는 계속 발전하고, 하드웨어 요구 사항은 정체되고 있음
      Switch는 Stardew Valley, Hades, Dead Cells 같은 2D 인디 게임에 큰 성공을 거뒀다고 봄. 그런 게임 설계는 잘 통하고, 좋은 2D 그래픽은 절대 낡아 보이지 않음
      감자 같은 기기에서도 돌아갈 훌륭한 게임을 하려고 소비자에게 불리한 스트리밍 방식에 사람들이 돈을 낼지는 의문임
    • 그럴 가능성은 매우 낮아 보임. Stadia는 종료됐지만 Switch와 Steam Deck은 둘 다 크게 성공했음
      클라우드 게임의 지연 시간과 안정적인 네트워크 연결 의존성은 아직 많은 사람에게 문제임. 게다가 게이머 대부분이 또 다른 구독료를 내고 싶어 할 것 같지 않고, 클라우드 게임은 결국 구독이 따라붙을 가능성이 큼
      어차피 플레이할 하드웨어도 필요하다면 좋은 휴대용 기기를 쓰면 됨. Asus 같은 PC 제조사도 RoG Ally 같은 휴대용 기기를 만들고 있고, Switch 2와 Steam Deck 2도 사실상 확정적임. 오히려 휴대용 기기는 계속 좋아지고 시장 점유율도 늘어나는 듯함
    • Sony가 PSP를 중단한 건 정말 싫지만, 이유는 이해됨. Steam Deck과 더 강력한 변형 기기들이 성공하는 이유도 같음
      요즘 게임은 독점성이 예전만큼 강하지 않고, Nintendo처럼 거치형과 휴대형을 아예 하나로 만들 정도로 긴밀히 통합하지 않으면 회사가 불필요한 분리를 만드는 셈임
      Nintendo가 Switch와 별도로 거치형 콘솔도 냈다고 생각해 보면 지속 가능한 구조가 아니었을 것임
      사람들이 TV에 꽂아 즐기는 휴대용 기기를 만든 Nintendo의 “천재성”과 “혁신성”을 칭찬하는 건 재미있음. 한편 PSP Go와 TV 독은 “얘들아, 나 기억 안 나?” 하고 있는 셈임. PSP Go는 정말 작고 귀여워서 좋아함
    • 칩은 더 강력하고 더 작아질 뿐임. 이미 Raspberry Pi에서도 많은 게임을 할 수 있고, 10년쯤 뒤에는 비슷한 크기의 기기에서 현세대 게임을 돌릴 수 있을 것 같음
      재미있는 프로젝트로 딸을 위한 휴대용 콘솔을 만들어볼까 생각 중임
  • 이런 글은 정말 훌륭함
    GB/GBC 아키텍처에 관심을 두고 있었고 그 플랫폼용 게임을 만들고 싶었는데, 아직 이 글을 찾지 못했음. 올려줘서 고맙고 Rodrigo가 써줘서 고마움