1 คะแนน โดย GN⁺ 2024-04-23 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ตลับ Super Nintendo ไม่ได้เป็นแค่สื่อบันทึกข้อมูลธรรมดา แต่เป็นฮาร์ดแวร์ที่รวม ชิปป้องกันการคัดลอก CIC, SRAM และโปรเซสเซอร์เสริมไว้เพื่อขยายความสามารถของเครื่องคอนโซล
  • ความจุ ROM ในยุคนั้นถูกโปรโมตเป็น หน่วยบิต โดยจากการสำรวจเกม 3,378 ไตเติล พบว่า Star Ocean และ Tales of Phantasia มีขนาด 48Mb ส่วน Super Mario World มีขนาด 4Mb
  • ฟังก์ชันการบันทึกข้อมูลอาศัย SRAM ที่คงข้อมูลด้วยแบตเตอรี่ และมีกรณีอย่าง PCB ของ Zelda III ที่ใส่ตัวถอดรหัสแอดเดรส MAD-1 มาด้วยเพื่อจัดการการเข้าถึง ROM/RAM
  • มี ชิปเสริมทั้งหมด 13 ชนิด ถูกใช้ในเกม 72 เกม โดยให้ตลับรับหน้าที่อย่างการเร่ง CPU, ประมวลผลสไปรต์, คลายการบีบอัด, คำนวณทางคณิตศาสตร์ และการแรสเตอร์ไรซ์โพลิกอน
  • ชิปเหล่านี้ช่วยขยายขีดความสามารถด้านการนำเสนอของเกมอย่างมากในยุคนั้น แต่ก็ทิ้งภาระด้าน การพัฒนาอีมูเลเตอร์ ไว้ยาวนาน จากกรณีที่ต้องใช้ graphic pack เพราะยังไม่รู้โครงสร้างภายในของ S-DD1 เป็นต้น

โครงสร้างพื้นฐานของตลับ: CIC, ROM, SRAM

  • ตลับ Super Nintendo สามารถบรรจุได้ไม่เพียงคำสั่งและแอสเซ็ตในชิป ROM เท่านั้น แต่ยังรวม ชิปป้องกันการคัดลอก CIC, SRAM และโปรเซสเซอร์เสริมได้ด้วย
  • CIC ทำงานด้วยวิธีที่ชิปฝั่งคอนโซลและชิปฝั่งตลับสื่อสารกันแบบ lockstep
    • หาก CIC ฝั่งคอนโซลตรวจพบสถานะผิดปกติ ก็จะรีเซ็ตโปรเซสเซอร์ทั้งหมด
    • ไม่ใช่ตลับ SNES ทุกอันที่จะมี CIC โดยเกมนอกลิขสิทธิ์ Super 3D Noah's Ark ไม่มี CIC
    • Super 3D Noah's Ark ต้องเสียบเกมเข้ากับคอนโซลก่อน แล้วจึงนำตลับทางการมาเสียบทับด้านบน โดยฝั่ง Noah's จะส่งต่อบัสไลน์ผ่าน CIC ของเกมทางการ
  • ความจุ ROM ในเวลานั้นระบุเป็น หน่วยบิต ไม่ใช่ไบต์
    • Zelda III ถูกโปรโมตว่าเป็น ROM ขนาด 8Mb ไม่ใช่ 1,048,576 ไบต์
    • รายการที่สำรวจครอบคลุม 3,378 ไตเติล ในโซน USA/Japan/Europe
    • Star Ocean และ Tales of Phantasia มีขนาด 48Mb หรือ 6,291,456 ไบต์ จัดอยู่ในกลุ่มที่ใหญ่ที่สุด
    • Super Mario World ใช้ ROM ขนาด 4Mb หรือ 524,288 ไบต์
  • บางเกมที่มีระบบบันทึกใช้ SRAM ที่คงพลังงานด้วยแบตเตอรี่
    • เมื่อปิดเครื่องคอนโซล SRAM จะเข้าสู่โหมดพลังงานต่ำเพื่อลดการใช้ไฟ
    • PCB ของ Zelda III มี CIC (D413A) ที่ U4, ROM ขนาด 0x80000 (524,288 ไบต์) ที่ U1, SRAM รุ่น LH5268AF-10TLL 64Kbit (8KiB) ที่ U2 และตัวถอดรหัสแอดเดรสหน่วยความจำ MAD-1 ที่ U3

ขอบเขตของชิปเสริมและ SA-1

  • โปรเซสเซอร์เสริมที่มีชื่อเสียงที่สุดคือ Super FX ซึ่งใช้ใน Star Fox ปี 1993 แต่ก่อนหน้านั้นก็มีการใช้ชิป EC แล้ว
  • โดยรวมแล้วมี EC ทั้งหมด 13 ชนิด ถูกใช้ในเกม 72 เกม
  • SA-1 หรือ Super Accelerator 1 เป็นชิปเสริมตัวแทนสำคัญที่อยู่ในตลับ 34 เกม
    • ใช้ CPU 65C816 แบบเดียวกับ CPU หลักของ SNES แต่ทำงานเร็วกว่า 4 เท่าที่ 10.74MHz
    • มี SRAM ขนาด 2KiB และ CIC แบบรวมในตัว
    • PCB ของ Super Mario RPG ไม่มี CIC แยกต่างหาก โดย U3 คือ SA-1, U1 คือ ROM และ U2 คือ SRAM ที่มีตัวถอดรหัสรวมในตัว
    • SA-1 รับ System Master clock จากพอร์ตตลับโดยตรงโดยไม่ต้องมีออสซิลเลเตอร์แยก แล้วหารครึ่งภายในเพื่อทำงานที่ 21.4772700MHz / 2 = 10.74MHz
  • SA-1 จะอยู่ในสถานะ stop ตอนเริ่มทำงาน และ CPU ของ SNES จะสร้าง Reset Vector แล้วจึงปลุก SA-1 ให้ทำงานต่อ
    • Instruction Pointer เริ่มต้นของ SA-1 ถูกดึงมาจาก Reset Vector เฉพาะของมัน
    • มีโหมดการทำงาน 3 แบบคือ Accelerator, Parallel Processing และ Mixed Processing
    • ในรูปแบบที่แรงที่สุด CPU ของ SA-1 และ CPU ของ Super NES จะทำงานพร้อมกัน ทำให้ประสิทธิภาพของ Super Accelerator System สูงกว่า Super NES เดิม 5 เท่า
  • พลังประมวลผลที่เพิ่มขึ้นถูกนำไปใช้กับแอนิเมชันและการตรวจจับการชนของสไปรต์ทั้ง 128 ตัวที่ PPU รองรับ รวมถึงการหมุนและสเกลสไปรต์แบบเรียลไทม์ก่อนเขียนกลับลง PPU VRAM
    • ตลับเดโม Nintendo SA-1 แสดงให้เห็นการปรับปรุงเหล่านี้
    • ชุมชนเกมเรโทรลดอาการ slowdown ของเกมเก่าด้วยโปรเจกต์อย่าง Eliminating slowdown in Super Mario World, Gradius III slowdown removal และ Contra III slowdown removal
    • การแปลงเกมให้ใช้ SA-1 ดูค่อนข้างซับซ้อน เพราะต้องรีแมปการเข้าถึง RAM/ROM เป็นพิเศษ และยังชวนสงสัยเมื่อเอกสาร SA-1 ระบุว่า “SNES กับ SA-1 ใช้ memory mapping เดียวกัน”
    • ในปี 2019 มีความพยายามรีแมปและแปลงเกม SNES ให้เป็น SA-1 เพิ่มเติมแบบอัตโนมัติผ่าน SA-1 Collection Project

ชิปเสริมด้านกราฟิก การบีบอัด และคณิตศาสตร์

  • CX4 เป็นชิปของ Capcom ที่ใช้กับ Mega Man X2 และ Mega Man X3
    • สามารถจัดการการเรนเดอร์ไวร์เฟรม 3D, การคำนวณทางคณิตศาสตร์หลายชนิด, และการสเกล/หมุนสไปรต์ก่อนเขียนลง VRAM
    • ดูตัวอย่างได้จาก อินโทร และ บอสไฟต์ ของ MMX2
    • CX4 ไม่ได้มีแค่ไวร์เฟรม แต่ยังมี sprite functions, propulsion, vector, triangle, trigonometric functions, result tables และ coordinate transform functions โดยใน MMX2 และ MMX3 มันจัดการสไปรต์ทั้งหมด
    • PCB ของ Mega Man X2 มี CIC ที่ U4, ROM 8M ที่ U1, ROM เพิ่มเติมที่ U2, CX4 ที่ U3 และออสซิลเลเตอร์ 20MHz ที่ X1
  • S-DD1 เป็นชิปคลายการบีบอัดสไปรต์ ซึ่งสามารถส่งข้อมูลเข้า PPU VRAM ได้โดยตรง
    • ใช้ในสองเกมคือ Star Ocean และ Street Fighter Alpha 2
    • เคยมีข่าวลือว่าช่วงจอดำก่อนเริ่มรอบของ Street Fighter Alpha 2 เกิดจาก S-DD1 แต่ตามคำอธิบายของ Modern Vintage Gamer ปัญหาจริงคือการส่ง sound sample ไปยัง DSP RAM
    • PCB ของ Street Fighter Alpha 2 มี ROM ขนาด 4MiB ที่ U1 และ S-DD1 ที่คลายแอสเซ็ตแบบทันที โดย CIC ถูกฝังรวมอยู่ใน S-DD1 จึงไม่มีชิปแยก
  • DSP-1 ครอง 16 จาก 19 เกมที่รองรับตระกูล DSP และถูกใช้ใน Super Mario Kart กับ Pilotwings
    • แม้ DSP ในชื่อจะย่อมาจาก Digital Signal Processor แต่ก็ถูกมองว่าตั้งชื่อไม่ตรงนัก เพราะมันไม่ได้ประมวลผลสัญญาณต่อเนื่องแบบ DSP ทั่วไป
    • ตามคู่มือนักพัฒนา DSP-1 ทำงานในแบบ blocking mode ดังนั้นระหว่างที่ DSP ประมวลผลข้อมูล CPU ของ Super NES จะต้องรอ
    • มันมีคำสั่งสำหรับการคูณ 16 บิตความเร็วสูง, reciprocal, sin/cos projection, vector size และ rotation ซึ่งสำคัญต่อการเขียนโปรแกรม HDMA และการอัปเดตมุมมอง 3D ของ Mode 7
    • PCB ของ Super Mario Kart มี CIC ภายนอก, ROM, SRAM สำหรับบันทึกข้อมูล, ตัวถอดรหัสแอดเดรส MAD-1, แบตเตอรี่ และออสซิลเลเตอร์สำหรับการทำงานที่ 8MHz
    • DSP-1, DSP-1a และ DSP-1b มีการแก้บั๊กและปรับปรุงกระบวนการผลิต แต่พฤติกรรมต่างกันเล็กน้อยจนทำให้เครื่องบินชนพื้นในเดโมของ Pilotwings
  • ชิปขนาดเล็กอื่น ๆ ก็ถูกใช้แบบจำกัดในบางเกมเท่านั้น
    • DSP-2 ถูกใช้ในเกมเดียวคือ Dungeon Master สำหรับแปลงรูทีนจาก Atari ST และดูเหมือนมีไว้ช่วยสเกลสไปรต์เป็นหลัก
    • DSP-3 ใช้ในเกมเดียวคือ SD Gundam GX
    • DSP-4 ใช้ในสองเกมคือ Top Gear 3000 และ The Planet's Champ TG 3000
    • OBC-1 ใช้ในเกมเดียวคือ Metal Combat: Falcon's Revenge เคยมีข่าวลือว่าใช้ควบคุมสไปรต์ แต่มีข้อถกเถียงใน nesdev.org
    • S-RTC เป็นชิปสำหรับติดตามนาฬิกาเรียลไทม์ในเกมเดียวคือ Daikaijuu Monogatari II และยังไม่ชัดเจนว่าทำไมนักพัฒนาของ Hudson Soft จึงต้องการการติดตามแบบเรียลไทม์
    • SPC7110 ของ Epson เป็นชิปคลายข้อมูลบีบอัดที่ใช้ใน Tengai Makyou Zero, Momotaro Dentetsu Happy และ Super Power League 4 โดย Super Power League 4 มีฟังก์ชันนาฬิกาเรียลไทม์ด้วย
    • ตระกูล ST ของ SETA Corporation ว่ากันว่ามุ่งเพิ่มความสามารถด้าน AI ของเกม โดย ST-010 ใช้กับ Exhaust Heat 2, ST-011 ใช้กับ Hayazashi Nidan: Morita Shougi และ ST-018 ใช้กับ Hayazashi Nidan Morita Shougi 2 เท่านั้น
    • ST-018 ดูเหมือนจะเป็น ARM CPU ที่เก็บคำสั่งไว้ใน ROM ภายใน

ตระกูล Super FX และการดัดแปลงโดยชุมชน

  • GSU-1 ถูกใช้ในห้าเกมคือ Star Fox, Stunt Race FX, Vortex, Dirt Racer และ Dirt Trax FX
    • เป็นหนึ่งในชิปเสริมที่มีเอกสารครบถ้วนที่สุด โดยมีทั้งวิกิ, บทสอน และ Super Nintendo Developer Manual Book II
    • ทำงานที่ 10.74MHz โดยหารครึ่ง master clock 21.47MHz ภายใน
    • ด้วย instruction cache ภายในขนาด 512 ไบต์ มันจึงทำงานได้โดยไม่แย่งทรัพยากรจาก CPU ของ SNES มากเกินไป
    • เมื่อทำงานเสร็จสามารถส่ง interrupt ไปยัง C-CPU ซึ่งเป็น CPU ฝั่งคอนโซลได้
  • ในขณะที่ PPU1/PPU2 ของ SNES เน้น tilemap และ sprite นั้น Super FX เด่นด้านการเรนเดอร์พิกเซลและการแรสเตอร์ไรซ์โพลิกอน
    • โดยปกติจะเรนเดอร์ลงเฟรมบัฟเฟอร์ที่อยู่ในตลับ
    • เนื้อหาในเฟรมบัฟเฟอร์จะถูกส่งเข้า VRAM ระหว่าง VSYNC
    • PCB ของ Star Fox มี GSU-1 ที่ U3, CIC ที่ U5, 74LS139 ที่ U4 และ ROM ที่ U1 ส่วน U2 เป็น SRAM ขนาด 32KiB แบบไม่มีแบตเตอรี่
    • SRAM นี้ไม่ได้มีไว้สำหรับ savegame แต่ถูกใช้บางส่วนเป็นที่เก็บเฟรมบัฟเฟอร์ของ Super FX
  • ชุมชน SNES ลงแรงกับ GSU-1 เช่นเดียวกับ SA-1 และพยายามปรับปรุงเกมเก่าให้ได้มากที่สุดผ่านโปรเจกต์อย่าง Project Super FX
  • GSU-2 คือ GSU-1 ที่ทำงานเต็มสปีด 21.47MHz และถูกใช้ในสามเกมคือ Super Mario World 2: Yoshi's Island, DOOM และ Winter Gold
    • มีการทดลองของชุมชนที่เปลี่ยน GSU-1 ในตลับ Star Fox เป็น GSU-2 เพื่อแสดงให้เห็นการเพิ่มขึ้นของประสิทธิภาพ
    • Randy Linden ผู้พอร์ต DOOM ลง SNES ทำ reverse engineering ทุกอย่างเองโดยไม่มีทั้งเอกสารของชิป GSU และซอร์สโค้ดของ DOOM
    • DOOM เวอร์ชัน SNES เป็นพอร์ตคอนโซลเพียงเวอร์ชันเดียวที่ใช้เลเวลจาก PC ได้ โดยคอนโซลอื่นต้องลดความซับซ้อนของ geometry ลง
    • Yoshi's Island ใช้ GSU-2 เป็นหลักกับการสเกลและยืดสไปรต์ แล้วเขียนสไปรต์ที่ถูกดัดแปลงกลับเข้า PPU VRAM
    • PCB ของ Yoshi's Island มีแบตเตอรี่ จึงใช้ SRAM สำหรับทั้งเฟรมบัฟเฟอร์และสถานะการบันทึก
    • DOOM ถูกโอเวอร์คล็อกไปที่ 32MHz ทำให้อัตราเฟรมเพิ่มจาก 10~11fps เป็น 14~15fps
  • MSU-1 ไม่ใช่ชิปที่อยู่ในตลับที่วางจำหน่ายจริง
    • Near ออกแบบมันเพื่อให้ SNES สามารถสตรีมเสียงคุณภาพระดับ CD, เล่น FMV และเข้าถึง RAM ได้สูงสุด 4GB
    • กลุ่มเป้าหมายคือชุมชนม็อดเกม และสามารถดูผลลัพธ์ได้ใน Enhanced Zelda III: A link to the past และ Enhanced Another World

ภาระที่ทิ้งไว้กับการพัฒนาอีมูเลเตอร์

  • ชิปเสริมช่วยยกระดับประสบการณ์ของผู้เล่นอย่างมากและลดต้นทุนของผู้จัดจำหน่าย แต่ต่อมากลับกลายเป็นโจทย์ยากสำหรับ นักพัฒนาอีมูเลเตอร์
  • เกมบางเกมที่พึ่งพา EC แปลก ๆ เพิ่งจะถูกอีมูเลตได้อย่างถูกต้องในปี 2012
  • ในช่วงแรก เนื่องจากยังไม่ทราบโครงสร้างภายในของ S-DD1 เกมอย่าง Street Fighter Alpha 2 จึงถูก “อีมูเลต” ด้วยวิธีที่ต้องใช้ graphic pack ของสไปรต์ที่คลายการบีบอัดไว้ล่วงหน้า
  • การอิมพลีเมนต์ชิปเหล่านี้ต้องอาศัย reverse engineering อย่างมาก
    • ชิปบางตัวมีฟังก์ชันที่ฮาร์ดโค้ดไว้จนต้องใช้ de-capping
    • ชิปที่เก็บคำสั่งไว้ใน ROM ภายใน เช่น ชิปที่ใช้ ARM เป็นฐาน ทำให้อีมูเลเตอร์ต้องได้รับไฟล์ BIOS มาด้วย
  • แม้ถึงปี 2020 การอีมูเลตชิปที่หายากที่สุดบางตัวยังไม่เสร็จสมบูรณ์

1 ความคิดเห็น

 
GN⁺ 2024-04-23
ความคิดเห็นจาก Hacker News
  • ชอบมากที่ คาร์ทริดจ์ ของคอนโซลยุคก่อนแทบจะเหมือนการ์ดขยาย PCI ของพีซี
    มันเชื่อมต่อกับบัสโดยตรง จึงทำได้แทบทุกอย่าง แต่น่าเสียดายที่แนวทางแบบนี้จบลงหลัง GameBoy Advance และตั้งแต่ Nintendo DS ก็กลายเป็นอุปกรณ์เก็บข้อมูลล้วน ๆ มากขึ้น
    ดังนั้นทุกวันนี้จึงทำส่วนขยายสมัยใหม่แปลก ๆ ได้ เช่น ชิปเรย์เทรซิงhttps://www.youtube.com/watch?v=2jee4tlakqo และยังมี ชิปขยาย MSU1 ที่ดูเหมือนจะไม่มีอยู่เป็นชิปจริง ๆ แต่มีเฉพาะในอีมูเลเตอร์ซอฟต์แวร์
    ในทางทฤษฎีผลิตได้อยู่แล้ว ดังนั้นก็น่าจะทำคาร์ทริดจ์ SNES ของจริงสำหรับ Road Blasterhttps://www.youtube.com/watch?v=BvIXUOr4yxU ได้
    ในบทความเอง รายการระบุ “Street Fighter Zero 2” เป็น USA ROM แต่ Street Fighter Zero เป็นชื่อที่ใช้เรียก Street Fighter Alpha ในญี่ปุ่น ดังนั้น Zero 2 ควรเป็นเวอร์ชันญี่ปุ่นของ Alpha 2

    • ยังมี การอีมูเลตย้อนกลับ NES ที่บ้าสุด ๆ ด้วย
      ในกรณีนี้ เมื่อแทนคาร์ทริดจ์ด้วยคอมพิวเตอร์สมัยใหม่แล้ว ก็เกิดเรื่องประหลาด ๆ ขึ้น เช่น ให้ NES ทำการนำเสนอแบบ PowerPoint เกี่ยวกับอารมณ์ขัน
      https://www.youtube.com/watch?v=ar9WRwCiSr0
    • ก็ไม่ถูกทั้งหมดนะ คาร์ทริดจ์ DS บางตัวอย่างน้อยก็มี ตัวรับอินฟราเรด เช่น Pokemon HeartGold และเท่าที่รู้ Learn with Pokémon: Typing Adventure ถึงกับเพิ่ม Bluetooth ผ่านการ์ดด้วย
      ดังนั้นมันยังมีความสามารถจำกัดในการเพิ่มฟังก์ชันอยู่ และถึงจะไม่น่าสนใจเท่าการเพิ่ม CPU แต่ใน GBA เองก็ไม่ได้มีกรณีที่ทำอะไรสุดโต่งแบบนั้นมากมายเหมือนกัน
    • ทำให้อยากรู้ว่าเกมอย่าง Pokemon SoulSilver ที่มี ตัวส่งอินฟราเรด อยู่ในคาร์ทริดจ์นั้นทำได้อย่างไร
      อยากรู้ว่าเขาวางแผนไว้สำหรับกรณีใช้งานเฉพาะหรือเปล่า หรือว่ามีช่องทางแยกต่างหากสำหรับชิ้นส่วนขยายคาร์ทริดจ์แบบจำกัด
    • เท่าที่รู้ คาร์ทริดจ์แฟลช SNES รุ่นใหม่รองรับ MSU1 ได้ MiSTer FPGA ก็รองรับ MSU1 ด้วย
    • การโลคัลไลซ์ Street Fighter เละเทะมาก ไม่เข้าใจว่าทำไมถึงเอาชื่อเดียวกันไปสลับแปะให้ตัวละครคนละตัว
  • รายละเอียดอีกอย่างที่ตกหล่นไปคือ แม้แต่คาร์ทริดจ์ที่ไม่มีชิปขยายก็ยังมี ระดับประสิทธิภาพ ต่างกัน
    CPU ของ SNES ทำงานในเชิงชื่อที่ 3.58MHz แต่ถ้าจะให้วิ่งด้วยความเร็วนั้นจริง ๆ ต้องเสียบคาร์ทริดจ์ “FastROM” อยู่ Nintendo ยังเสนอรูปแบบ “SlowROM” ที่ถูกกว่าให้ผู้จัดจำหน่ายด้วย ซึ่งในกรณีนี้ CPU จะลดลงเหลือ 2.68MHz
    ยังมีชุมชนม็อดเดอร์ที่พัฒนาแพตช์เพื่อเปลี่ยนเกม SlowROM ให้เป็นเกม FastROM เพื่อลดความหน่วงด้วย เคยอ่านบทความว่าบางเกม SlowROM ดูเหมือนเดิมทีพัฒนาสำหรับ FastROM แต่ถูกเปลี่ยนเป็น SlowROM ในนาทีสุดท้ายเพราะผู้จัดจำหน่ายต้องการลดต้นทุน

    • Out Of This World เป็นกรณี SlowROM/FastROM ที่ผู้พัฒนา ไม่ได้รับอนุญาตให้ใช้ FastROM
      ถ้าจำไม่ผิด ในกรณีนั้นมีการอ้างว่าการใช้ SlowROM ประหยัดได้ถึง 50 เซนต์ต่อคาร์ทริดจ์
    • สิ่งที่น่าทึ่งเกี่ยวกับ SNES คือแม้แต่ RAM ในตัวก็ยังเข้าถึงด้วย คล็อก 3.58MHz ตามชื่อไม่ได้ และตอนนั้นระบบก็ยังช้าลงด้วย
      คู่แข่งอย่าง TurboGrafx-16 ปกติวิ่งที่ 7MHz และใช้ CPU ตระกูล 6502 ที่ต้องการ timing หน่วยความจำใกล้เคียงกัน ผมเลยสับสนมาตลอดว่าทำไม SNES ถึงตระหนี่เรื่องความเร็วขนาดนั้น
      ถึงอย่างนั้น TurboGrafx ก็ล้มเหลวในโลกตะวันตก ส่วน SNES ประสบความสำเร็จทั่วโลก แปลว่ามันต้องทำอะไรถูกสักอย่าง
    • ผมสงสัยมาตลอดว่านั่นเป็น การแบ่งไลเซนส์ ที่ Nintendo ตั้งขึ้นตามใจเอง หรือว่ามีความแตกต่างจริง ๆ ในความเร็วการอ่านข้อมูลของคาร์ทริดจ์
      สุดท้ายแล้วคาร์ทริดจ์ SNES ทั้งหมดก็มี mask ROM อยู่ดี
    • สงสัยว่ามันมีเหตุผลทางฮาร์ดแวร์หรือเปล่า หรือว่า Nintendo แค่ขูดรีดลูกค้าและทำให้ชีวิตเกมเมอร์แย่ลง
    • ในบทความพูดถึง LoROM กับ HiROM ดังนั้นคงกำลังพูดเรื่องเดียวกันอยู่
  • อยากให้ผู้พัฒนายังคงเขียนรายละเอียดพวกนี้ลงบล็อกใน รูปแบบบทความ แทนที่จะทำเป็นวล็อก YouTube
    ใส่รายละเอียดได้มากมายในไม่กี่ KB
    “Super Mario World” ยังเป็นเกมระดับตำนานที่ยอดเยี่ยมที่สุด ใส่ตัวละคร สไปรต์ และด่านที่น่าทึ่งไว้ได้ในแค่ 360KB

    • ขนาดไฟล์ที่ระบุในไซต์นั้นผิด Super Mario World มีขนาด 512KB และถ้าตัด padding ท้ายไฟล์ออกจะเหลือ 508KB
      ต้องบีบอัดเป็นรูปแบบ ZIP เท่านั้นถึงจะเหลือประมาณ 360KB
    • Super Mario World ก็ยอดเยี่ยม แต่ผมคิดว่าเกมที่ดีที่สุดของ SNES คือ Donkey Kong Country 2
      เพลงยอดเยี่ยม การควบคุมแม่นยำ กราฟิกมีเสน่ห์ ทำทุกด้านของเกมแพลตฟอร์มได้ถูกต้อง
      Terranigma ก็เกือบอยู่ระดับเดียวกัน และตามมาตรฐานของผม Super Mario World น่าจะอยู่อันดับ 3
    • ผมมองว่าเหตุผลใหญ่ที่ผู้พัฒนาเลือก YouTube แทนการเขียน คือหลายครั้ง การขโมยคอนเทนต์วิดีโอยากกว่า
      ข้อความสามารถถูก scrape ไป เปลี่ยนคำไม่กี่คำ แล้วนำกลับมาใช้ซ้ำในเว็บโฆษณา SEO ได้
    • “Pitfall!” ของ Atari VCS ใส่ฉากเกมที่ต่างกันโดยสิ้นเชิง 255 ฉากไว้ใน คาร์ทริดจ์ 4KB ได้ :)
  • สงสัยว่าถ้าใช้ความสามารถในการใส่ “ชิปขยาย” ลงในคาร์ทริดจ์ด้วยเทคโนโลยีสมัยใหม่ จะทำอะไรได้บ้าง
    มีการบอกว่า SuperFX มี framebuffer ของตัวเอง และคัดลอกทั้งหมดนั้นไปยัง VRAM
    ถ้าอย่างนั้นในเชิงเทคนิค เป็นไปได้ไหมที่จะ ใส่ SoC ที่ทรงพลังอย่างไร้สาระลงในคาร์ทริดจ์ ให้มันเรนเดอร์กราฟิกสมัยใหม่ในความละเอียดของ SNES แล้วคัดลอกเฟรมผลลัพธ์ไปยัง VRAM ของ SNES?
    อยากรู้ว่าขีดจำกัดอยู่ตรงไหน

  • ส่วนที่ว่า “Randy Linden ผู้เขียน DOOM สำหรับ SNES ไม่สามารถเข้าถึงเอกสารของชิป GSU หรือซอร์สโค้ดของ DOOM ได้เลย เขารีเวิร์สเอนจิเนียร์ทั้งหมด” นั้นน่าประทับใจในเชิงเทคนิค แต่ก็สงสัยว่าทำไมถึงต้องทำแบบนั้น

    • มีรายละเอียดอยู่ใน Doom Wiki: https://doomwiki.org/wiki/Super_NES
      Randy Linden ซึ่งเป็นโปรแกรมเมอร์เพียงคนเดียวของพอร์ตนี้หลงใหลในเกม และในตอนแรกเริ่มพอร์ต Doom ลง Super NES ด้วยตัวเอง
      ในเวลานั้นซอร์สโค้ดของ Doom ยังไม่ได้เปิดเผยต่อสาธารณะ ดังนั้น Linden จึงอ้างอิง Unofficial Doom Specs เพื่อทำความเข้าใจโครงสร้าง lump ของเกมอย่างละเอียด ส่วนทรัพยากรถูกดึงออกมาจาก IWAD แต่บางส่วนไม่ได้ถูกใช้เนื่องจากข้อจำกัดทางเทคนิค
      จากบทสัมภาษณ์ เนื่องจากขาดระบบพัฒนาสำหรับ Super FX Linden จึงสร้างชุดเครื่องมือแอสเซมเบลอร์ ลิงเกอร์ และดีบักเกอร์ชื่อ ACCESS ขึ้นเองบน Amiga ของเขาก่อนเริ่มพัฒนาพอร์ตอย่างจริงจัง
      สำหรับฮาร์ดแวร์คิต เขาใช้คาร์ทริดจ์ Star Fox ที่แฮ็กแล้วกับคอนโทรลเลอร์ Super NES ที่ดัดแปลงสองตัวเสียบเข้ากับคอนโซลและเชื่อมต่อกับพอร์ตขนานของ Amiga และใช้โปรโตคอลอนุกรมเพื่อเชื่อมต่ออุปกรณ์อีกสองตัว
      หลังจากทำต้นแบบที่สมบูรณ์แล้ว เขานำไปให้ Sculptured Software นายจ้างของเขาดู และบริษัทก็ช่วยพัฒนาจนเสร็จ Linden บอกว่าเขาคงดีใจถ้าใส่เลเวลที่ขาดไปได้ แต่เกมมีขนาดถึง 16 เมกะบิต หรือประมาณ 2MB ซึ่งเป็นขนาดสูงสุดของเกม Super FX 2 แล้ว และเหลือพื้นที่ว่างประมาณ 16 ไบต์เท่านั้น
      นอกจากนี้ยังเพิ่มการรองรับปืนแสง Super Scope, เมาส์ Super NES และโมเด็ม XBAND สำหรับเล่นหลายคนด้วย John Coffey โปรแกรมเมอร์ร่วมงานซึ่งเป็นแฟนซีรีส์ Doom ได้แก้ไขเลเวล แต่บางส่วนถูก id Software ปฏิเสธ
    • ในพอร์ต Wolfenstein 3D ก็มีเรื่องคล้ายกัน John Carmack ชื่นชม Rebecca Heineman ที่ เรียนภาษาญี่ปุ่นเพื่ออ่านสิทธิบัตร เพื่อให้ได้เอกสารทางเทคนิค
      รอบ ๆ เรื่องพวกนี้มีประวัติศาสตร์เจ๋ง ๆ อยู่เสมอ และมีเขียนเรื่องที่เกี่ยวข้องไว้ที่นี่อีกเล็กน้อย: https://eludevisibility.org/super-noahs-ark-3d-source-code
    • กรณีนี้ไม่รู้เหมือนกัน แต่ dev kit กับ SDK/เอกสารมักเป็น SKU แยกกัน และอย่างหลังมักแพงกว่า
      ถ้าจำไม่ผิด ทีม Crash Bandicoot ก็ไม่มี SDK เลยเขียนโค้ดเอง แล้วไปพบฮาร์ดแวร์บั๊กเกี่ยวกับการบันทึกลงเมโมรีการ์ด
  • สงสัยว่า จำนวนไบต์ ของเกมต่าง ๆ มาจากไหน
    เกมอยู่ในชิป ROM และตามประสา ROM ขนาดก็เป็นเลขยกกำลังของ 2 เช่น Super Mario World วางจำหน่ายบน ROM ขนาด 512kb แล้วตัวเลข 346,330 ไบต์มาจากไหน? เป็นขนาดหลังบีบอัดหรือเปล่า?

    • ตัวเลขเป็นค่าประมาณจากขนาด ZIP แต่ไม่ใช่วิธีที่ดี
      คงต้องเขียนโปรแกรมแตก ZIP แต่ละไฟล์แล้วนับ padding ไบต์ 0 ที่ท้ายไฟล์
      วันนี้ดึกเกินไปแล้ว พรุ่งนี้จะเขียนแล้วอัปเดตบทความ
    • ดูเหมือนเป็นขนาดหลังบีบอัด ถ้าบีบอัด SMW.SMC ด้วย gzip จะได้ไฟล์ 347KB นี่ชวนให้เข้าใจผิดพอสมควร
      ยังมีปัญหาอื่นด้วย บทความเขียนเหมือนกับว่า MVG เป็นคนค้นพบว่าอาการค้างของ SFA2 เกิดจากการโหลดข้อมูลเสียง แต่เรื่องนี้เป็นที่รู้กันมานานก่อนวิดีโอนั้นมากแล้ว: https://forums.nesdev.org/viewtopic.php?p=70474#p70474
      เรื่อง RTC ก็ดูสับสนไม่น้อย ทั้งที่เห็นได้ชัดเหมือนเกม Pokemon บน GBC/GBA ว่าต้องการให้เวลายังเดินต่อไปแม้คอนโซลปิดอยู่และถอดคาร์ทริดจ์ออกแล้ว แต่กลับพูดทำนองว่าอาจเป็นเพราะ clock drift ของ NTSC ก็ได้ ไม่รู้ว่าหมายถึงอะไรกันแน่
    • เป็น data padding
  • เกี่ยวกับส่วนที่ว่า “Super Mario World ก็ได้รับการจัดการแบบนี้เหมือนกัน ผมจำไม่ได้ว่ามีอาการช้าลง แต่ตอนนั้นผมเพิ่งอายุสิบสอง” Yoshi’s Island 4 มีอาการช้าลงภายใต้เงื่อนไขบางอย่าง
    คือเมื่อขี่ Yoshi อยู่ แล้วได้ Starman และกด P-Switch และยังมีเลเวลอื่นที่จำไม่แม่นด้วย น่าจะเป็น Chocolate Island ตรงที่ Monty Mole หลายตัวโผล่ขึ้นมาพร้อมกัน
    คิดว่ายังมีกรณีที่สามที่บนหน้าจอมี Sumo Bros. สองตัวพร้อมกับ Amazing Flying Hammer Bro. ด้วย

    • จำได้ว่าใน Outrageous มีอาการหน่วงหนักมาก
  • ผมไม่เคยเข้าใจเลยว่า ROM สำหรับอีมูเลเตอร์ถูกดัมป์จากคาร์ทริดจ์อย่างไร
    ผมเข้าใจว่าดัมป์คำสั่งกับแอสเซ็ต แล้วรวมเป็นไฟล์ข้อมูลที่อีมูเลเตอร์ตีความได้ แต่ตัวอีมูเลเตอร์โมเดล ฮาร์ดแวร์ชิปเสริม ทั้งหมดในคาร์ทริดจ์ได้อย่างไร? สิ่งนั้นถูกดัมป์จากคาร์ทริดจ์ต้นฉบับได้อย่างไร?

    • ชิปเสริมไม่ใช่ ROM จึงต้อง อีมูเลต แยกต่างหาก
      ส่วนตัวผมมองว่าสถานการณ์ฝั่ง NES ซึ่งเป็นรุ่นก่อนของ SNES แย่กว่านิดหน่อย
      NES มีชิปเสริมที่เรียกว่า mapper อยู่ค่อนข้างมาก หน้าที่ทั่วไปคือขยายพื้นที่หน่วยความจำของ NES มากกว่าจะเพิ่มโปรเซสเซอร์หรือความสามารถเพิ่มเติม และเพราะ NES จะถูกจำกัดอยู่ที่ PRG ROM 32KB กับ CHR graphics ROM 4KB หรือ 8KB หากไม่มีชิปเหล่านี้ เกมส่วนใหญ่จึงมีชิปพวกนี้
      เกมส่วนใหญ่หลังจาก NES เปิดตัวใช้ชิปแบบนี้
      ชิปเหล่านี้ทั้งหมดก็ต้องถูกรีเวิร์สเอนจิเนียร์พร้อมกับตัวคอนโซลเอง โชคดีที่มันเรียบง่ายกว่าการรีเวิร์สเอนจิเนียร์ CPU เพิ่มเติมหรือแอคเซเลอเรเตอร์มาก
      มีชิปที่พบได้บ่อยและถูกใช้ในหลายเกมอย่าง MMC1, MMC3 และก็มีชิปอย่าง MMC2 ที่แทบจะใช้เฉพาะกับ Punch-Out เท่านั้น
    • ไม่ได้ถูกดัมป์ การติดตั้งในอีมูเลเตอร์จะจำลอง ฟังก์ชันของชิปเสริม ด้วยซอฟต์แวร์
      ชิปเสริมไม่ได้มีชนิดเยอะมากจนรับมือไม่ไหว
  • วิธีป้องกันการคัดลอกของ SNES นั้น ในมุมผู้บริโภคแล้วถูกหลบเลี่ยงได้ง่าย อย่างไรก็ตาม สำหรับผู้พัฒนาเกมหรือผู้จัดจำหน่าย อาจไม่เป็นเช่นนั้น
    ในสมัยนั้นใคร ๆ ก็มี “อุปกรณ์สำรองข้อมูล” สำหรับ SNES กันทั้งนั้น เป็นอุปกรณ์ที่เสียบเข้ากับ SNES และมีฟลอปปีดิสก์ไดรฟ์ติดมาด้วย ใช้ “สำรอง” เกมลงในฟลอปปีดิสก์ขนาด 3.5 นิ้วที่ราคาถูกมาก
    สิ่งเดียวที่ระบบต้องใช้เพื่อทำงานคือคาร์ทริดจ์ต้นฉบับหนึ่งตลับ และเมื่อเสียบมันเข้ากับเครื่องคัดลอก อุปกรณ์ก็จะนำ ชิป CIC ของคาร์ทริดจ์นั้นมาใช้ซ้ำ
    https://en.wikipedia.org/wiki/Game_backup_device

  • พอเห็นส่วนที่ว่า “DSP-1 มีอยู่สามเวอร์ชัน ได้แก่ DSP-1, DSP-1a, DSP-1b เมื่อมีการแก้บั๊กและปรับปรุงกระบวนการผลิต พฤติกรรมของชิปก็เปลี่ยนไปเล็กน้อย และผลก็คือเครื่องบินในเดโม Pilot Wings พุ่งชนพื้น” ต่อไปถ้ามีใครถามว่าทำไมผมเล่นได้แย่ขนาดนั้น ผมคงต้องใช้ข้ออ้างนี้แล้ว