1 điểm bởi GN⁺ 2023-09-24 | 1 bình luận | Chia sẻ qua WhatsApp
  • Nintendo 3DS là máy chơi game cầm tay ra đời trong giai đoạn smartphone và app store phát triển mạnh, kết hợp 3D lập thể không cần kính, màn hình kép, CPU tương thích ngược và nhiều I/O trong một cấu trúc SoC phức tạp
  • Màn hình LCD trên 800×240 hiển thị đồng thời hai khung hình 400×240 bằng pixel nửa bề nganghàng rào thị sai, đồng thời giảm vấn đề góc nhìn và mỏi mắt nhờ thanh trượt độ sâu và tính năng theo dõi khuôn mặt trên New 3DS
  • Mẫu cơ bản dùng ARM11 MPCore 2 nhân 268MHz, FCRAM 128MB, GPU DMP PICA200, DSP CEVA TeakLite II; New 3DS bổ sung CPU 4 nhân 804MHz, FCRAM 256MB, NFC và hệ thống hiển thị lập thể cải tiến
  • Bên trong, ngoài ARM11 còn có ARM946E-S cho DS và ARM7TDMI cho GBA, cho phép chuyển giữa các chế độ Native 3DS, Nintendo DSi và Game Boy Advance, nhưng nhà phát triển thường chỉ trực tiếp làm việc với ARM11 MPCore
  • Hệ điều hành và bảo mật gồm NATIVE_FIRM, TWL_FIRM, AGB_FIRM, SAFE_FIRM, Boot9/Boot11 cùng chuỗi tin cậy dựa trên AES/RSA/OTP; qua nhiều lỗ hổng, hệ sinh thái homebrew và firmware tùy chỉnh đã phát triển

Các dòng máy và thế hệ phần cứng

  • Trong vòng đời của 3DS, Nintendo đã phát hành nhiều phiên bản sửa đổi để phân chia mức giá và nhóm người dùng
  • Nhìn từ góc độ kiến trúc, có thể chia thành 6 mẫu
    • Nintendo 3DS (2011), Nintendo 3DS XL (2012): dựa trên kiến trúc ban đầu; khác biệt chính giữa bản XL và không XL là kích thước màn hình
    • Nintendo 2DS (2013): mẫu giá rẻ loại bỏ màn hình lập thể và dùng kiểu dáng lấy cảm hứng từ Game Boy
    • New Nintendo 3DS (2014), New Nintendo 3DS XL (2015): bổ sung nâng cấp phần cứng, đầu đọc NFC, nhiều nút hơn và hệ thống lập thể cải tiến
    • New Nintendo 2DS XL (2017): mẫu giá rẻ dựa trên New Nintendo 3DS XL nhưng bỏ tính năng lập thể
  • Chuẩn chung của game là Nintendo 3DS gốc, còn dòng New có khác biệt phần cứng riêng khá lớn

Màn hình 3D không cần kính

  • Nintendo 3DS trang bị 2 màn hình LCD như thiết bị kế nhiệm Nintendo DS, trong đó màn hình trên có thông số 800×240 pixel để hiển thị cảm giác chiều sâu
  • Hiệu ứng lập thể dùng nguyên lý thị sai lập thể (stereoscopic parallax) giống Virtual Boy
    • Hiển thị hai hình ảnh hơi khác nhau cho mắt trái và mắt phải
    • Sự chênh lệch vị trí trung tâm của hai hình ảnh khiến người xem cảm nhận vật thể như ở phía trước hoặc phía sau
  • Về mặt vật lý, màn hình LCD trên được cấu thành từ pixel nửa bề ngang và hoạt động ở hai chế độ
    • Chế độ 2D: xử lý 2 pixel ngang như một pixel
    • Chế độ 3D: dùng riêng từng pixel để hiển thị đồng thời hai khung hình 400×240
  • Hàng rào thị sai tách đèn nền phía sau các pixel LCD, khiến mỗi mắt nhìn thấy một tập con pixel khác nhau
  • Cách này có một số hạn chế
    • Cần độ sáng bổ sung, ảnh hưởng đến thời lượng pin
    • Nếu màn hình bị nghiêng so với mắt, hai khung hình thị sai có thể lẫn vào nhau và làm tăng mỏi mắt
    • Tư thế xem cố định và tình trạng nhanh mỏi mắt có thể khiến tính năng 3D trở nên phiền phức
  • Thanh trượt độ sâu 3D điều chỉnh hiệu ứng chiều sâu bằng cách tăng hoặc giảm chênh lệch giữa hai khung hình
  • New 3DS giảm nhẹ vấn đề nghiêng bằng theo dõi khuôn mặt sử dụng camera trước và LED hồng ngoại
  • Game phải render cùng một cảnh thành hai khung hình được dịch chuyển nhẹ, tương tự như vẽ khung hình thông thường trên GPU
    • API chính thức cung cấp routine để cấu hình hai ma trận chiếu

CPU, bộ nhớ và cấu trúc tương thích ngược

  • CPU CTR, SoC chính, chứa phần lớn hệ thống ngoại trừ bộ lưu trữ và RAM
  • Nintendo hợp tác với ARM để xây dựng cụm CPU dựa trên ARM11 MPCore
    • 3DS gốc: 2 nhân MP11, mỗi nhân 268MHz
    • New 3DS: 4 nhân MP11, mỗi nhân 804MHz, dùng chung bộ nhớ đệm L2 2MB
  • ARM11 dùng tập lệnh ARMv6k và cũng bao gồm các thành phần như Thumb, Jazelle, VFP
    • ARMv6 cung cấp lệnh SIMD số nguyên và lệnh load/store cho đồng bộ đa nhân
    • VFP11 tăng tốc phép toán dấu phẩy động đơn chính xác 32-bit và kép chính xác 64-bit, tuân theo IEEE 754
  • Mỗi nhân MP11 có pipeline 8 giai đoạn, dự đoán nhánh động và tĩnh, đồng xử lý điều khiển hệ thống CP15, bộ nhớ đệm lệnh 16KB và bộ nhớ đệm dữ liệu 16KB
  • Các nhân ARM11 được kết nối bằng bus AXI của ARM, còn Snoop Control Unit của MPCore duy trì tính nhất quán bộ nhớ đệm L1
  • Ngoài ARM11, 3DS còn có thêm hai CPU
    • ARM946E-S: ở chế độ Native 3DS, hoạt động như bộ xử lý phụ bảo mật/I/O do OS quản lý; khi chạy game DS/DSi, trở thành bộ xử lý chính
    • ARM7TDMI: ở chế độ DS/DSi, hoạt động như bộ xử lý phụ; ở chế độ GBA, trở thành CPU thực thi chính
  • Có ba chế độ hoạt động
    • Native 3DS mode: ARM11 chạy game 3DS, ARM9 xử lý I/O và bảo mật, còn ARM7 tắt
    • Nintendo DSi mode: ARM9 và ARM7 chạy game DS/DSi, ARM11 hỗ trợ phần cứng DS bị thiếu hoặc được tái bố trí
    • Game Boy Advance mode: ARM7 thực thi lệnh game GBA, ARM11 và ARM9 hỗ trợ ở nền
  • Cấu hình bộ nhớ khá phức tạp
    • Từ góc nhìn nhà phát triển, 3DS gốc cung cấp FCRAM 128MB, New 3DS cung cấp FCRAM 256MB
    • ARM11 có SRAM 512KB cho mục đích bảo mật
    • ARM9 có SRAM 1MB, trên New 3DS là SRAM 1.5MB
    • ARM9 còn có TCM lệnh 32KB và TCM dữ liệu 16KB
  • FCRAM là Fast Cycle DRAM do Fujitsu và Toshiba tạo ra năm 2002, nhằm đạt độ trễ thấp hơn DRAM trong các lần đọc không liên tiếp
  • Cũng có cấu hình DMA
    • XDMA cạnh ARM9 cung cấp tối đa 4 kênh
    • CDMA cạnh ARM11 cung cấp tối đa 8 kênh
    • New 3DS bổ sung thêm một CoreLink DMA-330 cạnh khối ARM11
  • Nhà phát triển 3DS nhìn chung chỉ truy cập ARM11 MPCore, và chương trình được viết theo mô hình đa luồng dựa trên thread
  • Trên New 3DS, nếu metadata của game cho biết game nhắm tới mẫu mới, OS sẽ kích hoạt các tính năng như xung nhịp nhanh, RAM bổ sung và bộ nhớ đệm L2
    • Nếu không, phần cứng dành riêng cho New sẽ bị vô hiệu hóa để đảm bảo tương thích
    • Game có thể chứa đồng thời codebase cho Old và New

Pipeline đồ họa và PICA200

  • Nintendo 3DS là thiết bị đầu tiên trong dòng máy cầm tay của Nintendo sử dụng lõi IP từ nhà cung cấp GPU thay vì PPU tự phát triển
  • Nintendo đã cấp phép PICA200 của DMP và đưa vào SoC CPU CTR; GPU hoạt động ở 268MHz
  • PICA200 là bộ xử lý 3D tiết kiệm điện, sử dụng kiến trúc Maestro 2G tương thích OpenGL ES 1.1 và mở rộng thêm các yếu tố của OpenGL ES 2.0
  • Giai đoạn pixel có cấu trúc chức năng cố định, nhưng Maestro functions cung cấp chiếu sáng fragment, thuật toán đa bóng, chia nhỏ polygon, bump mapping, texture thủ tục và nhiều hiệu ứng sương mù
  • VRAM dành riêng cho GPU chỉ có 6MB, nên lập trình viên phải đặt các lệnh, buffer và texture lặp cần truy cập tức thời vào VRAM, còn phần còn lại đặt trong FCRAM
    • PICA200 có DMA để truyền dữ liệu giữa FCRAM và VRAM
  • Bộ điều khiển LCD không hiểu trực tiếp định dạng render buffer của PICA200, nên cần LCD framebuffer riêng
    • Cần tối thiểu 3 framebuffer cho mắt trái màn hình trên, mắt phải màn hình trên và màn hình dưới
    • Để tránh artefact, có thể dùng một bộ bản sao cho page flipping
  • Khi chạy game, GPU thường render ba màn hình
    • Mắt trái màn hình trên: 400×240
    • Mắt phải màn hình trên: 400×240
    • Màn hình dưới: 320×240
    • Tất cả đều hiển thị màu RGB 8-bit, tối đa 16,78 triệu màu
  • Pipeline PICA200 gồm các giai đoạn lệnh, vertex, geometry, rasterizer, fragment và hậu xử lý
    • Giai đoạn lệnh đọc command buffer để vẽ polygon
    • Giai đoạn vertex sử dụng song song 4 Vertex Processor; nếu bật geometry shader thì chỉ dùng được 3
    • Giai đoạn geometry lấy một Vertex Processor để dùng như shader riêng
    • Giai đoạn fragment gồm 4 texture unit và shading unit
    • Không có pixel shader; thay vào đó kết hợp 6 bộ kết hợp màu với các chức năng Maestro
    • Giai đoạn hậu xử lý có thể thực hiện kiểm tra alpha, stencil, depth cùng blending và supersampling 2×2
  • New 3DS dường như được bổ sung một DSP gọi là MVD, thực hiện giải nén H.264/MJPEG và chuyển đổi YUV-to-RGB
    • Có vẻ trình duyệt web của New 3DS dùng nó để phát video được tăng tốc
  • PPU dành cho game DS và GBA cũng nằm trong SoC
    • Game DS/DSi/GBA sử dụng PPU như phần cứng cũ
    • Đầu ra đi qua LgyFB rồi được chuyển tới framebuffer, và PICA200 đảm nhiệm hiển thị
    • Cấu trúc này thêm độ trễ, nhưng ở mức người dùng khó nhận ra

Âm thanh và I/O

  • SoC có 2 khối âm thanh
    • DSP riêng cho game 3DS
    • CSND dòng DS dùng cho game 3DS, DS và GBA
  • DSP chuyên dụng cho 3DS là CEVA TeakLite II, hoạt động khoảng 134MHz
    • Xuất 2 kênh stereo, tần số lấy mẫu tối đa 32kHz, độ phân giải 16-bit
    • Sử dụng 512KB RAM làm vùng làm việc DSP, được double-buffer thành hai phần 256KB
    • DSP có thể trộn tối đa 24 kênh mẫu ADPCM và PCM
  • Chương trình tải lên lúc chạy firmware DSP do Nintendo viết, đi kèm SDK chính thức, còn dịch vụ âm thanh của OS trừu tượng hóa giao tiếp với DSP
  • CSND cung cấp 32 kênh, nhiều gấp đôi khối tương ứng trên DS
  • I/O bên ngoài mang cấu hình thiên về cạnh tranh với smartphone hơn là máy chơi game cầm tay
    • Nút số, Circle Pad analog, thanh trượt 3D/âm lượng, công tắc Wi-Fi
    • Cảm biến cảm ứng điện trở, con quay hồi chuyển, gia tốc kế
    • 1 camera trước và 2 camera sau
    • Bộ thu phát hồng ngoại, khe thẻ SD, jack 3,5mm, đầu đọc thẻ game
  • New 3DS bổ sung thêm I/O
    • 2 nút số, C-Stick, đầu đọc NFC ở màn hình dưới
    • LED hồng ngoại để theo dõi khuôn mặt
    • Khe microSD thay cho SD
    • Loại bỏ công tắc Wi-Fi và chuyển sang điều khiển bằng phần mềm
  • Giao diện nội bộ được chia thành SPI, HID, I²C, thiết bị ngoại vi tốc độ cao dựa trên FIFO và MCU
    • SPI kết nối flash lưu trữ của thẻ game, quản lý nguồn DS, một phần Wi-Fi, màn hình cảm ứng, âm thanh, micro, Circle Pad, v.v.
    • HID đọc bàn phím số dưới dạng thanh ghi 16-bit
    • I²C kết nối camera, bộ thu phát hồng ngoại, NFC, mô-đun theo dõi khuôn mặt QTM, con quay hồi chuyển, MCU, v.v.
    • eMMC và khe SD được kết nối như thiết bị ngoại vi 16MB/s thông qua các thanh ghi FIFO
  • Auxiliary Microcontroller là MCU 78K0R do NEC thiết kế và Renesas sản xuất, quản lý LCD, LED, nguồn, pin, RTC, thanh trượt 3D, nút HOME/nút nguồn, v.v.
  • Các dịch vụ dựa trên I/O gồm QR Reader, AR Games, Face Raiders, Amiibos, SpotPass, StreetPass và Play Coins

Hệ điều hành và cấu trúc khởi động

  • Nintendo 3DS lưu nhiều firmware để cung cấp chế độ chạy native, tương thích ngược và bảo trì
    • NATIVE_FIRM: vận hành chức năng native của 3DS, trong đó ARM11 chạy chương trình chính
    • TWL_FIRM: khiến 3DS hoạt động như Nintendo DSi, với ARM9 và ARM7 ở tuyến đầu
    • AGB_FIRM: khiến 3DS hoạt động như Game Boy Advance, với ARM7 chạy chương trình chính
    • SAFE_FIRM: dùng cho các tác vụ bảo trì như cập nhật hệ thống
  • Trong NATIVE_FIRM, ARM9 và ARM11 mỗi bên đóng vai trò một OS riêng
    • ARM9 chạy Kernel9Process9, phụ trách bảo mật, mã hóa, I/O, hệ thống tệp, xác minh và cài đặt title
    • ARM11 chạy Kernel11 và nhiều tiến trình người dùng, cung cấp mạng, HOME Menu, khởi chạy ứng dụng và trừu tượng hóa dịch vụ phần cứng
  • Bộ lập lịch ARM11 không xử lý các core như core đa dụng thông thường
    • Core đầu tiên, appcore, dành cho game và dùng lập lịch FIFO
    • Core thứ hai, syscore, dành cho tác vụ hệ thống và có thể cho ứng dụng người dùng mượn 30% thời gian thực thi
    • Core MP11 thứ tư của New 3DS dành riêng cho theo dõi khuôn mặt
    • Core MP11 thứ ba mặc định không được lập lịch nên hầu như luôn nhàn rỗi
    • CDMA bổ sung của New 3DS chỉ có thể truy cập trong quá trình khởi động và sau đó không được dùng
  • RAM mà ứng dụng thực sự có thể dùng ít hơn tổng FCRAM
    • 3DS gốc: mặc định 64MB trong tổng 128MB
    • New 3DS: mặc định 124MB trong tổng 256MB
    • Bằng cờ APPMEMTYPE, có thể khởi động mà không mở HOME Menu để có được lần lượt tối đa 96MB176MB
  • Phương tiện lưu trữ gồm Boot ROM, OTP, eMMC NAND và SD/microSD
    • Boot9Boot11 là ROM khởi động, được ẩn vì lý do bảo mật
    • OTP chứa thông tin duy nhất của từng máy và khóa mã hóa, được ghi một lần trong quá trình sản xuất
    • eMMC NAND lưu dữ liệu hệ thống, firmware và dữ liệu người dùng ở chế độ 3DS/DSi
    • SD/microSD lưu phần mềm eShop, dữ liệu lưu game, ảnh, bản ghi âm, v.v. và được bảo vệ bằng AES-128-CTR
  • Khi khởi động, Boot9 của ARM9 chạy trước, đánh thức Boot11 của ARM11, rồi xác minh NCSD header và phân vùng firmware trong NAND
    • Xác minh hash SHA-256 và chữ ký RSA-2048 để tìm firmware hợp lệ
    • Nếu thất bại, máy thử khởi động từ flash của mô-đun Wi-Fi; nếu việc này cũng thất bại thì hiển thị màn hình lỗi
    • Khi NATIVE_FIRM được nạp, luồng tiếp tục tới Kernel9, Process9, Kernel11, các tiến trình hệ thống, NS, rồi HOME Menu hoặc game
  • HOME Menu là shell điều hướng một trang, hiển thị các ứng dụng đã cài đặt trong một lưới có thể cuộn
    • Mô-đun NS cũng cung cấp lệnh gọi Applet như overlay nút HOME và bàn phím ảo
    • Trên New 3DS, ngay cả khi game chạy ở chế độ tương thích, các Applet và routine NS vẫn có thể dùng toàn bộ phần cứng
  • Cập nhật hệ thống có thể thực hiện trực tuyến hoặc bằng băng game
    • Băng game chỉ chứa cập nhật hệ thống, không chứa cập nhật ứng dụng người dùng
    • Cập nhật qua mạng chứa gói đầy đủ
    • Việc cài đặt được System Updater thực hiện sau khi khởi động lại vào SAFE_FIRM

Phát triển game, phân phối, Virtual Console

  • Hệ sinh thái phát triển 3DS chịu ảnh hưởng từ ngành smartphone dựa trên ARM và sự tiến bộ của compiler, nhưng Nintendo vẫn chưa cung cấp đến mức một toolchain tiêu chuẩn
  • Bộ phát triển phần cứng do Intelligent Systems và Kyoto MicroComputers cung cấp
    • CTR-BOX gồm một hộp kim loại chứa phần cứng 3DS và một vỏ 3DS giả
    • Flashcard chính thức được dùng để phân phối nguyên mẫu game cho tester bên ngoài
    • Với New 3DS, bộ kit SNAKE được cung cấp
  • SDK chính thức bao gồm armcc cho 3DS, debugger, API dịch vụ phần cứng/OS, thư viện đồ họa, packager, thư viện mạng/âm thanh/video, plugin Visual Studio 2010, công cụ PICA200 và profiler
  • Có bốn loại thư viện đồ họa
    • GL: API OpenGL ES đơn giản nhưng chậm
    • GD: lựa chọn thay thế nhanh hơn, tạo lệnh PICA200
    • GR: API lệnh PICA200 gần phần cứng nhất
    • GX: thư viện đa dụng để quản lý PICA200
  • Phương tiện chạy game có ba loại
    • Gamecard: có thể chứa ROM 128MB~4GB hoặc Flash tối đa 2GB và backup memory để lưu dữ liệu
    • eShop/SD Card: hỗ trợ phần mềm tải xuống, đặt trước và phân phối DLC
    • Local wireless: Download Play được tiếp nối trên 3DS; game được truyền sẽ được cài vào NAND và chỉ dùng một slot
  • Virtual Console cung cấp các game DSiWare, NES/Famicom, Sega Game Gear, Game Boy, Game Boy Color thông qua eShop
    • Người dùng New 3DS cũng có thể truy cập catalog Super Nintendo
    • Phần lớn hoạt động dưới dạng gói ứng dụng gồm ROM và emulator
  • Game Boy Advance chỉ được cung cấp chính thức cho người dùng Ambassador Program
    • Không chạy bằng emulator ARM11 mà chạy native trên ARM7 thông qua AGB_FIRM
    • Game GBA được sao chép vào FCRAM rồi khởi động lại vào AGB_FIRM để ARM7 nắm quyền điều khiển
  • Bản cập nhật game được phân phối qua eShop và áp dụng cho các loại game ngoại trừ Download Play

Bảo mật, chống sao chép, homebrew

  • Đối tượng chính của bảo mật 3DS là Game/CTR card readerhệ điều hành
    • Dữ liệu bên trong cartridge CTR có định dạng NCSD, còn OS đảm nhiệm xác thực, kiểm tra và giải mã
    • Chuỗi tin cậy thực tế tập trung vào hệ điều hành và cấu trúc khởi động
  • Có phần cứng bảo mật chuyên dụng
    • Cờ XN của ARM11 và MPU của ARM9 hạn chế thực thi bộ nhớ tùy ý
    • ARM9 hoạt động như một bộ xử lý chuyên trách bảo mật và truy cập các khối mật mã như AES, RSA, PRNG
    • Engine AES hỗ trợ mã hóa/giải mã AES-128, tối đa 64 key slot, các chế độ CTR/CCM/CBC/ECB
    • Engine RSA thực hiện phép toán RSA dựa trên khóa công khai và có 4 key slot
    • OTP chứa khóa riêng của từng máy và CTCert; eMMC CID cũng được dùng để làm rối khóa
  • Chuỗi tin cậy nối tiếp qua Boot9, OTP, eMMC, NCSD, NCCH và xác minh Title
    • NCSD và NCCH dùng chữ ký RSA-2048 + SHA-256
    • Payload NCCH được mã hóa bằng AES-128 CTR
    • Title được ký bằng RSA-2048, RSA-4096 hoặc ECDSA cùng SHA-256
    • Ticket, tức giấy phép tải xuống từ eShop, cũng được ký bằng RSA-2048 + SHA-256
  • Cũng tồn tại các điểm yếu trong triển khai
    • Thiết lập page table AXI WRAM của Kernel11 cấp quyền đọc/ghi/thực thi quá rộng
    • Trước hệ thống 3.0.0, bộ nhớ OTP không bị ẩn
    • Không có phân tách đặc quyền giữa Process9 và Kernel9
    • Không có ASLR, cũng không có bảo vệ chống downgrade hệ thống
    • Trình duyệt web dựa trên WebKit trở thành mục tiêu tấn công lặp đi lặp lại
  • Homebrew và sao chép ban đầu bắt nguồn từ flashcard DS
    • DSi và 3DS cố chặn flashcard bằng whitelist, tức danh sách các thẻ được cho phép
    • Nhà sản xuất khiến chúng được nhận diện như một game được cho phép khác bằng cách lập trình lại header cartridge
  • Năm 2013, Gateway3DS xuất hiện như flashcard 3DS thực dụng đầu tiên
    • Blue Gateway là flashcard DS dùng để cài entry point cho exploit MSET
    • Red Gateway sao chép thẻ game chính hãng bằng FPGA và microSD
    • Launcher.dat đóng vai trò payload exploit MSET và custom firmware
  • Nintendo đáp trả bằng các bản cập nhật
    • 5.0.0-11 tạm thời sửa exploit MSET
    • 7.0.0-13 chặn exploit kernel và thêm mô-đun RSA vào chuỗi tin cậy giải mã NCCH
    • 9.3.0 vá exploit kernel không công khai của Gateway3DS
    • Sky3DS bị đưa vào blacklist ở 11.0
  • Hệ sinh thái homebrew phát triển với libctru, nihstro, Ninjhax, Homebrew Launcher
    • Ninjhax dùng chức năng mã QR của Cubic Ninja làm entry point
    • GSPWN là lỗ hổng ghi đè HOME Menu heap bằng GPU DMA
    • Homebrew Launcher chạy các ứng dụng homebrew chưa ký ở định dạng .3dsx
  • memchunkhaxmemchunkhax2 cho phép leo thang đặc quyền Kernel11
    • Bằng cách thao túng memchunk header lưu trong FCRAM, chúng dẫn tới truy cập AXI WRAM và kiểm soát Kernel11
  • Sau khi arm9loader được đưa vào New 3DS năm 2015, arm9loaderhax xuất hiện
    • Đây là exploit vĩnh viễn cho phép thực thi mã tùy ý với quyền Kernel9 tại thời điểm khởi động
    • Các công cụ như Luma3DS, Godmode9, Anemone3DS, nds-bootstrap được sử dụng rộng rãi
  • Trong giai đoạn 2016~2017, việc phân tích Boot9 dẫn tới sự xuất hiện của sighax, boot9strap, ntrboot
    • sighax khai thác lỗi xác minh chữ ký RSA-2048 của Boot9 để vô hiệu hóa chuỗi tin cậy
    • boot9strap trở thành bootloader thay thế hỗ trợ payload từ thẻ SD hoặc khởi động bình thường
    • ntrboot dùng flashcard DS, nam châm và tổ hợp phím để giành quyền Boot9
    • Các lỗ hổng này nằm trong Boot ROM nên không thể sửa bằng cập nhật phần mềm
  • Từ năm 2018 trở đi, các phương pháp phát triển theo hướng đơn giản hóa việc cài boot9strap
    • seedminer tái tạo movable.sed bằng Friend Code, tên thư mục con trên thẻ SD và brute force ngắn
    • BannerBomb3 khai thác lỗi stack overflow của ứng dụng Settings trong lúc phân tích title banner DSiWare
    • Các đường dẫn dựa trên SAFE_FIRM như unSAFE_MODE và safehax, cũng như dựa trên HOME Menu như menuhax67 và nimdsphax, được sử dụng
  • Bản cập nhật 11.17.0 tháng 5 năm 2023 đã vá BannerBomb3, vô hiệu hóa một trong những entry point cuối cùng không cần thiết bị bổ sung
    • Sau đó, người dùng cần exploit từ game 3DS hợp pháp, flashcard DS tương thích ntrboot, hoặc exploit WebKit

1 bình luận

 
GN⁺ 2023-09-24
Ý kiến trên Hacker News
  • Việc khi chạy game Gameboy Advance lại có một CPU GBA vật lý thật sự bên trong thật đáng kinh ngạc
    Tôi đã đọc mọi tin đồn từ trước khi máy ra mắt và đặt trước mẫu màu xanh, và vì ban đầu đã trả khoảng 250 USD nên tôi thuộc diện Ambassador Program. Khi Nintendo giảm giá mạnh ngay sau khi phát hành, họ đã tặng nhiều game miễn phí như một lời xin lỗi, gồm cả những game không có trên eShop, và tôi rất hài lòng
    Được chơi lại Mario Kart Super Circuit thời thơ ấu trên slide pad tuyệt vời của 3DS đúng như một giấc mơ; sau khi biết rằng nó chạy trên CPU thật như chiếc GBA tôi từng dùng trước đây, kỷ niệm đó càng trở nên đặc biệt hơn

    • Lý do còn đáng kinh ngạc hơn. Vì Nintendo xếp chồng khả năng tương thích ngược như búp bê Matryoshka, nên CPU GBA gần như tình cờ được đưa vào
      Nintendo 3DS chứa toàn bộ cấu trúc hệ thống của Nintendo DSi, và CPU DSi cũng đóng vai trò CPU giám sát của hệ thống. DSi vốn về cơ bản là kiến trúc Nintendo DS được ép xung, còn hai mẫu Nintendo DS đời đầu có cả ARM7TDMI của GBA để tương thích ngược thông qua khe GBA
      Vào thời Ambassador Program, Nintendo đã phân phối firmware AGB_FIRM để khởi động 3DS vào chế độ Game Boy Advance, và cho chế độ Nintendo DS thì có TWL_FIRM. Nếu hack 3DS hiện nay, bạn cũng có thể nạp phần mềm GBA khác, nên trừ các phụ thuộc vào phụ kiện, máy có thể chạy game GBA với độ chính xác gần như hoàn hảo
    • Sony cũng dùng cách tương tự
      PlayStation 2 cần một chip I/O và Sony đã chọn CPU PS1. Khi chạy game PS1, máy chuyển quyền thực thi sang phía đó
      Nếu tôi nhớ đúng thì PlayStation 3 đời đầu có CPU và GPU của PS2, nhưng dường như chúng không làm gì nhiều khi không chạy game PS2. Về sau rất có thể chúng đã bị loại bỏ khi chuyển sang giả lập để cắt giảm chi phí
    • Đưa CPU Gameboy Advance vật lý thật vào là một mẹo cũ, nhưng vẫn rất hay
      GBA cũng đưa CPU GBC vào để tương thích ngược, và chuyển chế độ bằng một công tắc vật lý do chính cartridge nhấn. PS2 cũng tái sử dụng CPU PS1 làm thành phần I/O trên bo mạch để dùng cho tương thích ngược, còn các thành phần khác, nếu nhớ không nhầm, được hỗ trợ bằng giả lập
    • Walmart đã bắt đầu bán với giá giảm từ vài ngày trước khi đợt giảm giá chính thức và thời hạn đăng ký Ambassador Program kết thúc
      Nhờ một bài trên Reddit, tôi vừa mua được giá thấp vừa nhận được game miễn phí. Dù hầu như không chơi các game miễn phí đó, tôi vẫn có cảm giác như đã qua mặt được hệ thống
    • CPU GBA là một phần của CPU NDS, nên nó cũng nằm bên trong 3DS
  • 3DS khởi đầu rất chậm, nhưng cuối cùng đã trở thành một trong những console tôi yêu thích nhất
    Tôi chưa từng sở hữu N64, nên nhờ các bản remaster 3D xuất sắc mà lần đầu được chơi Ocarina of Time và Majora’s Mask. Khả năng tương thích ngược hoàn toàn với DS cũng là một điểm cộng lớn, và nếu muốn tránh việc phóng to theo tỉ lệ không nguyên trông xấu trên màn hình thì phải giữ Start khi khởi chạy
    Phạm vi homebrew và giả lập được hỗ trợ trên máy đã softmod cũng rộng, khiến đây là một thiết bị nhỏ rất hấp dẫn. Tôi cũng cực kỳ thích thiết kế New 3DS bản nhỏ, thuộc hàng xuất sắc nhất từ trước đến nay, nên đã mua rất nhiều faceplate thay được trông vừa đẹp vừa vui mắt
    Một điều nữa thật sự rất tuyệt là khi pin bắt đầu cũ, tôi có thể gọi cho Nintendo và mua hai viên pin chính hãng mới cho máy của tôi và của vợ. Mỗi viên khoảng 15 bảng, và có thể thay mà không cần tháo rời máy. Ngày nay cách làm như vậy khá hiếm

  • Trong thời đại dịch, vì ADHD mà cuối cùng tôi đã mua tới 3 chiếc New Nintendo 3DS XL
    Một chiếc được nhập từ Nhật rồi đổi sang ROM Mỹ. Tôi rất thích mang nó đi du lịch. Hiệu ứng 3D rất hay, thích cả việc có thể tắt nó đi, và thời lượng pin cũng tuyệt vời
    Nhưng cũng như mọi sở thích khác, khi đồ trở nên hiếm thì lại sinh ham muốn sưu tầm; mà không thể chơi 3 console cùng lúc, nên có lẽ giờ tôi phải bán bớt

    • Nếu có 3 console thì nên rủ hai người bạn chơi Tri Force Heroes
    • Nếu có cách ngăn pin hỏng, hoặc sau này vẫn kiếm được pin thay thế, có lẽ tôi sẽ cứ giữ lại
      Trước đây tôi đã mua New Nintendo 2DS XL; đây là mẫu lặp cuối cùng của dòng DS và chạy được game DS, DSi, 3DS. Chỉ có vài game dành riêng cho “new” DS, nên coi như nó hỗ trợ khoảng 15 năm lịch sử game
      Tôi cố mua game DS ở bất cứ đâu thấy được, nhưng đã khó tìm giá tốt, và một số tựa như Bravely Default quanh đây vẫn khoảng 60 euro. DS cũng có rất nhiều game sản xuất hàng loạt chất lượng tệ, nên tôi bỏ qua các game đó
  • Việc cho phép chỉnh độ sâu 3D của 3DS bằng một thanh trượt vật lý rất dễ tiếp cận là một thiết kế thiên tài
    Tôi không biết nghiên cứu nào đã dẫn đến quyết định cho điều chỉnh cốt lõi của tính năng 3D theo cách này, nhưng nó tạo ra khác biệt mang tính quyết định đối với khả năng sử dụng của tính năng 3D

    • Đến giờ thì tưởng như màn hình có biểu diễn chiều sâu đã trở thành tính năng phổ biến trên thiết bị màn hình cảm ứng rồi
      Vì có Face ID nên có thể biết khoảng cách giữa hai mắt, và thậm chí có thể tự động điều chỉnh giá trị thanh trượt đó
  • Bài viết này là một phần của một loạt bài xuất sắc: https://www.copetti.org/writings/consoles/

  • Một trong những tính năng tôi thích nhất trên 3DS đã jailbreak là ứng dụng NSUI: https://3ds.eiphax.tech/nsui
    Nhờ các bản phát hành Virtual Console chính thức, có thể chơi một số game Nintendo cũ trên 3DS, và ta có thể dùng cùng wrapper đó cho bất kỳ game nào thuộc các hệ máy được hỗ trợ. Nó gần giống wrapper hơn là emulator, nên hiệu năng và khả năng tương thích tốt ngay lập tức
    Vì thế 3DS trở thành một thiết bị cầm tay tốt để thưởng thức game NES/SNES/GB/GBC/GBA với độ chính xác tới từng pixel
    Một điều khác tôi chỉ nhận ra vài năm trước là dùng thẻ microSD càng lớn thì 3DS càng chậm. Theo tôi biết, toàn bộ console quét toàn bộ bộ nhớ theo từng block, nên từ 64GB trở lên máy chậm đến mức khó chịu. Đặc biệt khi chơi game GBA được inject, 3DS gần như khởi động lại vào chế độ đó nên sẽ quét lại bộ nhớ

  • Tôi nhớ đoạn “trước phiên bản hệ thống 3.0.0, bộ nhớ OTP không bị ẩn, và chỉ cần có bất kỳ lỗ hổng nào là có thể trích xuất khóa OTP mà không gặp vấn đề gì”
    Ngày trước, muốn hack 3DS thì phải hạ firmware xuống 3.0.0 để trích xuất OTP. Nhưng 3.0.0 không hoàn toàn tương thích với New 3DS, nên chỉ cần đóng nắp máy ở trạng thái firmware cũ trên mẫu đó là console sẽ bị brick vĩnh viễn. Đúng là thời hoàng kim

  • Tôi rất thích loạt bài này
    Nếu muốn thử homebrew cho 3DS, hãy xem https://github.com/devkitPro/libctru

  • Tôi hy vọng Nintendo sẽ không bao giờ từ bỏ trải nghiệm máy chơi game cầm tay với cả một console nằm gọn trong lòng bàn tay
    Tôi cũng mong ngành game cầm tay indie rộng lớn hơn sẽ phát triển
    Thứ trông như cái chết sắp đến của các thiết bị cầm tay cao cấp là cloud gaming. Bao gồm cả kiểu chạy console ở nhà rồi stream lên điện thoại
    Cuối cùng tất cả phụ thuộc vào việc mọi người chọn gì bằng ví tiền của mình. Tôi nhớ GBC

    • Tôi không nghĩ máy chơi game cầm tay sẽ chết. Phần cứng vẫn tiếp tục tiến bộ, còn yêu cầu phần cứng thì đang chững lại
      Tôi cho rằng Switch đã rất thành công với các game indie 2D như Stardew Valley, Hades, Dead Cells. Thiết kế game kiểu đó hoạt động rất tốt, và đồ họa 2D đẹp thì sẽ không bao giờ trông lỗi thời
      Tôi nghi ngờ việc mọi người có sẵn sàng trả tiền cho một mô hình streaming bất lợi cho người tiêu dùng chỉ để chơi những game tuyệt vời vốn có thể chạy trên cả những thiết bị yếu như củ khoai hay không
    • Khả năng đó có vẻ rất thấp. Stadia đã đóng cửa, nhưng cả Switch và Steam Deck đều cực kỳ thành công
      Độ trễ của cloud gaming và sự phụ thuộc vào kết nối mạng ổn định vẫn là vấn đề với nhiều người. Hơn nữa, tôi không nghĩ phần lớn game thủ muốn trả thêm một khoản thuê bao nữa, và cloud gaming rốt cuộc rất có thể sẽ đi kèm thuê bao
      Nếu dù sao cũng cần phần cứng để chơi, thì cứ dùng một thiết bị cầm tay tốt là được. Các hãng PC như Asus cũng đang làm thiết bị cầm tay như RoG Ally, còn Switch 2 và Steam Deck 2 thì gần như chắc chắn. Ngược lại, có vẻ thiết bị cầm tay sẽ ngày càng tốt hơn và thị phần cũng tăng lên
    • Tôi thật sự không thích việc Sony ngừng PSP, nhưng tôi hiểu lý do. Steam Deck và các biến thể mạnh hơn thành công cũng vì cùng lý do đó
      Game ngày nay không còn tính độc quyền mạnh như trước, và nếu không tích hợp chặt đến mức gộp hẳn máy để bàn và máy cầm tay làm một như Nintendo, thì công ty chỉ đang tạo ra một sự tách biệt không cần thiết
      Nếu tưởng tượng Nintendo phát hành một console để bàn riêng bên cạnh Switch, có lẽ đó đã không phải là một cấu trúc bền vững
      Việc mọi người ca ngợi “thiên tài” và “đổi mới” của Nintendo khi làm ra một thiết bị cầm tay có thể cắm vào TV để chơi thật thú vị. Trong khi đó PSP Go và dock TV thì như đang nói “này mọi người, không nhớ tôi à?”. Tôi rất thích PSP Go vì nó thật sự nhỏ nhắn và dễ thương
    • Chip sẽ chỉ ngày càng mạnh hơn và nhỏ hơn. Ngay cả Raspberry Pi hiện đã chơi được nhiều game, và khoảng 10 năm nữa, tôi nghĩ các thiết bị có kích thước tương tự sẽ chạy được game thế hệ hiện tại
      Tôi đang nghĩ đến việc làm một console cầm tay cho con gái như một dự án thú vị
  • Những bài viết thế này thật sự rất tuyệt
    Tôi từng quan tâm đến kiến trúc GB/GBC và muốn làm game cho nền tảng đó, nhưng vẫn chưa tìm thấy bài này. Cảm ơn đã đăng lên và cảm ơn Rodrigo đã viết