พบโค้ดใหม่ใน NES Tetris
- แฮ็กเกอร์ค้นพบวิธีรีโปรแกรม NES Tetris จากภายในเกม
- วิธีนี้อาจช่วยผู้เล่นสายทำคะแนนสูงที่ต้องการหลีกเลี่ยงการแครชตอนจบเกมได้
วิธีรันโค้ด
- อาศัย "kill screen" ของ NES Tetris เพื่อจัดการหน่วยความจำด้วยวิธีที่ซับซ้อน ทำให้สามารถเขียนพฤติกรรมใหม่ลงใน Tetris เวอร์ชันที่รันบนฮาร์ดแวร์และตลับเกมแบบไม่ดัดแปลงได้
- ก่อนหน้านี้เคยมีการค้นพบกลิตช์ "arbitrary code execution" คล้ายกันในเกมอย่าง Super Mario World, Paper Mario และ The Legend of Zelda: Ocarina of Time
- วิธีพื้นฐานในการนำโค้ดจากภายนอกเข้าสู่ NES Tetris ถูกตั้งทฤษฎีไว้แบบเปิดเผยต่อสาธารณะมาตั้งแต่อย่างน้อยปี 2021
- วิธีนี้อธิบายอย่างละเอียดว่าจะทำให้ Tetris เริ่มอ่านตารางคะแนนสูงสุดเป็นคำสั่ง machine code ได้อย่างไร
ความสนุกผ่านพอร์ตคอนโทรลเลอร์
- อาการแครชของ NES Tetris เกิดขึ้นเมื่อส่วนประมวลผลคะแนนของเกมใช้เวลานานเกินไปในการคำนวณคะแนนใหม่ระหว่างแต่ละเฟรม
- เมื่อเกิดความล่าช้านี้ โค้ดควบคุมบางส่วนจะถูกขัดจังหวะโดยรูทีนเขียนเฟรมใหม่ ทำให้กระโดดไปยังส่วนของ RAM ที่ไม่ได้ตั้งใจและไปค้นหาคำสั่งถัดไปที่นั่น
- ด้วยวิธีที่ Tetris ประมวลผลอินพุตที่เป็นไปได้เมื่อรันบนเครื่อง Famicom เวอร์ชันญี่ปุ่น ผู้เล่นจึงสามารถควบคุมการกระโดดนี้ได้
เขียนโค้ดในตารางคะแนนสูงสุด
- สำหรับวิธีควบคุมการกระโดดของ Displaced Gamers ผู้เล่นต้องกด "ขึ้น" บนคอนโทรลเลอร์ตัวที่สาม และกดขวา ซ้าย และลงบนคอนโทรลเลอร์ตัวที่สี่ค้างไว้
- การทำเช่นนี้จะส่งโค้ดกระโดดไปยังพื้นที่ RAM ที่ใช้เก็บชื่อและคะแนนของรายการคะแนนสูงสุดในเกม ทำให้ผู้เล่นมีพื้นที่ RAM ขนาดใหญ่ขึ้นที่ควบคุมได้โดยตรง
- การใส่ "(G" ลงในส่วนเป้าหมายของตารางคะแนนสูงสุดสามารถบังคับให้เกมกระโดดไปยังอีกส่วนหนึ่งของตารางคะแนนสูงสุดได้
- จากตรงนั้น ชื่อและคะแนนจะเริ่มถูกอ่านตามลำดับเป็น opcode สำหรับ CPU ของ NES
- อย่างไรก็ตาม สัญลักษณ์ที่ใช้ได้ในพื้นที่กรอกชื่อมีเพียง 43 แบบ และตัวเลขที่สามารถเป็นส่วนหนึ่งของคะแนนสูงสุดมีเพียง 10 ตัว ดังนั้นจึงสามารถ "เขียนโค้ด" คำสั่ง opcode ของ NES ลงในตารางคะแนนสูงสุดได้เพียงบางส่วนเท่านั้น
- เนื่องจากไม่มีระบบเซฟแบบแบตเตอรี่สำรอง แฮ็กเกอร์จึงต้องทำคะแนนเหล่านี้และกรอกชื่อที่ซับซ้อนด้วยมือทุกครั้งที่เริ่ม Tetris
ความเห็นจาก GN⁺
- น่าทึ่งที่ Tetris เวอร์ชัน NES มีความสามารถแฝงแบบนี้อยู่ ดูเหมือนในยุคนั้นจะยังไม่ถูกค้นพบ และการที่เพิ่งมาพบหลังจากผ่านไปหลายสิบปีก็ยิ่งน่าสนใจ
- การแฮ็กแบบนี้ทำได้ผ่านการใช้พอร์ตขยายของ Famicom ก็เป็นอีกจุดที่น่าสนใจ แม้จะไม่ใช่สิ่งที่ Nintendo ตั้งใจไว้ แต่ก็เหมือนจะแสดงให้เห็นข้อดีของ Famicom ที่มีฟังก์ชันมากกว่า NES
- ไอเดียในการใช้บั๊กนี้เพื่อฝังโค้ดป้องกันการแครชกลับถือว่าฉลาดมาก ในทางทฤษฎีมันช่วยให้เล่นต่อได้ จึงน่าจะมีประโยชน์มากกับการไล่ล่าคะแนนสูง
- อย่างไรก็ตาม การต้องตั้งค่าที่ซับซ้อนทุกครั้งเมื่อเริ่มเกมก็ดูไม่สะดวก หากจะใช้งานจริงก็น่าจะต้องมีวิธีทำให้เป็นอัตโนมัติมากกว่านี้
- ท้ายที่สุด วิธีนี้น่าจะดึงดูดคนที่ท้าทายคะแนนสูงสุดอย่างจริงจังหรือผู้ที่สนใจการเขียนโปรแกรม มากกว่าผู้เล่นทั่วไป จึงคงยากที่จะถูกใช้งานในวงกว้าง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สรุป: