สถาปัตยกรรม Nintendo 3DS
(copetti.org)- Nintendo 3DS เป็นคอนโซลพกพาในยุคที่สมาร์ตโฟนและ App Store กำลังเติบโต โดยรวม 3D แบบมองด้วยตาเปล่า, หน้าจอคู่, CPU ที่รองรับย้อนหลัง และ I/O หลากหลายไว้ในโครงสร้าง SoC ที่ซับซ้อน
- LCD ด้านบนขนาด 800×240 แสดงเฟรม 400×240 จำนวน 2 เฟรมพร้อมกันด้วย พิกเซลครึ่งความกว้าง และ parallax barrier พร้อมลดปัญหามุมมองและความล้าของตาด้วยสไลเดอร์ปรับความลึกและการติดตามใบหน้าของ New 3DS
- รุ่นพื้นฐานใช้ ARM11 MPCore 2 คอร์ ที่ 268MHz, FCRAM 128MB, GPU DMP PICA200, และ DSP CEVA TeakLite II ส่วน New 3DS เพิ่มเป็น 4 คอร์ที่ 804MHz, FCRAM 256MB, NFC และระบบมุมมองสามมิติที่ปรับปรุงแล้ว
- ภายในมี ARM946E-S สำหรับ DS และ ARM7TDMI สำหรับ GBA นอกเหนือจาก ARM11 จึงสลับเป็นโหมด Native 3DS, Nintendo DSi และ Game Boy Advance ได้ แต่โดยทั่วไปนักพัฒนาจะจัดการโดยตรงเฉพาะ ARM11 MPCore
- ระบบปฏิบัติการและความปลอดภัยประกอบด้วย NATIVE_FIRM, TWL_FIRM, AGB_FIRM, SAFE_FIRM, Boot9/Boot11 และห่วงโซ่ความเชื่อถือที่อิง AES/RSA/OTP โดยระบบนิเวศของ homebrew และ custom firmware พัฒนาขึ้นผ่านช่องโหว่หลายครั้ง
ตระกูลรุ่นและเจเนอเรชันฮาร์ดแวร์
- 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 ติดตั้ง LCD 2 จอเหมือนเครื่องรุ่นถัดจาก Nintendo DS และหน้าจอด้านบนมีสเปก 800×240 พิกเซล เพื่อแสดงมิติความลึก
- เอฟเฟกต์สามมิติใช้หลักการ stereoscopic parallax แบบเดียวกับ Virtual Boy
- แสดงภาพที่แตกต่างกันเล็กน้อยให้ตาซ้ายและตาขวา
- ความต่างของตำแหน่งศูนย์กลางระหว่างสองภาพทำให้รับรู้ว่าวัตถุอยู่ด้านหน้าหรือด้านหลัง
- LCD ด้านบนประกอบขึ้นทางกายภาพด้วย พิกเซลครึ่งความกว้าง และทำงานได้สองโหมด
- โหมด 2D: ถือว่าพิกเซลแนวนอน 2 พิกเซลเป็นเสมือนหนึ่งพิกเซล
- โหมด 3D: ใช้ทุกพิกเซลแยกกันเพื่อแสดงเฟรม 400×240 จำนวน 2 เฟรมพร้อมกัน
- parallax barrier แยกแสงแบ็กไลต์ด้านหลังพิกเซล LCD เพื่อให้ตาแต่ละข้างมองเห็นชุดย่อยของพิกเซลที่ต่างกัน
- วิธีนี้มีข้อจำกัด
- ต้องใช้ความสว่างเพิ่มเติม จึงกระทบระยะเวลาใช้งานแบตเตอรี่
- หากหน้าจอเอียงเมื่อเทียบกับดวงตา เฟรมพารัลแลกซ์ทั้งสองจะดูปนกันและอาจเพิ่มความล้าของตา
- ท่าทางการถือที่ต้องคงที่และความล้าของตาที่เกิดเร็วอาจทำให้ฟังก์ชัน 3D ใช้งานยุ่งยาก
- สไลเดอร์ปรับความลึก 3D ปรับเอฟเฟกต์ความลึกโดยเพิ่มหรือลดความต่างระหว่างสองเฟรม
- New 3DS บรรเทาปัญหาการเอียงด้วย การติดตามใบหน้า โดยใช้กล้องหน้าและ LED อินฟราเรด
- เกมต้องเรนเดอร์ฉากเดียวกันเป็น 2 เฟรมที่เลื่อนตำแหน่งเล็กน้อย เหมือนการวาดเฟรมทั่วไปด้วย GPU
- API ทางการมีรูทีนสำหรับสร้างเมทริกซ์โปรเจกชันสองชุด
CPU, หน่วยความจำ และโครงสร้างรองรับย้อนหลัง
- CPU CTR ซึ่งเป็น SoC หลักบรรจุระบบส่วนใหญ่ ยกเว้นที่เก็บข้อมูลและ RAM
- Nintendo ร่วมมือกับ ARM เพื่อสร้างคลัสเตอร์ CPU ที่อิง ARM11 MPCore
- 3DS ดั้งเดิม: คอร์ MP11 จำนวน 2 คอร์ คอร์ละ 268MHz
- New 3DS: คอร์ MP11 จำนวน 4 คอร์ คอร์ละ 804MHz, แคช L2 2MB แบบแชร์
- ARM11 ใช้ชุดคำสั่ง ARMv6k และยังรวมองค์ประกอบอย่าง Thumb, Jazelle, VFP
- ARMv6 มีคำสั่ง SIMD สำหรับจำนวนเต็มและคำสั่ง load/store สำหรับการซิงโครไนซ์แบบมัลติคอร์
- VFP11 เร่งการคำนวณทศนิยมแบบ single precision 32 บิตและ double precision 64 บิต และเป็นไปตาม IEEE 754
- คอร์ MP11 แต่ละคอร์มี ไปป์ไลน์ 8 ขั้น, การทำนายสาขาแบบไดนามิกและสแตติก, โคโปรเซสเซอร์ควบคุมระบบ CP15, แคชคำสั่ง 16KB และแคชข้อมูล 16KB
- คอร์ ARM11 เชื่อมต่อกันด้วยบัส AXI ของ ARM และ Snoop Control Unit ของ MPCore รักษาความสอดคล้องของแคช L1
- 3DS ยังมี CPU อีกสองตัวนอกเหนือจาก ARM11
- ARM946E-S: ในโหมด Native 3DS ทำงานเป็นโปรเซสเซอร์เสริมด้านความปลอดภัยและ I/O ที่ OS จัดการ และเมื่อรันเกม 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 ดั้งเดิมให้ FCRAM 128MB จากมุมมองนักพัฒนา ส่วน New 3DS ให้ FCRAM 256MB
- ARM11 มี SRAM 512KB เพื่อวัตถุประสงค์ด้านความปลอดภัย
- ARM9 มี SRAM 1MB และใน New 3DS มี SRAM 1.5MB
- ARM9 ยังมี TCM คำสั่ง 32KB และ TCM ข้อมูล 16KB
- FCRAM คือ Fast Cycle DRAM ที่ Fujitsu และ Toshiba สร้างขึ้นในปี 2002 โดยมีเป้าหมายให้มีเวลาแฝงต่ำกว่า DRAM สำหรับการอ่านแบบไม่ต่อเนื่อง
- ยังมีการจัดวาง DMA รวมอยู่ด้วย
- XDMA ข้าง ARM9 ให้ได้สูงสุด 4 แชนเนล
- CDMA ข้าง ARM11 ให้ได้สูงสุด 8 แชนเนล
- New 3DS เพิ่ม CoreLink DMA-330 อีกหนึ่งตัวข้างบล็อก ARM11
- โดยทั่วไปนักพัฒนา 3DS จะเข้าถึงเฉพาะ ARM11 MPCore และเขียนโปรแกรมด้วยโมเดลมัลติเธรดแบบอิงเธรด
- บน New 3DS หาก metadata ของเกมระบุว่าเป็นเป้าหมายสำหรับรุ่นใหม่ OS จะเปิดใช้งานฟีเจอร์อย่างสัญญาณนาฬิกาที่เร็วขึ้น, RAM เพิ่มเติม และแคช L2
- หากไม่เป็นเช่นนั้น จะปิดใช้งานฮาร์ดแวร์เฉพาะของ New เพื่อความเข้ากันได้
- เกมสามารถบรรจุ codebase สำหรับ Old และ New ไว้ด้วยกันได้
ไปป์ไลน์กราฟิกและ PICA200
- Nintendo 3DS เป็นเครื่องแรกในสายเครื่องพกพาของ Nintendo ที่ใช้ IP core ของผู้ผลิต GPU แทน PPU ของตนเอง
- Nintendo ได้ไลเซนส์ PICA200 ของ DMP มาใส่ไว้ใน CPU CTR SoC และ GPU ทำงานที่ 268MHz
- PICA200 เป็นโปรเซสเซอร์ 3D แบบใช้พลังงานต่ำ และใช้สถาปัตยกรรม Maestro 2G ที่สอดคล้องกับ OpenGL ES 1.1 พร้อมขยายองค์ประกอบของ OpenGL ES 2.0
- ขั้นพิกเซลเป็นโครงสร้างแบบ fixed-function แต่ Maestro functions ให้ความสามารถด้านแสงเงาระดับ fragment, อัลกอริทึมเงาหลายแบบ, การแบ่งย่อยโพลิกอน, bump mapping, procedural texture และเอฟเฟกต์หมอกหลายแบบ
- VRAM เฉพาะ GPU มีเพียง 6MB ดังนั้นโปรแกรมเมอร์ต้องวางคำสั่ง บัฟเฟอร์ และเท็กซ์เจอร์ที่ใช้ซ้ำซึ่งต้องเข้าถึงทันทีไว้ใน VRAM ส่วนที่เหลือวางไว้ใน FCRAM
- PICA200 มี DMA สำหรับถ่ายโอนข้อมูลระหว่าง FCRAM กับ VRAM
- LCD controller ไม่เข้าใจรูปแบบ render buffer ของ PICA200 โดยตรง จึงต้องมี LCD framebuffer แยกต่างหาก
- ต้องมีอย่างน้อย 3 ชุดสำหรับตาซ้ายจอบน, ตาขวาจอบน และจอล่าง
- หากต้องการหลีกเลี่ยง artifact สามารถมีชุดสำเนาสำหรับ page flipping ได้
- ระหว่างเล่นเกม GPU มักเรนเดอร์สามหน้าจอ
- ตาซ้ายจอบน: 400×240
- ตาขวาจอบน: 400×240
- จอล่าง: 320×240
- ทั้งหมดแสดงสีแบบ RGB 8 บิต ได้สูงสุด 16.78 ล้านสี
- ไปป์ไลน์ของ PICA200 ประกอบด้วยขั้นคำสั่ง, vertex, geometry, rasterizer, fragment และ post-processing
- ขั้นคำสั่งอ่าน command buffer เพื่อวาดโพลิกอน
- ขั้น vertex ใช้ Vertex Processor 4 ตัว แบบขนาน และหากเปิดใช้ geometry shader จะใช้ได้เพียง 3 ตัว
- ขั้น geometry นำ Vertex Processor หนึ่งตัวมาใช้เป็น shader แยกต่างหาก
- ขั้น fragment ประกอบด้วย texture unit 4 ตัวและ shading unit
- ไม่มี pixel shader แต่ใช้การผสมผสาน color combiner 6 ตัว กับฟังก์ชัน Maestro
- ขั้น post-processing สามารถทำ alpha, stencil, depth test รวมถึง blending และ 2×2 supersampling ได้
- ใน New 3DS ดูเหมือนจะมีการเพิ่ม DSP ที่เรียกว่า MVD ซึ่งทำการคลายการบีบอัด H.264/MJPEG และแปลง YUV-to-RGB
- ดูเหมือนว่าเว็บเบราว์เซอร์ของ New 3DS จะใช้สำหรับเล่นวิดีโอแบบเร่งความเร็วด้วยฮาร์ดแวร์
- PPU สำหรับเกม DS และ GBA ก็อยู่ใน SoC ด้วย
- เกม DS/DSi/GBA ใช้ PPU เหมือนฮาร์ดแวร์เดิม
- เอาต์พุตจะถูกส่งผ่าน LgyFB ไปยัง framebuffer และ PICA200 รับหน้าที่แสดงผล
- โครงสร้างนี้เพิ่ม latency แต่สำหรับผู้ใช้ถือว่าเล็กน้อยจนมองข้ามได้
เสียงและ I/O
- ใน SoC มีบล็อกเสียง 2 บล็อก
- DSP เฉพาะสำหรับเกม 3DS
- CSND ตระกูล DS ที่เกม 3DS, DS และ GBA ใช้
- DSP เฉพาะ 3DS คือ CEVA TeakLite II และทำงานที่ประมาณ 134MHz
- ส่งออกเสียงสเตอริโอ 2 แชนเนล อัตราสุ่มสูงสุด 32kHz ความละเอียด 16 บิต
- ใช้ RAM 512KB เป็นพื้นที่ทำงานของ DSP และทำ double buffering ชุดละ 256KB
- DSP สามารถมิกซ์ตัวอย่าง ADPCM และ PCM ได้สูงสุด 24 แชนเนล
- โปรแกรมจะอัปโหลด เฟิร์มแวร์ DSP ที่ Nintendo เขียนและรวมอยู่ใน SDK อย่างเป็นทางการตอน runtime และบริการเสียงของ OS จะ abstract การสื่อสารกับ DSP
- CSND ให้ 32 แชนเนล มากกว่าบล็อกคู่กันของ DS สองเท่า
- I/O ภายนอกมีลักษณะเหมือนตั้งใจแข่งกับสมาร์ตโฟนมากกว่าเครื่องเกมพกพา
- ปุ่มดิจิทัล, Circle Pad แบบอนาล็อก, สไลเดอร์ 3D และระดับเสียง, สวิตช์ Wi-Fi
- เซ็นเซอร์สัมผัสแบบ resistive, ไจโรสโคป, มาตรวัดความเร่ง
- กล้องหน้า 1 ตัวและกล้องหลัง 2 ตัว
- ตัวรับส่งอินฟราเรด, ช่องเสียบ SD card, แจ็ก 3.5mm, ตัวอ่าน game card
- New 3DS เพิ่ม I/O เพิ่มเติม
- ปุ่มดิจิทัล 2 ปุ่ม, C-Stick, ตัวอ่าน NFC ที่จอล่าง
- LED อินฟราเรดสำหรับติดตามใบหน้า
- ช่องเสียบ microSD แทน SD
- ถอดสวิตช์ Wi-Fi ออกและควบคุมด้วยซอฟต์แวร์
- อินเทอร์เฟซภายในแบ่งเป็น SPI, HID, I²C, อุปกรณ์ต่อพ่วงความเร็วสูงแบบ FIFO และ MCU
- SPI เชื่อมต่อแฟลชสำหรับบันทึกของ game card, การจัดการพลังงานของ DS, บางส่วนของ Wi-Fi, หน้าจอสัมผัส, เสียง, ไมโครโฟน, Circle Pad ฯลฯ
- HID อ่านแป้นปุ่มดิจิทัลเป็นรีจิสเตอร์ 16 บิต
- I²C เชื่อมต่อกล้อง, ตัวรับส่งอินฟราเรด, NFC, โมดูลติดตามใบหน้า QTM, ไจโรสโคป, MCU ฯลฯ
- eMMC และช่องเสียบ SD เชื่อมต่อเป็นอุปกรณ์ต่อพ่วง 16MB/s ผ่านรีจิสเตอร์ FIFO
- Auxiliary Microcontroller คือ MCU 78K0R ที่ NEC ออกแบบและ Renesas ผลิต โดยจัดการ LCD, LED, การจัดการพลังงาน, แบตเตอรี่, RTC, สไลเดอร์ 3D, ปุ่ม HOME/Power เป็นต้น
- บริการที่อิง 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 รัน Kernel9 และ Process9 รับผิดชอบความปลอดภัย, การเข้ารหัส, I/O, ระบบไฟล์, การตรวจสอบและติดตั้ง title
- ARM11 รัน Kernel11 และโปรเซสผู้ใช้หลายตัว ให้บริการเครือข่าย, HOME Menu, การรันแอป และ abstraction ของบริการฮาร์ดแวร์
- scheduler ของ ARM11 ไม่ได้ปฏิบัติกับคอร์เหมือนคอร์อเนกประสงค์ทั่วไป
- คอร์แรก appcore ใช้สำหรับเกมและใช้ FIFO scheduling
- คอร์ที่สอง syscore ใช้สำหรับงานระบบ และสามารถให้แอปพลิเคชันผู้ใช้ยืมเวลา execution ได้ 30%
- คอร์ MP11 ตัวที่สี่ของ New 3DS ใช้เฉพาะการติดตามใบหน้า
- คอร์ MP11 ตัวที่สามโดยปกติไม่ถูก schedule จึงว่างอยู่เป็นส่วนใหญ่
- CDMA เพิ่มเติมของ New 3DS เข้าถึงได้เฉพาะระหว่างบูตและหลังจากนั้นไม่ได้ใช้
- RAM ที่แอปใช้งานได้จริงมีน้อยกว่า FCRAM ทั้งหมด
- 3DS รุ่นเดิม: ค่าเริ่มต้น 64MB จาก 128MB
- New 3DS: ค่าเริ่มต้น 124MB จาก 256MB
- ด้วยแฟล็ก
APPMEMTYPEสามารถบูตโดยไม่เปิด HOME Menu และจัดสรรได้สูงสุด 96MB, 176MB ตามลำดับ
- สื่อจัดเก็บประกอบด้วย Boot ROM, OTP, eMMC NAND และ SD/microSD
- Boot9 และ Boot11 เป็น ROM สำหรับบูตและถูกซ่อนไว้ด้วยเหตุผลด้านความปลอดภัย
- OTP เก็บข้อมูลเฉพาะเครื่องและคีย์เข้ารหัสที่เขียนครั้งเดียวระหว่างการผลิต
- eMMC NAND เก็บข้อมูลระบบ, เฟิร์มแวร์ และข้อมูลผู้ใช้ในโหมด 3DS/DSi
- SD/microSD เก็บซอฟต์แวร์ eShop, save data, รูปภาพ, การบันทึกเสียง ฯลฯ และป้องกันด้วย AES-128-CTR
- ตอนบูต Boot9 ของ ARM9 ทำงานก่อน แล้วปลุก Boot11 ของ ARM11 จากนั้นตรวจสอบ NCSD header และพาร์ทิชันเฟิร์มแวร์ใน NAND
- ตรวจสอบแฮช SHA-256 และลายเซ็น RSA-2048 เพื่อหาเฟิร์มแวร์ที่ถูกต้อง
- หากล้มเหลวจะพยายามบูตจากแฟลชของโมดูล Wi-Fi และหากยังล้มเหลวก็จะแสดงหน้าจอข้อผิดพลาด
- เมื่อ NATIVE_FIRM ถูกโหลดแล้ว จะต่อไปยัง Kernel9, Process9, Kernel11, โปรเซสระบบ, NS และ HOME Menu หรือเกม
- HOME Menu เป็นเชลล์นำทางหน้าเดียวที่แสดงแอปพลิเคชันที่ติดตั้งแล้วเป็นกริดที่เลื่อนได้
- โมดูล NS ยังให้การเรียก Applet เช่น overlay ของปุ่ม HOME และคีย์บอร์ดเสมือน
- ใน New 3DS แม้เกมจะรันในโหมด compatibility แต่ Applet และ routine ของ NS ก็สามารถใช้ฮาร์ดแวร์ทั้งหมดได้
- การอัปเดตระบบทำได้ผ่านออนไลน์หรือ game cartridge
- cartridge มีเฉพาะการอัปเดตระบบโดยไม่มีอัปเดตแอปผู้ใช้
- การอัปเดตผ่านเครือข่ายมีแพ็กเกจทั้งหมด
- การติดตั้งทำโดย System Updater หลังจากรีบูตเข้า
SAFE_FIRM
การพัฒนาเกม การจัดจำหน่าย และ Virtual Console
- ระบบนิเวศการพัฒนา 3DS ได้รับอิทธิพลจากอุตสาหกรรมสมาร์ตโฟนที่ใช้ ARM และความก้าวหน้าของคอมไพเลอร์ แต่ Nintendo ยังไม่ได้จัดหา toolchain มาตรฐานให้ถึงขั้นนั้น
- ชุดพัฒนาฮาร์ดแวร์จัดหาโดย Intelligent Systems และ Kyoto MicroComputers
- CTR-BOX ประกอบด้วยกล่องโลหะที่มีฮาร์ดแวร์ 3DS อยู่ภายใน และเคส 3DS จำลอง
- แฟลชการ์ดทางการถูกใช้เพื่อแจกจ่ายโปรโตไทป์เกมให้ผู้ทดสอบภายนอก
- สำหรับ New 3DS มีชุด SNAKE ให้ใช้งาน
- SDK ทางการประกอบด้วย
armccสำหรับ 3DS, ดีบักเกอร์, API สำหรับบริการฮาร์ดแวร์และ OS, ไลบรารีกราฟิก, packager, ไลบรารีเครือข่าย/เสียง/วิดีโอ, ปลั๊กอิน Visual Studio 2010, เครื่องมือ PICA200 และ profiler - ไลบรารีกราฟิกมีสี่ประเภท
- GL: API OpenGL ES ที่เรียบง่ายแต่ช้า
- GD: ทางเลือกที่เร็วกว่า ซึ่งสร้างคำสั่ง PICA200
- GR: API คำสั่ง PICA200 ที่ใกล้กับฮาร์ดแวร์ที่สุด
- GX: ไลบรารีอเนกประสงค์สำหรับจัดการ PICA200
- สื่อสำหรับรันเกมมีสามแบบ
- Gamecard: บรรจุ ROM ขนาด 128MB~4GB หรือ Flash สูงสุด 2GB และ backup memory สำหรับบันทึกข้อมูลได้
- eShop/SD Card: รองรับซอฟต์แวร์ดาวน์โหลด การพรีออร์เดอร์ และการแจกจ่าย DLC
- Local wireless: Download Play ถูกสืบทอดมายัง 3DS โดยเกมที่ถ่ายโอนมาจะถูกติดตั้งลง NAND และใช้เพียงหนึ่งสล็อต
- Virtual Console ให้บริการเกม DSiWare, NES/Famicom, Sega Game Gear, Game Boy และ Game Boy Color ผ่าน eShop
- ผู้ใช้ New 3DS สามารถเข้าถึงแคตตาล็อก Super Nintendo ได้ด้วย
- ส่วนใหญ่ทำงานเป็นแพ็กเกจแอปที่รวม ROM และ emulator ไว้
- เกม Game Boy Advance มีให้ใช้อย่างเป็นทางการเฉพาะผู้ใช้ Ambassador Program เท่านั้น
- ไม่ได้ทำงานผ่าน emulator บน ARM11 แต่รันแบบ native บน ARM7 ผ่าน AGB_FIRM
- เกม GBA จะถูกคัดลอกไปยัง FCRAM แล้วรีบูตเข้าสู่ AGB_FIRM เพื่อให้ ARM7 เข้าควบคุม
- อัปเดตเกมถูกแจกจ่ายผ่าน eShop และใช้กับเกมทุกประเภท ยกเว้น Download Play
ความปลอดภัย การป้องกันการทำสำเนา และโฮมบรูว์
- เป้าหมายหลักของความปลอดภัย 3DS คือ Game/CTR card reader และ ระบบปฏิบัติการ
- ข้อมูลภายในตลับ CTR อยู่ในรูปแบบ NCSD และ OS รับหน้าที่รับรองความถูกต้อง ตรวจสอบ และถอดรหัส
- trust chain จริงมุ่งเน้นไปที่ระบบปฏิบัติการและโครงสร้างการบูต
- มีฮาร์ดแวร์ความปลอดภัยเฉพาะทางรวมอยู่ด้วย
- แฟล็ก XN ของ ARM11 และ MPU ของ ARM9 จำกัดการรันโค้ดจากหน่วยความจำโดยพลการ
- ARM9 ทำงานคล้ายโปรเซสเซอร์เฉพาะด้านความปลอดภัย และเข้าถึงบล็อกการเข้ารหัส เช่น AES, RSA, PRNG
- เอนจิน AES รองรับการเข้ารหัส/ถอดรหัส AES-128, key slot สูงสุด 64 ช่อง และโหมด CTR/CCM/CBC/ECB
- เอนจิน RSA ทำการประมวลผล RSA แบบ public key และมี key slot 4 ช่อง
- OTP บรรจุคีย์เฉพาะเครื่องและ CTCert ส่วน eMMC CID ก็ถูกใช้ในการทำให้คีย์สับสนด้วย
- trust chain ไล่ต่อจาก Boot9, OTP, eMMC, NCSD, NCCH ไปจนถึงการตรวจสอบ Title
- NCSD และ NCCH ใช้ลายเซ็น RSA-2048 + SHA-256
- payload ของ NCCH ถูกเข้ารหัสด้วย AES-128 CTR
- Title ถูกลงนามด้วย RSA-2048, RSA-4096 หรือ ECDSA และ SHA-256
- Ticket ซึ่งเป็นไลเซนส์ดาวน์โหลดจาก eShop ก็ถูกลงนามด้วย RSA-2048 + SHA-256
- ในเชิงการใช้งานจริงก็มีจุดอ่อนอยู่ด้วย
- การตั้งค่า page table ของ AXI WRAM ใน Kernel11 ให้สิทธิ์อ่าน/เขียน/รันไว้อย่างกว้าง
- ก่อนระบบเวอร์ชัน 3.0.0 หน่วยความจำ OTP ไม่ถูกซ่อนไว้
- ไม่มีการแยกสิทธิ์ระหว่าง Process9 กับ Kernel9
- ไม่มี ASLR และไม่มีการป้องกันการดาวน์เกรดระบบ
- เว็บเบราว์เซอร์ที่ใช้ WebKit กลายเป็นเป้าหมายโจมตีซ้ำๆ
- โฮมบรูว์และการทำสำเนาในช่วงแรกเริ่มจากแฟลชการ์ด DS
- DSi และ 3DS พยายามบล็อกแฟลชการ์ดด้วย whitelist ซึ่งเป็นรายชื่อการ์ดที่ได้รับอนุญาต
- ผู้ผลิตใช้วิธี reprogram header ของคาร์ทริดจ์เพื่อให้ถูกระบุเหมือนเกมอื่นที่ได้รับอนุญาต
- ในปี 2013 Gateway3DS ปรากฏตัวในฐานะแฟลชการ์ด 3DS ตัวแรกที่ใช้งานได้จริง
- Blue Gateway เป็นแฟลชการ์ด DS ที่ติดตั้ง entry point ของ MSET exploit
- Red Gateway ใช้ FPGA และ microSD เพื่อทำสำเนาการ์ดเกมแท้
- Launcher.dat ทำหน้าที่เป็น payload ของ MSET exploit และ custom firmware
- Nintendo รับมือด้วยการอัปเดต
5.0.0-11แก้ MSET exploit เป็นการชั่วคราว7.0.0-13ปิด kernel exploit และเพิ่มโมดูล RSA เข้าไปใน trust chain ของการถอดรหัส NCCH9.3.0แพตช์ kernel exploit แบบไม่เปิดเผยของ Gateway3DS- Sky3DS ถูกใส่ blacklist ใน
11.0
- ระบบนิเวศโฮมบรูว์พัฒนาต่อด้วย libctru, nihstro, Ninjhax และ Homebrew Launcher
- Ninjhax ใช้ฟังก์ชัน QR code ของ Cubic Ninja เป็น entry point
- GSPWN เป็นช่องโหว่ที่เขียนทับ HOME Menu heap ด้วย GPU DMA
- Homebrew Launcher รันแอปโฮมบรูว์ที่ไม่มีลายเซ็นในรูปแบบ
.3dsx
- memchunkhax และ memchunkhax2 ทำให้ยกระดับสิทธิ์เป็น Kernel11 ได้
- การดัดแปลง
memchunk headerที่เก็บอยู่ใน FCRAM นำไปสู่การเข้าถึง AXI WRAM และการควบคุม Kernel11
- การดัดแปลง
- หลังมีการนำ arm9loader มาใช้ใน New 3DS ปี 2015 ก็เกิด arm9loaderhax ขึ้น
- เป็น exploit แบบถาวรที่ทำให้รันโค้ดโดยพลการด้วยสิทธิ์ Kernel9 ได้ตั้งแต่ช่วงบูต
- เครื่องมืออย่าง Luma3DS, Godmode9, Anemone3DS และ nds-bootstrap ถูกใช้อย่างแพร่หลาย
- ในปี 2016~2017 การวิเคราะห์ Boot9 นำไปสู่ sighax, boot9strap และ ntrboot
- sighax ใช้ข้อบกพร่องในการตรวจสอบลายเซ็น RSA-2048 ของ Boot9 เพื่อทำให้ trust chain ใช้งานไม่ได้
- boot9strap กลายเป็น bootloader ทางเลือกที่รองรับ payload จาก SD card หรือการบูตตามปกติ
- ntrboot ใช้แฟลชการ์ด DS, แม่เหล็ก และชุดปุ่มเพื่อรับสิทธิ์ Boot9
- ช่องโหว่เหล่านี้อยู่ใน Boot ROM จึงไม่สามารถแก้ด้วยการอัปเดตซอฟต์แวร์ได้
- วิธีการหลังปี 2018 พัฒนาไปในทิศทางที่ทำให้การติดตั้ง boot9strap ง่ายขึ้น
- seedminer สร้าง
movable.sedขึ้นใหม่จาก Friend Code, ชื่อไดเรกทอรีย่อยใน SD card และ brute force ระยะสั้น - BannerBomb3 ใช้ stack overflow ในแอป Settings ระหว่างการ parse DSiWare title banner
- มีการใช้เส้นทาง unSAFE_MODE และ safehax ที่อิง
SAFE_FIRMรวมถึง menuhax67 และ nimdsphax ที่อิง HOME Menu
- seedminer สร้าง
- อัปเดต
11.17.0ในเดือนพฤษภาคม 2023 แพตช์ BannerBomb3 ทำให้หนึ่งใน entry point สุดท้ายที่ไม่ต้องใช้อุปกรณ์เพิ่มเติมใช้การไม่ได้- หลังจากนั้นผู้ใช้ต้องใช้ exploit ของเกม 3DS ที่ถูกกฎหมาย, แฟลชการ์ด DS ที่รองรับ ntrboot หรือ WebKit exploit
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
น่าทึ่งจริง ๆ ที่มี GBA CPU ทางกายภาพอยู่ข้างในเมื่อรันเกม Gameboy Advance
ผมอ่านข่าวลือทั้งหมดตั้งแต่ก่อนวางจำหน่ายและสั่งจองรุ่นสีน้ำเงินไว้ล่วงหน้า เพราะช่วงแรกจ่ายไปประมาณ 250 ดอลลาร์ เลยได้เข้า Ambassador Program ด้วย หลังจาก Nintendo ลดราคาลงอย่างมากไม่นานหลังเปิดตัว ก็แจกเกมฟรีหลายเกมเป็นการขอโทษ รวมถึงเกมที่ไม่มีใน eShop ด้วย ซึ่งน่าพอใจมาก
การได้กลับมาเล่น Mario Kart Super Circuit ที่เคยเล่นตอนเด็กบนสไลด์แพดอันยอดเยี่ยมของ 3DS เหมือนฝันเลย และพอรู้ว่ามันรันบน CPU จริงเหมือน GBA ที่เคยใช้เมื่อก่อน ก็ยิ่งกลายเป็นความทรงจำที่พิเศษขึ้นไปอีก
Nintendo 3DS มีโครงสร้างระบบทั้งหมดของ Nintendo DSi อยู่ข้างใน และ DSi CPU ยังทำหน้าที่เป็น CPU ควบคุมระบบด้วย เดิมที DSi ก็เป็นโครงสร้างของ Nintendo DS ที่ส่วนใหญ่ถูกโอเวอร์คล็อกขึ้น ส่วน Nintendo DS สองรุ่นแรกก็มี ARM7TDMI ของ GBA รวมอยู่ด้วยเพื่อรองรับความเข้ากันได้ย้อนหลังผ่านสล็อต GBA
ในช่วง Ambassador Program Nintendo แจกเฟิร์มแวร์ AGB_FIRM ที่บูต 3DS เข้าโหมด Game Boy Advance และสำหรับโหมด Nintendo DS ก็มี TWL_FIRM ถ้าแฮ็ก 3DS ตอนนี้ ก็สามารถโหลดซอฟต์แวร์ GBA อื่น ๆ ได้ด้วย และถ้าไม่นับการพึ่งพาอุปกรณ์เสริม ก็รันเกม GBA ได้ด้วยความถูกต้องแทบสมบูรณ์แบบ
PlayStation 2 ต้องมีชิปอินพุต/เอาต์พุต และ Sony เลือกใช้ PS1 CPU เวลาเล่นเกม PS1 ก็ส่งการทำงานต่อไปทางนั้น
ถ้าจำไม่ผิด PlayStation 3 รุ่นแรก ๆ มีทั้ง CPU และ GPU ของ PS2 อยู่ข้างใน แต่เหมือนจะไม่ได้ทำอะไรมากนักตอนที่ไม่ได้เล่นเกม PS2 ต่อมาน่าจะถูกถอดออกเพื่อลดต้นทุนเมื่อเปลี่ยนไปใช้การจำลองแทน
GBA เองก็ใส่ GBC CPU ไว้เพื่อความเข้ากันได้ย้อนหลัง และสลับโหมดด้วยสวิตช์กายภาพที่ตัวคาร์ทริดจ์กดลงไป PS2 ก็เอา PS1 CPU มาใช้ซ้ำเป็นส่วนประกอบอินพุต/เอาต์พุตบนบอร์ด ทำให้ใช้กับความเข้ากันได้ย้อนหลังได้ และถ้าจำไม่ผิด ส่วนประกอบอื่น ๆ ก็อาศัยการช่วยจำลองด้วย
ต้องขอบคุณโพสต์ Reddit เลยซื้อได้ในราคาต่ำกว่าและยังได้เกมฟรีด้วย ถึงแทบไม่ได้เล่นเกมฟรีเหล่านั้น แต่ก็รู้สึกเหมือนหลอกระบบได้สำเร็จ
3DS ออกตัวได้ช้ามาก แต่สุดท้ายก็กลายเป็นหนึ่งในคอนโซลที่ผมชอบที่สุดเป็นการส่วนตัว
ผมไม่เคยมี N64 มาก่อน เลยได้เล่น Ocarina of Time และ Majora’s Mask เป็นครั้งแรกจากรีมาสเตอร์ 3D ที่ยอดเยี่ยม ความเข้ากันได้ย้อนหลังกับ DS แบบเต็มรูปแบบก็เป็นข้อดีใหญ่ และถ้าอยากเลี่ยงการขยายภาพแบบสเกลไม่เป็นจำนวนเต็มที่ดูไม่สวยบนหน้าจอ ต้องกด Start ค้างไว้ตอนเปิดเกม
ขอบเขตของโฮมบรูว์และการจำลองที่รองรับบนเครื่องที่ทำซอฟต์ม็อดแล้วก็กว้าง ทำให้เป็นเครื่องเล็ก ๆ ที่น่าหลงใหลมาก ผมยังชอบดีไซน์ของ New 3DS รุ่นเล็กมากที่สุดรุ่นหนึ่งตลอดกาล เลยซื้อแผ่นหน้าสำหรับเปลี่ยนหลายแบบที่ดูเท่และขี้เล่น
อีกอย่างที่ดีมากคือ ตอนแบตเตอรี่เริ่มเสื่อม ผมสามารถโทรหา Nintendo แล้วซื้อแบตเตอรี่แท้ใหม่สองก้อนสำหรับเครื่องของผมกับของภรรยาได้ ราคาก้อนละประมาณ 15 ปอนด์ และเปลี่ยนได้โดยไม่ต้องแกะเครื่อง เป็นวิธีที่ทุกวันนี้ไม่ค่อยเห็นแล้ว
ช่วงแพนเดมิก ด้วย ADHD สุดท้ายผมซื้อ New Nintendo 3DS XL ไปถึง 3 เครื่อง
เครื่องหนึ่งนำเข้าจากญี่ปุ่นแล้วเปลี่ยนเป็น ROM สหรัฐฯ ผมชอบมากสำหรับพกเดินทาง เอฟเฟกต์ 3D เจ๋งดี และชอบที่ปิดได้ด้วย แถมอายุแบตเตอรี่ก็ดีเยี่ยม
แต่ก็เหมือนงานอดิเรกทุกอย่าง พอของเริ่มหายากก็เกิดความอยากสะสม และเราคงเล่นคอนโซล 3 เครื่องพร้อมกันไม่ได้ ตอนนี้คงต้องปล่อยบางเครื่องแล้ว
ก่อนหน้านี้ผมซื้อ 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 ต้องดาวน์เกรดเฟิร์มแวร์ไปเป็น 3.0.0 เพื่อ ดึง OTP แต่ 3.0.0 ไม่ได้เข้ากันได้อย่างสมบูรณ์กับ New 3DS ดังนั้นบนรุ่นนั้น แค่ปิดฝาเครื่องขณะอยู่ในสถานะเฟิร์มแวร์เก่า คอนโซลก็จะกลายเป็นอิฐถาวรแล้ว เป็นยุคที่ดีจริง ๆ
ชอบซีรีส์นี้มากจริง ๆ
ถ้าอยากลองทำโฮมบรูสำหรับ 3DS ให้ดู https://github.com/devkitPro/libctru
หวังว่า Nintendo จะไม่มีวันเลิกทำ ประสบการณ์เครื่องเกมพกพา ที่ยัดคอนโซลทั้งเครื่องไว้ในมือ
และหวังให้อุตสาหกรรมเกมพกพาอินดี้ที่ใหญ่กว่านี้เติบโตด้วย
สิ่งที่ดูเหมือนจุดจบที่ใกล้เข้ามาของอุปกรณ์พกพาระดับไฮเอนด์ก็คือ cloud gaming รวมถึงวิธีรันคอนโซลที่บ้านแล้วสตรีมมายังมือถือด้วย
สุดท้ายก็ขึ้นอยู่กับว่าทุกคนจะเลือกอะไรด้วยกระเป๋าเงินของตัวเอง คิดถึง GBC
คิดว่า Switch ประสบความสำเร็จมากกับ เกมอินดี้ 2D อย่าง Stardew Valley, Hades, Dead Cells การออกแบบเกมแบบนั้นใช้ได้ดี และกราฟิก 2D ที่ดีไม่มีวันดูเก่า
สงสัยเหมือนกันว่าผู้คนจะยอมจ่ายเงินให้กับรูปแบบสตรีมมิงที่ไม่เป็นมิตรต่อผู้บริโภค เพียงเพื่อเล่นเกมดี ๆ ที่แม้แต่อุปกรณ์สเปกต่ำมากก็รันได้หรือไม่
latency ของ cloud gaming และการต้องพึ่งพาการเชื่อมต่อเครือข่ายที่เสถียรยังเป็นปัญหาสำหรับคนจำนวนมาก อีกทั้งเกมเมอร์ส่วนใหญ่ก็คงไม่อยากจ่ายค่าสมาชิกเพิ่มอีก และสุดท้าย cloud gaming ก็น่าจะพ่วงมากับ subscription อยู่ดี
ถ้าต้องมีฮาร์ดแวร์ไว้เล่นอยู่แล้ว ก็ใช้อุปกรณ์พกพาดี ๆ ไปเลย ผู้ผลิตพีซีอย่าง Asus ก็ทำอุปกรณ์พกพาอย่าง RoG Ally อยู่ และ Switch 2 กับ Steam Deck 2 ก็แทบจะถือว่าแน่นอนแล้ว กลับกัน อุปกรณ์พกพาดูเหมือนจะดีขึ้นเรื่อย ๆ และส่วนแบ่งตลาดก็เพิ่มขึ้นด้วย
เกมสมัยนี้ไม่ได้มีความเอ็กซ์คลูซีฟแรงเท่าเมื่อก่อน และถ้าบริษัทไม่ได้รวมเครื่องตั้งโต๊ะกับเครื่องพกพาเข้าด้วยกันอย่างแนบแน่นถึงขั้นเดียวกับ Nintendo ก็เท่ากับกำลังสร้างการแบ่งแยกที่ไม่จำเป็น
ลองคิดดูว่าถ้า Nintendo ออกคอนโซลตั้งโต๊ะแยกจาก Switch ด้วย โครงสร้างนั้นคงไม่ยั่งยืน
น่าสนุกดีที่ผู้คนชื่นชม “ความอัจฉริยะ” และ “นวัตกรรม” ของ Nintendo ที่ทำอุปกรณ์พกพาซึ่งเสียบทีวีเล่นได้ ในขณะที่ PSP Go กับ TV dock ก็เหมือนกำลังพูดว่า “เฮ้ พวกนาย จำฉันไม่ได้เหรอ?” ส่วนตัวชอบ PSP Go มาก เพราะมันเล็กและน่ารักจริง ๆ
กำลังคิดว่าจะลองทำคอนโซลพกพาให้ลูกสาวเป็นโปรเจกต์สนุก ๆ
บทความแบบนี้ยอดเยี่ยมจริง ๆ
เคยสนใจสถาปัตยกรรม GB/GBC และอยากทำเกมสำหรับแพลตฟอร์มนั้น แต่ยังไม่เคยเจอบทความนี้ ขอบคุณที่เอามาโพสต์ และขอบคุณ Rodrigo ที่เขียนให้