1 คะแนน โดย GN⁺ 2023-07-16 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เป็น โปรเจกต์อุทิศส่วนตัว ที่นำ VM, blitter และ rasterizer ของ Another World / Out of This World ไปใช้งานบนฮาร์ดแวร์ FPGA โดยไม่ใช้ CPU มาตรฐาน
  • การออกแบบหลักประกอบด้วยการสร้าง VM ให้เป็นโปรเซสเซอร์คัสตอมจริง และรวม blitter ที่รับผิดชอบการคัดลอก·เติมข้อมูลระหว่าง framebuffer, rasterizer สำหรับวาด polygon และการอัปเดต display เข้าเป็น SOC
  • SPRAM ขนาด 128KB ของ Lattice UP5K พอดีกับ framebuffer 320x200 แบบ 4 บิตจำนวน 4 ชุด โดย SPRAM แต่ละบล็อกขนาด 32KB จะสอดคล้องกับ framebuffer หนึ่งชุด เป็น การจัดวางหน่วยความจำ
  • ข้อมูลเกมไม่ได้รวมอยู่ใน repository และต้องคัดลอก BANK01~BANK0D กับ MEMLIST.BIN ไปไว้ในโฟลเดอร์ GAMEDATA จึงจะใช้แพ็กเกจข้อมูลและ bitstream ได้
  • วิธีรันรองรับทั้ง simulation และบอร์ดจริง
    • simulation สามารถรัน intro ได้ด้วย make simul1 หลังติดตั้ง Silice
    • ฮาร์ดแวร์รองรับ icebreaker + VGA PMOD, mch2022 badge และ ULX3S HDMI
    • มี bitstream ที่ build ไว้ล่วงหน้ารวมอยู่ด้วย แต่ข้อมูลเกมต้องจัดหาแยกต่างหาก
  • การรัน VM จะดึงคำสั่งและ operand จากหน่วยความจำ SPI และเพื่อลด latency จะอ่าน 64 ไบต์เข้า cache BRAM ขนาดเล็กก่อน
  • เส้นทางกราฟิกใช้ framebuffer 4 ชุด, double buffering, การจำกัดการเข้าถึงในช่วง vblank และการไกล่เกลี่ยการเข้าถึง framebuffer ของ blitter กับ rasterizer
  • rasterizer วาด convex polygon ของ Another World เป็น horizontal span และเพื่อเอฟเฟกต์ความโปร่งใส สามารถอ่านและแก้ไขค่าพิกเซลเดิม หรือคัดลอกพิกเซลจาก source framebuffer อื่นได้
  • การเรนเดอร์ข้อความและบางฉากหลังของ part 6 จัดการโดยเก็บ pixel buffer ที่เรนเดอร์ไว้ล่วงหน้าใน ROM เนื่องจากงบ LUT ที่เหลือมีจำกัด แล้วคัดลอกผ่านเส้นทาง op_drawString
  • ข้อจำกัดและงานที่เหลือที่ระบุไว้คือ ยังไม่มีเสียง·เพลง, ต้องใช้ bitstream และ data pack แยกตาม part, ยังตรวจสอบการเล่นทั้งเกมไม่เสร็จ, การปรับ timing ที่เร็วกว่าต้นฉบับ และการสำรวจวิธีเชื่อมต่อระหว่าง part
  • ไลเซนส์คือ Silice design ใช้ MIT License, เอกสารใช้ CC BY-NC-SA 4.0, พอร์ต C++ ที่แก้ไขแล้วยังคง GPL เดิม และข้อมูลเกมอยู่ภายใต้ลิขสิทธิ์

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

 
GN⁺ 2023-07-16
ความคิดเห็นบน Hacker News
  • ตอนเด็ก ๆ เล่น Out of this World บน Sega Genesis แล้วคิดว่ากราฟิกคงไม่มีทางดีกว่านี้ได้อีก
    นั่นเป็นครั้งแรกที่ได้เห็นคัตซีนแอนิเมชันเต็มรูปแบบแบบนั้นบน Sega และมันน่าทึ่งมาก แน่นอนว่ากราฟิกพัฒนาไปไกลกว่านั้นแล้ว แต่รู้สึกว่า Another World ก็ยังยืนหยัดในเชิงศิลปะได้ดีมากจนถึงทุกวันนี้ มีสไตล์ที่ชัดเจนมาก และตอนกลับไปเล่นอีกครั้งเมื่อราว 1 ปีก่อนก็ยังประทับใจเหมือนเดิม
    ปริศนาหลายส่วนค่อนข้างเป็นการลองผิดลองถูก และตัวเกมก็สั้นมาก แต่ก็ไม่มีอะไรที่อยากให้เปลี่ยน ถ้าเป็นแฟน Another World ก็ขอแนะนำ Flashback: The Quest for Identity ด้วย มีบรรยากาศแบบภาพยนตร์คล้ายกัน ตอนแรกไม่ค่อยชอบเท่าไร แต่ในช่วง 10 ปีที่ผ่านมาเริ่มชอบมันมากขึ้นเรื่อย ๆ
    • ชอบ Flashback มากจริง ๆ ฉากหลังไซเบอร์พังก์ตรงกับรสนิยมส่วนตัว ฉากก็สวย และเรื่องราวก็ดีมาก
      แต่ถึงอย่างนั้น Another World ก็เป็นงานศิลปะชิ้นหนึ่ง โปสเตอร์เกมดูเหมือนภาพสีน้ำมันและสวยมากจริง ๆ [1]
      [1] http://www.anotherworld.fr/download/AnotherWorld_Poster.jpg
    • ชอบ Flashback มากจนพยายามเล่นให้จบในระดับ Expert difficulty แต่ไปตันช่วงท้ายเกมและชนะ slime man ไม่ได้
    • เวอร์ชัน Genesis ออกค่อนข้างช้า ฉันเล่น เวอร์ชัน Amiga ตั้งแต่ออกใหม่ ๆ ในปี 1991 และมันช็อกมาก เพราะไม่เคยเห็นเกมแบบนั้นมาก่อน
    • รู้จัก Flashback ก่อนบน Sega แล้วก็ชอบทันที พอมาเล่น Out of this World ทีหลังต้องใช้เวลาสักพักกว่าจะอิน แต่ทั้งคู่ก็เป็นงานศิลปะที่ยอดเยี่ยม
    • Flashback เป็นผลงานของ Delphine Software และเกมนักสืบ Cruise for a Corpse ก็ใช้เทคนิคโพลิกอนแบบเดียวกันบางส่วนด้วย
  • แหล่งข้อมูลที่น่าสนใจเพิ่มเติม:
    งาน reverse engineering และพอร์ตเป็น JavaScript ของ Infernal Runner สำหรับ Amstrad CPC โดย cyxx เป็นผลงานของผู้สร้าง Another World และทั้งสองเกมใช้โครงสร้างแบบ virtual machine: https://github.com/cyxx/infernal_js
    งานบรรยาย The Virtual Machine Architecture of Infernal Runner โดย Norbert Kehrer เป็นการบรรยายภาษาเยอรมันพร้อมสไลด์ภาษาอังกฤษ: https://media.ccc.de/v/vcfb20_-146-en-202010111400-_th...
    The Story of Another World on the Amiga | MVG: https://www.youtube.com/watch?v=0iz9PJbs5rE
    พอร์ต Another World ลง Nintendo 64: https://github.com/jnmartin84/aw64
    พอร์ต Another World ลง PlayStation 1: https://github.com/fgsfdsfgs/rawpsx
  • ถ้า HDL ทำให้งง นี่คือ ภาษาคัสตอม ของผู้เขียนเอง: https://github.com/sylefeb/Silice/tree/master
    มีคอมไพเลอร์ที่คอมไพล์ไปเป็น Verilog ได้ และสามารถนำผลลัพธ์ไปใส่ในขั้นตอนการออกแบบแบบเดิมได้
  • อินโทรยอดเยี่ยมมาก แม้จะมีแค่ PC speaker และไม่มีซาวด์การ์ดก็ยังยอดเยี่ยม
    การที่แอ็กชันแรกคือคุณต้องว่ายน้ำหนี แล้วต่อด้วยการหนีสัตว์คล้ายสิงโต เป็นหนึ่งในประสบการณ์เกมที่โหดที่สุดตลอดกาล เกมนี้เล่นแค่นาทีเดียวก็จำไปทั้งชีวิต
    • จำได้ว่าเล่นเกินไม่กี่นาที อย่างมากก็ไม่กี่ชั่วโมง และแทบไปต่อไม่ได้เลย แต่ อินโทรกับการหนีครั้งแรก นั้นยังฝังอยู่ในความทรงจำจนถึงตอนนี้
      สำหรับยุคนั้น เอฟเฟกต์กล้องที่ดรามาติกของเกมนี้ทำให้มันเหมือนอีกโลกหนึ่งสมชื่อจริง ๆ
    • ไม่เคยเล่นเกมนี้ด้วยตัวเอง แต่แค่ฉากยาว 2 นาทีใน เทป VHS โปรโมชันที่แถมมากับนิตยสารเกม ก็ฝังอยู่ในหัวมา 30 ปีแล้ว
      ภาพบนปกก็ยอดเยี่ยมมาก
    • ไม่มีวันลืม “บทพูด” ในเกมที่ออกมาทันทีหลังจากเพื่อนใหม่มาช่วยคุณจากเจ้าสิ่งคล้ายสิงโตนั่นได้
      konanaka beetzai! motsuubo! /wave
    • นอกจากอินโทรแล้ว การที่ ทั้งเกมอยู่ในฟลอปปีดิสก์เพียงแผ่นเดียว ก็ชวนช็อกไม่แพ้กัน
    • มีความทรงจำเหมือนกันว่าเล่นได้ประมาณ 1 นาทีแล้วก็ตัน พอกลับมาเล่นใหม่อีก 25 ปีให้หลังก็เล่นจนจบได้ และถ้าผ่าน กำแพงเรื่องความเร็วในการตอบสนอง ไปได้ มันคือเกมที่ยอดเยี่ยมและน่าจดจำมาก
  • ผู้พัฒนาดั้งเดิมของ Another World เคยทำ GDC retrospective talk ไว้ ซึ่งถือว่าดีมากแม้เทียบกับบรรดางานบรรยาย GDC ด้วยกัน:
    https://www.youtube.com/watch?v=JFaOYYSxSEA
    ถ้าจำไม่ผิด เขายังโชว์เครื่องมือพัฒนาบางส่วนด้วย รวมถึงวิธีแก้แอนิเมชันโดยตรงทีละบรรทัดใน virtual machine bytecode และรันแบบ step-through
  • สงสัยว่าในยุค 90s virtual machine สำหรับทั้งเกม เป็นเรื่องปกติแค่ไหน เกมนี้เก่ากว่าฉันอีก เลยสงสัยว่าใน PC ยุคนั้น การมีชั้น virtual machine จะไม่ทำให้เสียประสิทธิภาพมากหรือ?
    • การทำให้ซอฟต์แวร์เดียวกันรันได้บน Amiga, x86(DOS), Mac และอีกมากมายหลายแพลตฟอร์มนั้นสำคัญกว่ามาก
      ทุกวันนี้จำนวนแพลตฟอร์มยังน้อยกว่ายุคเติบโตระเบิดของทศวรรษ 80 เสียอีก แม้ตอนนี้ “ซอฟต์แวร์” ส่วนใหญ่ก็อาจมองได้ว่าเป็น JavaScript ที่เว็บเบราว์เซอร์ตีความอยู่ ในยุค 80 ก็มีปัญหาเรื่องการพอร์ตเช่นกัน และจริง ๆ แล้วยากกว่าด้วยซ้ำ เพราะต้องสร้างอินเทอร์พรีเตอร์เอง
      ดูเหมือนว่าวิดีโอเกมจำนวนมาก หรืออาจจะส่วนใหญ่ ก่อนยุค Doom และกราฟิก 3D สมรรถนะสูง จะเขียนบน virtual machine ส่วนเกมคอนโซลน่าจะเป็น C หรือแอสเซมบลีมากกว่าเพราะเรื่องประสิทธิภาพ

ในตอนนั้นเกม “คอมพิวเตอร์” ยังเป็นช่วงก่อนที่ IBM PC จะกลายเป็นมาตรฐาน หรืออย่างน้อยก็เป็นก่อนที่ PC จะชนะและ Microsoft จะครองตลาด ในสถานการณ์ที่ยังไม่รู้ว่า Amiga, PC-98, IBM PC, Mac ฯลฯ อะไรจะเป็นผู้ชนะ การสร้าง virtual machine จึงเป็นทางเลือกที่สมเหตุสมผล และทำให้นึกถึง SCUMM ทันที

  • ถึงอย่างนั้นก็ไม่ได้สร้างอะไรอย่าง Elite ด้วย virtual machine เฉพาะทางแบบนี้
    ความสามารถในการพกพาข้ามแพลตฟอร์มเป็นเรื่องสำคัญก็จริง แต่ในยุคที่กฎของ Moore เดินหน้าเต็มสปีดและอายุของแพลตฟอร์มสั้นราวกับแมลงเม่า virtual machine ยังให้ผลด้านการบีบอัดด้วย ไบนารีที่คอมไพล์เต็มรูปแบบอาจกินพื้นที่ดิสก์หรือเทป และ RAM มากเกินไป
    ในทางกลับกัน virtual machine ขนาดเล็กมากสามารถสร้างภาษาที่ออกแบบมาเฉพาะเพื่อให้ตีความได้ทันที และลดการใช้พื้นที่ลงอย่างมากในสถานการณ์ที่ต้องประหยัดทุกกิโลไบต์ แค่นึกถึงความต่างของขนาดระหว่าง print "Hello world!" กับไบนารีที่คอมไพล์แบบพื้นฐานก็พอ ต่อให้ text adventure จะเร็วแค่ไหน ถ้ายัดลงใน X KB ไม่ได้ก็ไม่มีประโยชน์
  • ในยุครุ่งเรืองของภาษาแอสเซมบลี virtual machine ก็พบได้บ่อยแม้แต่ในซอฟต์แวร์ธุรกิจ เพราะยังเป็นช่วงที่คอมไพเลอร์ C มาตรฐานที่รองรับหลายระบบยังไม่มี หรือมีแต่ราคาแพงมาก ทำให้การพอร์ตไปยังระบบที่ต่างกันทำได้ง่ายขึ้น
  • หัวใจสำคัญของ virtual machine ยุคแรกอย่าง Infocom Z-Machine, โค้ด Pascal แบบตีความของ Wizardry, SCUMM, Sierra AGI และ SCI, Another World, เกมของ Horrorsoft ฯลฯ คือการมองออกอย่างชัดเจนว่าเกมที่พวกเขาสร้างนั้นโดยมากเป็น “อุปกรณ์ส่งมอบคอนเทนต์”
    มีข้อความและทรัพยากรกราฟิกจำนวนมาก ขณะที่การคำนวณค่อนข้างเรียบง่าย ข้อจำกัดด้านการสร้างสรรค์จึงเชื่อมกับฮาร์ดแวร์แค่ในแง่ของ I/O และการบีบอัดข้อมูลเท่านั้น และโค้ดที่ interpreter รันก็มักเป็นเพียง “การตั้งค่าฉาก” ที่ทำครั้งเดียวกับตัวจับเวลาแอนิเมชันเล็กน้อย
    แนวคิดอีกฝั่งจะเห็นได้ชัดกว่าในเกมอาร์เคด และต่อมาในเกมอย่าง Doom กับ Quake สิ่งที่เกมจำลองมีความผูกกับฮาร์ดแวร์แนบแน่นกว่ามาก และการกำหนดฉากก็ใกล้กับข้อมูลแผนที่มากกว่าตรรกะแบบสคริปต์ เช่น “วางมอนสเตอร์ไว้ตรงนี้ แล้ววางไอเท็มพลังชีวิตไว้ตรงนั้น”
  • มันขึ้นอยู่กับว่าจะมอง “virtual machine สำหรับทั้งเกม” อย่างไร เกมผจญภัยของ Infocom รันโค้ดเกมทั้งหมดบน virtual machine และเกมผจญภัยกราฟิกของ Sierra กับ LucasArts ก็ทำเช่นกัน
    แน่นอนว่าสองค่ายหลังใช้ primitive ด้านกราฟิกแบบเนทีฟบางส่วนด้วย
  • ให้ความรู้สึกเหมือนสโลแกน Only Amiga makes it possible ถูกแทนที่ด้วย FPGA หลังผ่านไป 30 ปี
  • ประเด็นที่ว่า “[ความโปร่งใส] เพิ่มความซับซ้อนให้กับ rasterizer หากจะพลิกเพียงหนึ่งบิตของ [ค่าสี] ก็ต้องรู้ค่าก่อนหน้าของพิกเซลตำแหน่งนั้น” นั้น แทบจะเป็นหนึ่งในข้อดีสามอย่างที่ได้จากการใช้กราฟิกแบบ planarอย่าง Amiga
    เมื่อใช้ bitplane ก็ไม่จำเป็นต้องอ่าน video memory กลับมาอีกครั้ง แค่สมมติให้บิตสูงสุดสงวนไว้สำหรับเอฟเฟกต์ความโปร่งใส แล้ววาด span ลงไปตรง ๆ ได้เลย
    ข้อดีอีกสองอย่างคือสามารถเลื่อนแต่ละ plane ให้สัมพันธ์กันเพื่อสร้างเอฟเฟกต์มัวเรที่สวยงามได้ และยังมีประสิทธิภาพด้านหน่วยความจำกับแบนด์วิดท์บัสที่ดีสำหรับความลึกสีแบบก้ำกึ่งที่ไม่ลงตัวกับไบต์หรือนิบเบิลพอดี เช่น 8 สี (3 บิตต่อพิกเซล) หรือ 32 สี (5 บิตต่อพิกเซล)
  • เพราะเธรดนี้ ในที่สุดฉันก็ยอมรับว่าคงไม่มีวันเล่นเกมนี้จนจบด้วยตัวเอง แล้วไปดูวิดีโอการเล่นบน YouTube แทน ความยาว 22 นาที ดูเหมือนว่าฉันจะเคยผ่านสิงโตไปได้แค่ครั้งเดียวเท่านั้น