ข้อจำกัดของ C Compiler และข้อได้เปรียบของ Assembly Language จุดประกายการถกเถียงในหมู่นักพัฒนาเกมย้อนยุค

ทีมชุมชน BigGo
ข้อจำกัดของ C Compiler และข้อได้เปรียบของ Assembly Language จุดประกายการถกเถียงในหมู่นักพัฒนาเกมย้อนยุค

ชุมชนนักพัฒนาเกมย้อนยุคกำลังหารือกันอย่างกระตือรือร้นเกี่ยวกับความท้าทายทางเทคนิคในการสร้างเกมสำหรับคอมพิวเตอร์รุ่นเก่า โดยเน้นไปที่ข้อจำกัดของ C compiler เมื่อเทียบกับข้อได้เปรียบของการเขียนโปรแกรมด้วย assembly language การสนทนานี้เกิดขึ้นจากประสบการณ์จริงของนักพัฒนาที่พยายามสร้างเกม roguelike แบบข้ามแพลตฟอร์มสำหรับระบบต่างๆ เช่น Commodore 64 และเครื่อง 8-bit อื่นๆ

C Compiler ประสบปัญหากับสถาปัตยกรรม 6502

ประเด็นสำคัญที่ถูกหารือคือความเข้ากันได้ของ C กับระบบที่ใช้ 6502 โปรเซสเซอร์ 6502 ที่พบในคอมพิวเตอร์ย้อนยุคยอดนิยมอย่าง Commodore 64 และ Apple II นำเสนอความท้าทายที่เป็นเอกลักษณ์สำหรับ C compiler ความไม่เข้ากันเกิดจากความแตกต่างพื้นฐานของสถาปัตยกรรม - ภาษา C คาดหวังรูปแบบการใช้ register และพฤติกรรม stack ที่ไม่สอดคล้องกับการออกแบบของ 6502 นอกจากนี้ มาตรฐาน C กำหนดให้ integer ต้องมีขนาดอย่างน้อย 16 บิต ซึ่งอาจสร้างความไม่มีประสิทธิภาพบนโปรเซสเซอร์ 8-bit ที่การดำเนินการดังกล่าวต้องใช้คำสั่งหลายตัว

หมายเหตุ: 6502 เป็นไมโครโปรเซสเซอร์ 8-bit ที่ถูกใช้อย่างแพร่หลายในคอมพิวเตอร์บ้านในช่วงทศวรรษ 1970 และ 1980

การเปรียบเทียบเครื่องมือพัฒนา:

  • TRSE (The Retro Software Environment): ใช้ภาษา Pascal เป็นฐาน รองรับระบบย้อนยุคหลายระบบ แต่มีไลบรารีสนับสนุนข้อความที่ยังไม่สมบูรณ์
  • C Compilers: cc65, Z88DK มีการปฏิบัติตามมาตรฐาน C89/C99 ที่แตกต่างกัน
  • Assembly: เป็นที่ต้องการของสตูดิโอมืออาชีพเพื่อประสิทธิภาพและการใช้หน่วยความจำที่เหมาะสมที่สุด
  • แนวทางข้ามแพลตฟอร์ม: การคอมไพล์แบบมีเงื่อนไขโดยใช้คำสั่ง ifdef สำหรับระบบเป้าหมายที่แตกต่างกัน

สตูดิโอมืออาชีพชื่นชอบ Assembly และเครื่องมือขั้นสูง

สมาชิกชุมชนที่มีประสบการณ์ในอุตสาหกรรมเปิดเผยว่าสตูดิโอพัฒนาเกมมืออาชีพในช่วงทศวรรษ 1980 มักจะก้าวข้าม C compiler พื้นฐานไปสู่เครื่องมือที่ซับซ้อนกว่า หลังจากที่นักพัฒนาจบจากการเขียนโค้ดในห้องนอนด้วยทรัพยากรจำกัด สตูดิโอที่มีชื่อเสียงใช้ cross-assembler ที่ทรงพลังและสภาพแวดล้อมการพัฒนาเฉพาะทางที่ให้ประสิทธิภาพและการควบคุมทรัพยากรฮาร์ดแวร์ที่ดีกว่า วิธีการนี้ช่วยให้ใช้หน่วยความจำที่จำกัดอย่างมากได้อย่างมีประสิทธิภาพมากขึ้น - บ่อยครั้งมีเพียง 8KB ถึง 64KB ทั้งหมด

ข้อจำกัดของหน่วยความจำขับเคลื่อนการตัดสินใจทางเทคนิค

การหารือเน้นย้ำว่าข้อจำกัดของหน่วยความจำที่รุนแรงส่งผลต่อตัวเลือกการพัฒนาอย่างไร เมื่อคอมพิวเตอร์รุ่นเก่าบางเครื่องมี RAM เพียง 8KB ทุกไบต์มีความสำคัญ เครื่องมือและภาษาการพัฒนาสมัยใหม่ไม่สามารถใส่ลงในข้อจำกัดเหล่านี้ได้ แม้แต่ความพยายามในการสร้าง JavaScript implementation ขั้นต่ำสำหรับระบบย้อนยุคก็ยังเผชิญกับข้อกำหนดหน่วยความจำที่ไม่สามารถเอาชนะได้ เนื่องจาก runtime environment เพียงอย่างเดียวก็เกินความจุหน่วยความจำทั้งหมดของเครื่องเหล่านี้แล้ว

ข้อจำกัดด้านหน่วยความจำตามระบบ:

  • Commodore VIC-20 : สามารถขยายจากการกำหนดค่าพื้นฐานด้วยตลับ RAM
  • เป้าหมายขั้นต่ำ: RAM 48KB สำหรับโครงการปัจจุบัน
  • เป้าหมายที่แนะนำ: ระบบ 64KB+ ( Commodore 64 , PET , Plus/4 , Atari 800 , BBC Micro )
  • การพัฒนาระดับมืออาชีพ: มักต้องการหน่วยความจำระบบรวม 8KB-64KB

กลยุทธ์การพัฒนาทางเลือกเกิดขึ้น

นักพัฒนากำลังสำรวจวิธีการต่างๆ เพื่อจัดการกับความซับซ้อนของการพัฒนาย้อนยุคแบบหลายแพลตฟอร์ม บางคนแนะนำให้ใช้ไฟล์ port แยกต่างหากแทนการใช้ conditional compilation directive เพื่อให้โค้ดสะอาดและบำรุงรักษาได้ง่ายกว่า คนอื่นๆ แนะนำให้เน้นไปที่ subset ของ ANSI C ที่รักษาความเข้ากันได้ระหว่าง compiler implementation ต่างๆ คล้ายกับวิธีการที่ใช้โดยภาษาโปรแกรม Lua

ฉันทามติของชุมชนดูเหมือนจะเปลี่ยนไปสู่วิธีการที่ปฏิบัติได้มากกว่า: เริ่มต้นด้วยแพลตฟอร์มเดียวที่ได้รับการสนับสนุนดีอย่าง Commodore 64 ทำให้ประสบการณ์เกมสมบูรณ์แบบที่นั่น แล้วจึงค่อยๆ port ไปยังระบบอื่นๆ อย่างระมัดระวัง กลยุทธ์นี้ช่วยหลีกเลี่ยงการบวมตัวของโค้ดและฝันร้ายในการบำรุงรักษาที่เกิดจากการพยายามสนับสนุนหลายแพลตฟอร์มพร้อมกันตั้งแต่เริ่มต้น

อ้างอิง: Developing a Retro-Roguelike Game for Multiple Platforms in C