2 คะแนน โดย GN⁺ 2023-12-28 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ตระกูล Game Boy ผสาน DMG-CPU SoC, PPU, APU, boot ROM และ Game Pak เข้าด้วยกันภายใต้งบพลังงานต่ำ รวม CPU, กราฟิก, เสียง, ความเข้ากันได้ และการป้องกันการคัดลอกของคอนโซลพกพาไว้ในระบบเดียว
  • CPU ใช้พื้นฐานจาก คอร์ SM83 ของ Sharp ทำงานที่ราว 4.19 MHz ส่วน CPU CGB ของ Game Boy Color ยังคงอยู่ในตระกูลเดียวกัน แต่เพิ่มได้ถึงราว 8.38 MHz ในโหมดความเร็วคู่
  • กราฟิกใช้ LCD 160×144 และ PPU ที่อิง VRAM ในการผสม ไทล์·ฉากหลัง·สไปรต์·หน้าต่าง ส่วนรุ่น Color ขยายขีดความสามารถด้วย VRAM 16 KB, พาเลต 32,768 สี และ DMA เพิ่มเติม
  • เสียงดูแลโดย APU 4 แชนเนล ส่วน Game Pak ใช้ Memory Bank Controller เพื่อข้ามข้อจำกัดพื้นที่แอดเดรสพื้นฐาน 32 KB และรองรับการสื่อสารภายนอกผ่านสาย Link กับอินฟราเรดของรุ่น Color
  • boot ROM ตรวจสอบโลโก้ Nintendo และ checksum ของ ROM header ก่อนรันเกม โดยข้อกำหนดเรื่องโลโก้นี้ทำงานเป็นกลไกควบคุมการจัดจำหน่ายผ่าน ลิขสิทธิ์·เครื่องหมายการค้า

ขอบเขตและทิศทางการออกแบบของตระกูล Game Boy

  • ซีรีส์ Game Boy อาจมองได้เหมือน NES เวอร์ชันพกพา แต่ไม่ใช่แค่รุ่นย่อส่วน หากเป็นโครงสร้างที่มีฟังก์ชันและทิศทางการขยายของตัวเอง
  • แบรนด์ Game Boy ต่อเนื่องผ่านสองเจเนอเรชัน
    • เจเนอเรชันที่ 4 รวม Game Boy ขาวดำและรุ่นปรับปรุงอย่าง Game Boy Pocket, Light
    • เจเนอเรชันถัดไปรวม Game Boy Color ที่เปิดตัวหลัง Virtual Boy
  • จุดโฟกัสของการวิเคราะห์คือโครงสร้างพื้นฐานของ Game Boy ขาวดำ และโครงสร้างนี้ถูกขยายในรุ่น Color อย่างไร

CPU และโครงสร้างหน่วยความจำ

  • แทนที่จะวางชิปเอนกประสงค์หลายตัวบนเมนบอร์ด Nintendo เลือก ดีไซน์ชิปเดี่ยว ที่บรรจุ CPU และองค์ประกอบหลักไว้ด้วยกัน
    • SoC นี้เรียกว่า DMG-CPU หรือ Sharp LR35902
    • ผลิตโดย Sharp Corporation และเอื้อต่อการทำประสิทธิภาพด้านพลังงาน การป้องกันการคัดลอก และ I/O เพิ่มเติมตามความต้องการของ Nintendo
    • เป็นชิปที่ไม่มีในแค็ตตาล็อกค้าปลีก จึงทำให้คู่แข่งคัดลอกแบบตรง ๆ ได้ยาก
  • คอร์ CPU SM83

    • โปรเซสเซอร์หลักภายใน DMG-CPU คือ Sharp SM83
    • มีรูปแบบผสมระหว่าง Zilog Z80 กับ Intel 8080 และทำงานที่ราว 4.19 MHz
    • SM83 คงไว้เพียงบางฟังก์ชันของ Z80 และ 8080
      • ไม่มีรีจิสเตอร์ IX, IY ของ Z80 และคำสั่ง IN, OUT ของ 8080
      • ไม่สามารถใช้พอร์ต I/O ได้ ทำให้องค์ประกอบต่าง ๆ ต้องถูก แมปเข้าหน่วยความจำ
      • มีเฉพาะชุดรีจิสเตอร์ของ Intel 8080 จึงมีรีจิสเตอร์เอนกประสงค์ 7 ตัว
      • ในบรรดาคำสั่งขยายของ Z80 มีการ implement เฉพาะบางคำสั่งจัดการบิต
    • Sharp ยังเพิ่มคำสั่งใหม่ที่ไม่มีใน Z80 หรือ 8080 ด้วย
      • LDH ถูกออกแบบเพื่อเข้าถึง 256 ไบต์สุดท้ายของ memory map ที่เริ่มจาก $FF00
      • ขนาดคำสั่งลดลง 1 ไบต์ ทำให้ทำงานได้เร็วขึ้นเล็กน้อย
  • การเปลี่ยนแปลง CPU ใน Game Boy Color

    • Game Boy Color ใช้ SoC ใหม่ชื่อ CPU CGB แต่โดยรวมยังคงคอร์ CPU SM83 ไว้
    • ข้อยกเว้นใหญ่ที่สุดคือความเร็ว clock ซึ่งเพิ่มเป็นสองเท่าถึงราว 8.38 MHz
    • การคงคอร์ CPU เดิมช่วยให้นักพัฒนานำความรู้การเขียนโปรแกรมเดิมกลับมาใช้ได้ และยังลดต้นทุนการออกแบบสถาปัตยกรรมใหม่กับภาระการทำ backward compatibility
    • CPU CGB มีโหมดการทำงานสองแบบ
      • Normal mode: SM83 ทำงานที่ราว 4.19 MHz
      • Dual-speed mode: SM83 ทำงานที่ราว 8.38 MHz
    • ทางเลือกนี้ยังทิ้งต้นทุนของการใช้เทคโนโลยีเก่าต่อไปตามมาตรฐานปลายทศวรรษ 1990
  • พื้นที่แอดเดรสและ RAM

    • SM83 ยังคงใช้ บัสข้อมูล 8 บิต และ บัสแอดเดรส 16 บิต ทำให้ address หน่วยความจำได้สูงสุด 64 KB
    • memory map ประกอบด้วยพื้นที่ Game Pak, WRAM, HRAM, VRAM, I/O อย่างจอยแพด·เสียง·กราฟิก·LCD และพื้นที่ควบคุม interrupt
    • เมนบอร์ด Game Boy รุ่นเดิมติดตั้ง WRAM 8 KB ซึ่งเป็นหน่วยความจำเอนกประสงค์ และมีความจุ 4 เท่าของ NES
    • ภายใน SoC ยังมี HRAM 127 B
      • เป็นพื้นที่ขนาดเล็กที่เข้าถึงได้เร็วขึ้นผ่านคำสั่ง LDH
      • แม้บัส HRAM เองไม่ได้เร็วกว่า WRAM ในเชิงเทคนิค แต่ CPU มีสิทธิ์เข้าถึงก่อน
      • มีความสำคัญในสถานการณ์ที่ CPU ไม่สามารถเข้าถึงหน่วยความจำภายนอกระหว่างการทำงานของ DMA
    • Game Boy Color เพิ่ม WRAM เป็น 32 KB
      • ความสามารถในการ address ของ CPU ยังเท่าเดิม จึงไม่สามารถเชื่อมหน่วยความจำทั้งหมดพร้อมกันได้
      • การเข้าถึง WRAM เพิ่มเติม 24 KB ใช้ bank switching
      • พื้นที่ 4 KB ท้ายสุดของพื้นที่ 8 KB เดิมจะถูกสลับระหว่าง 7 bank
      • รีจิสเตอร์ SVBK ใช้เลือก WRAM bank

กราฟิก: PPU, LCD และการประกอบเลเยอร์

  • กราฟิกของ Game Boy มีโครงสร้างที่ CPU ทำการคำนวณ และ PPU แยกต่างหากภายใน DMG-CPU SoC เป็นตัวเรนเดอร์หน้าจอ
  • LCD ในตัวให้ความละเอียด 160×144 พิกเซล
    • LCD ของ Game Boy ขาวดำสะท้อนเฉพาะระดับเทา 4 ระดับ ได้แก่ ขาว เทาอ่อน เทาเข้ม และดำ
    • เพราะ LCD โทนเขียว หน้าจอจึงดูออกเขียวเล็กน้อย
  • Game Boy ทุกเครื่องทำงานด้วย ถ่าน AA 4 ก้อน ต่างจากคอนโซลบ้านที่พึ่งพาความถี่ไฟฟ้าตามภูมิภาค
    • clock ของ CPU และ refresh rate ไม่ต่างกันตามภูมิภาค
    • refresh rate คือ 59.7 Hz
  • VRAM และการเรนเดอร์แบบอิงไทล์

    • PPU เชื่อมต่อกับ VRAM 8 KB แบบเอกสิทธิ์ และอ่านข้อมูลส่วนใหญ่ที่จำเป็นต่อการเรนเดอร์จากที่นี่
    • ข้อมูลบางส่วนที่ต้องเข้าถึงเร็วกว่าเก็บไว้ภายใน PPU
    • การเข้าถึง VRAM ของ CPU ถูก PPU เป็นตัว arbitration และเกมต้องเติมข้อมูลที่ถูกต้องลงในพื้นที่ VRAM
    • หน่วยเรนเดอร์พื้นฐานคือ ไทล์
      • ไทล์คือ bitmap ขนาด 8×8 พิกเซล
      • ไทล์แต่ละตัวใช้ 16 ไบต์
      • เก็บอยู่ในพื้นที่ Tile set หรือ Tile pattern table ของ VRAM
    • สีถูกเลือกจาก 4 ระดับเทาผ่านพาเลต
    • Game Boy ขาวดำกำหนดพาเลตได้สูงสุด 3 ชุด แต่การใช้งานถูกจำกัดตามชนิดของเลเยอร์ที่เรนเดอร์
  • ฉากหลัง สไปรต์ และหน้าต่าง

    • เฟรมสุดท้ายประกอบด้วย เลเยอร์ซ้อนกันสามชั้น
    • เลเยอร์ฉากหลังคือ 256×256 พิกเซล หรือ tile map 32×32
      • บนหน้าจอจริงมองเห็นเพียง 160×144 พิกเซล
      • เกมเลือกพื้นที่ฉากหลังที่จะแสดงและเลื่อนพื้นที่นั้นเพื่อสร้าง เอฟเฟกต์ scrolling
      • เลเยอร์ฉากหลังใช้พาเลตได้เพียง 1 ชุด
    • สไปรต์คือไทล์ที่เคลื่อนที่ได้อย่างอิสระ
      • สามารถซ้อนทับกันหรือวางไว้หลังฉากหลังได้
      • ลำดับการแสดงถูกกำหนดด้วยคุณสมบัติ priority
      • มีการเพิ่ม สีโปร่งใส ทำให้ระดับเทาที่แสดงได้จริงเหลือ 3 ระดับ
      • เลือกใช้พาเลตเฉพาะได้หนึ่งใน 2 ชุด
    • นิยามสไปรต์ถูกเก็บใน OAM(Object Attribute Memory) ภายใน PPU
      • โดยทั่วไปเกมเรียก OAM DMA เพื่อคัดลอกข้อมูลจาก RAM หรือ ROM ไปยัง OAM
      • ระหว่าง DMA ทำงาน CPU ไม่สามารถเข้าถึงหน่วยความจำภายนอกได้
      • แต่ละรายการ OAM มี tile index, ตำแหน่ง X-Y, พาเลต, priority และแฟล็กกลับด้านบนล่าง·ซ้ายขวา
    • การเรนเดอร์สไปรต์ของ PPU มีข้อจำกัด
      • สูงสุด 10 ตัว ต่อ scanline
      • สูงสุด 40 ตัว ต่อเฟรม
      • หากเกินข้อจำกัด บางสไปรต์จะไม่ถูกวาด
    • เลเยอร์หน้าต่างเป็น map ขนาด 160×144 พิกเซล ที่สามารถคลุมทั้งหน้าจอได้
      • เรนเดอร์อยู่เหนือฉากหลังและสไปรต์
      • ไม่ถูก scroll
      • tile map ที่เหลืออยู่เพียงชุดเดียวสามารถกำหนดให้เลเยอร์หน้าต่างได้
      • แชร์พาเลตเดียวกับฉากหลัง
      • ไม่โปร่งใส จึงบังเลเยอร์ด้านล่างทั้งหมด แต่สามารถใช้บางส่วนร่วมกับเอฟเฟกต์ raster แบบอิง timing ได้
      • เกมมักใช้เลเยอร์หน้าต่างกับตัวนับชีวิต คะแนน และข้อมูลที่แสดงค้างไว้
  • การอัปเดตเฟรมและเอฟเฟกต์ raster

    • CPU ไม่สามารถแก้ไขตารางขณะที่ PPU กำลังอ่าน VRAM
    • ระบบมี interrupt ที่เกิดเมื่อ PPU อยู่ในสถานะว่าง
      • Horizontal Blank เริ่มหลังจบ scanline หนึ่งเส้น และสามารถปรับส่วนของเฟรมที่ยังไม่ได้วาดได้
      • Vertical Blank เริ่มหลังจบ scanline ทั้งหมด และสามารถอัปเดตกราฟิกของเฟรมถัดไปได้
      • OAM search เกิดเมื่อเริ่ม scanline และสามารถอัปเดตพื้นที่ยกเว้น OAM ระหว่างที่ PPU กำลังกำหนดสไปรต์ของบรรทัดนั้น
    • ด้วยเลเยอร์หน้าต่างและ interrupt เพิ่มเติม จึงสามารถเปลี่ยนบางส่วนของเฟรมก่อนหน้าจอถูกวาดครบ
    • หากใช้ค่า scroll ต่างกันในแต่ละ scanline จะสร้าง wobble effect ที่แต่ละแถวเคลื่อนที่ด้วยความเร็วต่างกันได้

ส่วนขยายกราฟิกของ Game Boy Color

  • PPU ของ Game Boy Color ทำงานเหมือน superset ของ PPU เดิม และมีโหมดการทำงานสองแบบเพื่อความเข้ากันได้
    • CGB mode: ให้การปรับปรุงภาพของไตเติล Game Boy Color
    • DMG mode: โหมดดั้งเดิมที่ปิดฟีเจอร์ขยาย
  • เมนบอร์ด Game Boy Color มี VRAM 16 KB
    • ความจุสองเท่าจากเดิม
    • เนื่องจากข้อจำกัดแอดเดรสของ CPU จึงประกอบด้วย bank 8 KB จำนวน 2 ชุด
    • รีจิสเตอร์ VBK ใช้สลับ VRAM bank
  • PPU สามารถเข้าถึง VRAM ทั้งสอง bank ได้พร้อมกัน
    • นักพัฒนาเติม VRAM bank ด้วย VBK
    • เมื่อระบุใน tile map ว่าไทล์อยู่ใน bank ใด PPU จะจัดการให้
  • VRAM ที่เพิ่มมาใช้สำหรับเก็บไทล์ได้มากขึ้นสองเท่า เก็บพาเลตได้มากขึ้น ขยาย metadata ของไทล์ และอ้างอิงพาเลตกับเอฟเฟกต์เพิ่มเติม
  • สีและ DMA เพิ่มเติม

    • PPU ใหม่ของ Game Boy Color สามารถกำหนดพาเลตจาก 32,768 สี
    • นักพัฒนาจัดเก็บพาเลตสีได้สูงสุด 16 ชุดใน Palette Memory
      • เป็น 8 ชุดสำหรับฉากหลัง·หน้าต่าง และ 8 ชุดสำหรับสไปรต์
      • แต่ละพาเลตเข้ารหัส 4 สี
      • แต่ละรายการเป็นค่า 16 บิต แต่จริง ๆ ใช้เพียง 15 บิต
      • CPU ไม่สามารถ address Palette Memory ได้โดยตรง และรีจิสเตอร์ใหม่ทำหน้าที่เป็น write buffer
    • ไทล์ฉากหลังและหน้าต่างสามารถอ้างอิงหนึ่งใน 8 พาเลตได้
    • ไทล์สไปรต์ก็อ้างอิงหนึ่งใน 8 พาเลตได้เช่นกัน แต่หนึ่งรายการยังถูกสงวนไว้เป็นสีโปร่งใส จึงยังมีข้อจำกัดพาเลต 3 สีอยู่
    • tile set ใหญ่ขึ้นสองเท่า ทำให้เก็บไทล์ใน VRAM ได้มากขึ้นสองเท่า
    • tile map ของฉากหลัง·หน้าต่างก็ขยายเพื่อเก็บ metadata ได้มากขึ้น
    • ไทล์ฉากหลังและหน้าต่างสามารถกลับด้านบนล่าง·ซ้ายขวาได้ ลดความจำเป็นในการเก็บกราฟิกซ้ำใน VRAM
    • CPU CGB มี หน่วย DMA เพิ่มเติม สำหรับคัดลอกข้อมูลไปยัง VRAM
      • คัดลอกจาก Game Pak หรือ WRAM ไปยัง VRAM ได้
      • General-purpose DMA ส่งข้อมูลได้ทุกเมื่อ แต่ระหว่างส่งจะยึดสิทธิ์เข้าถึงหน่วยความจำและอาจทำให้ภาพฉีกได้
      • H-Blank DMA ส่งข้อมูลเฉพาะช่วง H-Blank เพื่อเลี่ยง artifact บนหน้าจอ แต่จำกัดเป็นหน่วย 16 ไบต์ และหยุดระหว่างการสแกนของ LCD

เสียง: APU 4 แชนเนล

  • เสียงดูแลโดย APU(Audio Processing Unit) และให้ทั้งหมด 4 แชนเนล ด้วยวิธี Programmable Sound Generator
  • APU เป็นหนึ่งในองค์ประกอบที่ไม่เปลี่ยนตลอดรุ่นปรับปรุงต่าง ๆ ของ Game Boy
    • ไม่สามารถเร่งความเร็วเหมือน CPU ได้
    • การเปลี่ยนความเร็ว oscillator ไม่ได้ทำให้คุณภาพเสียงดีขึ้น แต่ทำให้ pitch เปลี่ยน
    • หากต้องการเพิ่มฟังก์ชันต้องเพิ่มวงจร และต้นทุนก็เพิ่มด้วย
  • โครงสร้างแชนเนล

    • มีแชนเนลคลื่น pulse 2 แชนเนล ใช้หลัก ๆ กับเมโลดี้และเสียงเอฟเฟกต์
      • ปรับ pulse width เพื่อให้โทน 4 แบบ
      • แชนเนลแรกมี sweep control เฉพาะ
      • เนื่องจากจำนวนแชนเนลจำกัด เมโลดี้อาจขาดช่วงเมื่อมีเสียงเอฟเฟกต์ระหว่างเล่นเกม
    • แชนเนลที่สามรองรับ waveform แบบกำหนดเอง
      • เก็บ waveform ที่ประกอบด้วย sample 4 บิตจำนวน 32 ค่าใน wavetable
      • ควบคุม volume และ frequency ได้
    • มี noise channel 1 แชนเนล
      • เป็นชุด waveform สุ่มที่ฟังคล้าย white noise
      • ในเกมมักใช้กับ percussion หรือเอฟเฟกต์สภาพแวดล้อม
      • ให้สองโทนคือ clean static และ robotic static และปรับ frequency ได้ด้วย
  • mixer และขาเสียงเสริม

    • mixer ให้เอาต์พุตสเตอริโอ ทำให้จัดวางแชนเนลซ้ายขวาได้
    • ลำโพงในตัวเป็น mono ดังนั้น panning จะได้ยินเฉพาะจากเอาต์พุตหูฟัง
    • ฮาร์ดแวร์ mixer ยังเชื่อมต่อกับขาเฉพาะของคาร์ทริดจ์
      • หากคาร์ทริดจ์ส่งเสียงอะนาล็อกด้วยฮาร์ดแวร์เพิ่มเติม ก็สามารถ stream แชนเนลเพิ่มเติม ได้
      • เกมที่วางตลาดไม่ได้ใช้ฟีเจอร์นี้
      • ฟีเจอร์นี้ถูกถอดออกในยุค Game Boy Advance

boot ROM และรูปแบบการทำงาน

  • Game Boy ไม่ได้ boot เข้าเกมโดยตรงเหมือน NES/Famicom แต่ boot จาก ROM ภายใน 256 ไบต์ ก่อน
  • ขั้นตอน boot พื้นฐานมีดังนี้
    • เมื่อเปิดเครื่อง CPU เริ่มอ่านจากแอดเดรส 0x0000
    • RAM และ APU ถูก initialize
    • คัดลอกกราฟิกโลโก้ Nintendo จาก ROM ของคาร์ทริดจ์ไปยัง Display RAM และวาดที่ด้านบนของหน้าจอ
    • หากไม่มีคาร์ทริดจ์หรือเสียบไม่ถูกต้อง โลโก้อาจแสดงเป็นไทล์ที่ผิดเพี้ยน
    • โลโก้ scroll ลงและเล่นเสียงอันเป็นเอกลักษณ์
    • เปรียบเทียบโลโก้ Nintendo ของเกมกับโลโก้ใน ROM ของคอนโซล
    • ทำ checksum แบบรวดเร็วกับ header ของ ROM คาร์ทริดจ์
    • หากตรวจสอบไม่ผ่าน คอนโซลจะหยุด
    • ROM ของคอนโซลถูกนำออกจาก memory map
    • CPU เริ่มรันเกม
  • โลโก้ Nintendo ที่แสดงบนหน้าจอไม่ถูกลบจาก VRAM ทำให้เกมสามารถใส่ animation หรือ transition effect ให้กับโลโก้นี้ได้
  • การเปลี่ยนแปลง boot ของ Game Boy Color

    • ขนาด ROM ของ Game Boy Color เพิ่มเป็น 2 KB
    • boot sequence ตรวจสอบว่าเกมที่ใส่อยู่เป็นเกมเฉพาะ Game Boy หรือเกม Game Boy Color
    • ตรวจ metadata เฉพาะใน ROM ของคาร์ทริดจ์ แล้วตั้งค่ารีจิสเตอร์เปิดใช้งานโหมด DMG หรือ CGB ตามผลลัพธ์
    • หากใส่เกม DMG โปรแกรม boot จะเติม Palette RAM ด้วย พาเลตที่คำนวณขึ้น
      • ใช้อัลกอริทึมง่าย ๆ ที่พึ่งพา metadata ของเกม
      • นี่คือหลักการที่ทำให้เกมขาวดำดูมีสีเมื่อเล่นบน Game Boy Color
      • ผู้ใช้สามารถเปลี่ยนพาเลตที่เลือกด้วยการกดปุ่มผสมระหว่าง boot
    • โลโก้ Nintendo ถูกคัดลอกไปยัง HRAM ด้วย
    • ขั้นตอน checksum ตรวจเฉพาะครึ่งหน้าของโลโก้ใน HRAM

Game Pak, การสร้างเกม และการสื่อสารภายนอก

  • เกมที่ต้องการประสิทธิภาพสูงในยุคนั้นมักเขียนด้วย ภาษา Assembly เพราะคอมไพเลอร์ภาษาระดับสูงยังไม่สุกงอมพอ
  • เกมเชิงพาณิชย์จัดจำหน่ายผ่าน Game Pak ซึ่งเป็นคาร์ทริดจ์สำหรับ Game Boy ของ Nintendo
  • พื้นที่จัดเก็บพื้นฐานมีได้สูงสุด 32 KB เพราะข้อจำกัดของ address space
    • หากใช้ Memory Bank Controller หรือ mapper จะทำให้สร้างเกมที่ใหญ่ขึ้นได้
    • Game Pak ที่ใหญ่ที่สุดที่ออกสู่ตลาดมี ROM 1 MB บน Game Boy รุ่นเดิม และ ROM 8 MB บน Game Boy Color
  • Game Pak บางชุดมี real-time clock, SRAM เพิ่มเติม และแบตเตอรี่ภายนอกสำหรับรักษาข้อมูล save
  • ประเภทคาร์ทริดจ์ในยุค Color

    • เมื่อ Game Boy Color มีโหมดการทำงานเพิ่ม เกมจึงแบ่งเป็นสามประเภท
      • Game Boy: เข้ากันได้เต็มที่กับ Game Boy ทุกรุ่น และรันในโหมด DMG เสมอ
      • Game Boy Color enhanced: เข้ากันได้กับรุ่นขาวดำ และได้รับการปรับปรุงภาพในโหมด CGB บน Game Boy Color
      • Game Boy Color exclusive: เข้ากันได้เฉพาะ Game Boy Color และปรับแต่งให้ใช้ประโยชน์จากฮาร์ดแวร์นั้น
    • ทั้งสามประเภทมีสีทางการเพื่อช่วยแยกแยะ
    • เกมบางเกมอย่าง Pokémon และ Donkey Kong ใช้ดีไซน์อื่น
  • สาย Link และอินฟราเรด

    • เกม Game Boy สามารถสื่อสารกับฮาร์ดแวร์ภายนอกได้เป็นครั้งแรกผ่านสาย Game Boy Link ทำให้เล่นหลายคนและใช้อุปกรณ์เสริมได้
    • สาย Link ต่อเข้ากับซับคอนเน็กเตอร์ 6 ขาของคอนโซล และอินเทอร์เฟซใช้โปรโตคอล SPI(Serial Peripheral Interface)
      • Game Boy เครื่องหนึ่งขับสัญญาณ clock ในฐานะ master และอีกฝั่งเป็น slave
      • ในการส่งแต่ละครั้ง master และ slave แลกเปลี่ยนแพ็กเก็ต 8 บิตหนึ่งชุด
      • ความเร็วส่งข้อมูลของ Game Boy รุ่นเดิมคือ 8 Kbit/s หรือ 1 KB/s
      • Game Boy Color สามารถไปถึงสูงสุด 512 Kbit/s หรือ 64 KB/s ในโหมด high speed
    • Nintendo ยังออก 4-Player Adapter เพื่อให้ Game Boy สูงสุด 4 เครื่องแลกเปลี่ยนข้อมูลพร้อมกันได้
      • ยังคงใช้ SPI พื้นฐาน
      • อะแดปเตอร์ทำงานเป็น master และ implement ชั้นสื่อสารเพิ่มเติมที่เกมต้องทำตาม
    • Game Boy Color มี ตัวรับส่งอินฟราเรด อยู่ในตัว
      • ประกอบด้วย LED และ phototransistor
      • ใช้แลกเปลี่ยนข้อมูลแบบไร้สายในไตเติลอย่าง Pokémon Gold
      • ตัวระบบเองไม่ได้ implement โปรโตคอลสื่อสาร
      • รีจิสเตอร์ RP ตัวเดียวเข้ารหัสการทำงานของเซ็นเซอร์ IR, บิตที่ส่ง และบิตล่าสุดที่รับ
      • Nintendo ให้ reference implementation ไว้ใน Game Boy Developer Manual อย่างเป็นทางการ

โครงสร้างป้องกันการคัดลอก

  • คอนโซลไม่ได้รันเกมทันที แต่ทำการตรวจสอบหลายอย่างก่อน เพื่อป้องกันการรันคาร์ทริดจ์ที่ไม่ได้รับอนุญาต และตรวจว่าคาร์ทริดจ์เสียบถูกต้องหรือไม่
  • เกมต้องมีสำเนาโลโก้ Nintendo ในรูปแบบไทล์อยู่ใน ROM header จึงจะผ่านการตรวจสอบได้
    • Nintendo สามารถใช้กฎหมาย ลิขสิทธิ์และเครื่องหมายการค้า เป็นเครื่องมือควบคุมการจัดจำหน่ายผ่านวิธีนี้
  • ภายหลังคดี Sega v. Accolade ตัดสินว่าการใช้โลโก้ที่มีลิขสิทธิ์เพื่อให้เป็นไปตามข้อกำหนดเช่นนี้ถือเป็น fair use และให้สิทธิกับบริษัทต่าง ๆ
  • ภายในเกมเองก็สามารถ implement มาตรการป้องกันการคัดลอกเพิ่มเติมได้
    • มักตรวจขนาด SRAM ที่ใหญ่กว่าใน bootleg
    • ทำ ROM checksum แบบสุ่มระหว่าง gameplay เพื่อตรวจจับการเปลี่ยนแปลงโค้ด

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

 
GN⁺ 2023-12-28
ความคิดเห็นบน Hacker News
  • สิ่งที่ยอดเยี่ยมจริง ๆ ในการพัฒนา Game Boy เดิมคือ ทีมของ Gunpei Yokoi อยู่ในสถานการณ์ที่ถูกกังขาอย่างหนักในเวลานั้น
    ประมาณว่า “ทำไมต้องเล่นเกมบนรถเมล์หรือในห้องน้ำด้วย มันคงไม่สะดวกหรอก อยู่บ้านนั่งบนโซฟาหน้าทีวีกับครอบครัวหรือเพื่อน ๆ ก็ได้ หรือถ้าอยากได้ประสบการณ์ใหม่ล่าสุดก็ไปเล่นที่ตู้เกมสิ ใครจะอยากเปลี่ยนถ่านแล้วดูแค่เฉดสีเทาไม่กี่ระดับกัน”
    วิสัยทัศน์ของพวกเขาคือการนำ เทคโนโลยีที่ล้าสมัย มาห่อหุ้มเป็นอุปกรณ์ที่ใช้ง่ายและเกมที่เรียบง่าย เล่นจบไว และผมมองว่าทีมนั้นแทบจะเป็นผู้เริ่มต้นเกมมือถือเลย

    • นั่นค่อนข้างใกล้กับ มุมมองประวัติศาสตร์แบบแก้ไขใหม่
      เด็ก ๆ ในยุค 1970 เล่นเกม LED พกพาของ Mattel บนรถเมล์และในห้องน้ำกันอยู่แล้ว และผมเองก็มีอย่างน้อย 6 เครื่อง อาจจะราว 8 เครื่องด้วยซ้ำ ตัวอย่างที่เก่าแก่ที่สุดคือ https://en.m.wikipedia.org/wiki/Mattel_Auto_Race จากปี 1976
      ที่ได้รับความนิยมมากกว่าคือเกมกีฬาอย่างอเมริกันฟุตบอล เบสบอล และบาสเกตบอล ซึ่งกติกาก็ซับซ้อนกว่า Auto Race มาก: https://www.ebay.com/p/2255363696
      ในช่วงต้นทศวรรษ 1980 ก็มีเกม LCD พกพาอย่าง Dungeons and Dragons ออกมามากมาย: https://en.m.wikipedia.org/wiki/Dungeons_%26_Dragons_Compute... (1981)
      “Mattel stated that the game immediately sold out.” แม้จะไม่ได้ใช้คาร์ทริดจ์ แต่โดยเฉพาะเกม LCD นั้นราคาถูกและเล็ก จึงไม่เป็นภาระถ้าจะมีหลายเครื่อง
      ทุกวันนี้เพื่อแยกจากอุปกรณ์พกพาในยุค Game Boy จึงเรียกของเหล่านี้ว่า “handhelds” แต่เท่าที่ผมจำได้ ตอนนั้นไม่ได้เรียกแบบนั้น ประเด็นคือในทศวรรษ 1970 และต้นทศวรรษ 1980 มีตลาดที่ประสบความสำเร็จอยู่แล้ว และ Nintendo ไม่ได้สร้างตลาดนั้นขึ้นมา แต่พัฒนาต่อโดยผสาน คอนโซลแบบใช้คาร์ทริดจ์ ที่ประสบความสำเร็จอยู่แล้วเข้ากับตลาดเกมพกพา
    • Game & Watch มาก่อน และก็เป็นผลงานของ Gunpei Yokoi เช่นกัน อย่างน้อยตามความทรงจำของผม จะมองว่านั่นเป็นจุดเริ่มต้นของเกมมือถือก็น่าจะได้
    • ประมาณ 6 ปีก่อน Game Boy ออก ผมก็มีนาฬิกาที่มีเกมแข่งรถอยู่แล้ว
  • เห็นว่ามีการเพิ่ม Game Boy Color แล้ว แต่ดูเหมือนยังไม่ได้แก้ส่วนที่บอกว่าขนาดคาร์ทริดจ์มีแค่ 1MB เกม GBC บางเกมไปได้ถึง 4MB
    เพิ่มเติมคือมีเกมรถไฟที่มีวิดีโอสั้น ๆ และภาพไฮคัลเลอร์ ซึ่งเป็นคาร์ทริดจ์ 8MB ด้วย

    • ใช่ คือ 電車でGO!2 高速編 หรือ Densha de Go! 2 Kōsoku-hen
      https://www.youtube.com/watch?v=S62dSVmLPU0
    • ถ้าพูดอย่างเป็นธรรม ผมก็ไม่คิดว่ามีอะไรขวางไม่ให้เกม DMG ไปถึง 4MB
      ขนาดหน้าต่างของตลับโดยพื้นฐานแล้วเท่ากันทั้งสองฝั่งคือ 32KB และไม่ว่าจะ 4MB หรือ 1MB การ สลับแบงก์ ก็จัดการที่ฝั่งคาร์ทริดจ์
  • Game Boy เป็นคอนโซลที่ผมชอบที่สุดอย่างท่วมท้นในบรรดาคอนโซลทั้งหมดที่เคยออกมา ตอนนี้ผมกำลังทำเกม Game Boy ด้วย ภาษาแอสเซมบลี เป็นเกมพินบอลดันเจียนครอว์เลอร์
    ฮาร์ดแวร์เข้าใจง่าย และข้อจำกัดก็ทำให้ต้องสร้างสรรค์อย่างหลีกเลี่ยงไม่ได้

  • Florent Gorges ออกหนังสือที่ว่าด้วย Game Boy โดยเฉพาะ แต่น่าเสียดายที่ดูเหมือนจะไม่มีฉบับแปลภาษาอังกฤษ ผมซื้อฉบับภาษาสเปนมา และมี บทสัมภาษณ์พิเศษ กับผู้สร้างอยู่ด้วย
    https://www.amazon.es/Historia-Nintendo-Vol-4-1989-1999-INCR...

  • ด้วยระดับของ ฮาร์ดแวร์ที่เป็นประชาธิปไตย ในตอนนี้ ถ้าซื้อชิ้นส่วนที่เหมาะสมกับ PCB ที่เดินลายไว้แล้ว จะสร้าง Game Boy ขึ้นมาใหม่ได้ไหม?

    • มีคนทำมาแล้ว แต่โดยอย่างน้อยก็ต้องย้าย CPU ต้นฉบับ มาใส่ ชิปพวกนั้นไม่ได้ถูกทำมาเพื่อการใช้งานอย่างอื่น: https://www.reddit.com/r/Gameboy/s/FEAH2VhBRT
      FunnyPlaying เพิ่งออกเวอร์ชันที่ใช้ FPGA ในราคาสมเหตุสมผล: https://funnyplaying.com/products/fpgbc-kit?variant=40858870...
      สำหรับ Game Boy Advance ก็มีเมนบอร์ดใหม่ที่ประกอบชิ้นส่วนมาแล้ว แต่ต้องย้าย CPU และ RAM มาใส่
    • ถ้าคุณโอเคกับ GameBoy ที่เร็วเท่าซูเปอร์คอมพิวเตอร์ในยุคที่มันเปิดตัว ผมคิดว่าน่าจะสร้างชุดที่รันอีมูเลเตอร์ GameBoy บน Linux ด้วย คอมพิวเตอร์บอร์ดเดี่ยว ARM แล้วส่งออกไปยังจอ OLED ได้ในงบต่ำกว่า 150 ดอลลาร์กับพลังใจอีกเล็กน้อย
      ถ้าต้องการความตรงตามฮาร์ดแวร์จริง ๆ ต้นทุนในการทำอุปกรณ์เดี่ยวขนาดถือมือได้น่าจะยากที่จะอยู่ในระดับราคาแบบ “เป็นประชาธิปไตย”
    • แนวทางตอนนี้คือใช้ FPGA ดู Analogue Pocket ได้ และยังมีชุดคิตอื่น ๆ ด้วย
    • อย่างมากก็คงเป็นการซื้อชิ้นส่วนที่ถอดมาจาก Game Boy เก่าแล้วเอามาประกอบใหม่ ผมเหมือนเคยเห็น การจำลอง Game Boy บน FPGA ที่ไหนสักแห่ง ซึ่งอาจเป็นวิธีที่ใกล้เคียงที่สุด
  • จะเรียนรู้สถาปัตยกรรม Game Boy ไปทำอะไร จะไปแฮ็กโลกหรือไง?

    • เพราะเป็น โครงสร้างที่เรียบง่าย ซึ่งทำงานสัมผัสกับฮาร์ดแวร์โดยตรงโดยไม่มีระบบปฏิบัติการ จึงเป็นประตูที่ดีสู่การเขียนโปรแกรมฝังตัว และยังสนุกด้วย