4 คะแนน โดย GN⁺ 2024-06-17 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เมื่อเทียบกับหน่วยความจำ 128KB ของแมคอินทอชรุ่นดั้งเดิมแล้ว RAM 264KB ของ Raspberry Pi ก็เพียงพอแล้ว ในปี 1984 แมคอินทอชมีราคาเท่ากับ 1/3 ของ Volkswagen Golf
  • ใช้ RP2040 เชื่อมต่อจอ VGA ขาวดำและ USB/คีย์บอร์ดเพื่ออีมูเลต Mac และรันแอปพลิเคชัน Mac ยุคแรก
  • ข้อมูลถูกเผยแพร่บน GitHub ทำให้ใครก็สามารถประกอบขึ้นเองได้

Pico-Mac คืออะไร?

  • ไมโครคอนโทรลเลอร์ Raspberry Pi RP2040 (ใช้บอร์ด Pico) ขับวิดีโอ VGA ขาวดำ รับอินพุตจากคีย์บอร์ด/เมาส์ USB และอีมูเลตคอมพิวเตอร์ Macintosh 128K พร้อมอุปกรณ์จัดเก็บข้อมูลแบบดิสก์
  • แฟลช 2MB ของ RP2040 เพียงพอสำหรับ disk image ของ OS และซอฟต์แวร์
  • สามารถรันแอปพลิเคชันแมคอินทอชยุคแรก เช่น MacDraw, MacWrite และ MacPaint ได้

เส้นทางการพัฒนา

กฎสามข้อ

  1. ต้องสนุก
  2. ไม่อยากเรียน 68K assembly
  3. ไม่อยากเจาะลึกภายในของซอฟต์แวร์ระบบ Mac ยุคแรกมากเกินไป

Mac 128K

  • CPU Motorola 68000, 8MHz
  • โครงสร้างฮาร์ดแวร์พื้นฐาน เช่น memory map, คีย์บอร์ด/เมาส์ และ video scan
  • Mac 128K และ Mac 512K ต่างกันแค่ RAM
  • Mac Plus เพิ่ม SCSI และฟลอปปีดิสก์ไดรฟ์ 800K

Mac emulator: umac

  • สร้างอีมูเลเตอร์ Mac 128K โดยใช้ Musashi 68K interpreter
  • โหลด ROM image, จัดสรร RAM และตั้งค่าข้อความดีบักกับ logging
  • เพิ่ม address decoding เพื่อให้ CPU อ่าน/เขียนไปยัง RAM หรือ ROM
  • หลังจากเข้าถึงชิป IWM ก็ได้ไอคอน "Unknown Disc"
  • ห่อด้วย SDL2 frontend เพื่อตรวจสอบการรีเฟรชหน้าจอแบบเรียลไทม์

ฮาร์ดแวร์และ RP2040

  • ส่งวิดีโอ 512x342x1 ออกเป็น VGA และรวมตัวอย่าง TinyUSB HID
  • ใช้งาน VGA PIO เพื่อสแกนข้อมูลวิดีโอ และใช้ DMA ส่งข้อมูล framebuffer ออกไป
  • ปรับโครงสร้าง DMA channel ใหม่หลายครั้งเพื่อให้ได้การแสดงผลวิดีโอที่เสถียร

กลับสู่งานอีมูเลชันอีกครั้ง

  • ปรับให้ตารางกระโดดสำหรับถอดรหัส opcode ขนาดใหญ่ของ Musashi ถูกเก็บไว้ในแฟลช
  • ลบ disassembler และการนับรอบการทำงานออก
  • ลดการใช้ RAM ให้ต่ำที่สุดจนสามารถ build และรันบน Pico ได้

ประสิทธิภาพ

  • โอเวอร์คล็อก Pico ไปที่ 250MHz เพื่อเพิ่มประสิทธิภาพ
  • เก็บฟังก์ชัน opcode ที่ใช้บ่อย 200 รายการไว้ใน RAM จนทำได้ 1.4 MIPS

คำส่งท้าย

  • โปรเจกต์ MicroMac เป็นประสบการณ์ที่ทั้งสนุกและได้ความรู้
  • สามารถประกอบขึ้นเองได้ผ่านลิงก์ GitHub

ความเห็นของ GN⁺

  1. โปรเจกต์ที่น่าสนใจ: MicroMac เป็นโปรเจกต์ที่น่าสนใจในการอีมูเลตแมคอินทอชคลาสสิกด้วยฮาร์ดแวร์ราคาถูก ช่วยให้สัมผัสความสนุกของงานวิศวกรรมผ่านการผสานซอฟต์แวร์และฮาร์ดแวร์
  2. โอกาสในการเรียนรู้: โปรเจกต์นี้มอบโอกาสที่ดีให้วิศวกรซอฟต์แวร์ระดับเริ่มต้นได้เข้าใจปฏิสัมพันธ์ระหว่างฮาร์ดแวร์และซอฟต์แวร์ โดยเฉพาะแนวคิดอย่างอีมูเลชัน, PIO และ DMA
  3. การเพิ่มประสิทธิภาพ: ในกระบวนการปรับแต่งประสิทธิภาพ สามารถเรียนรู้ทั้งความท้าทายทางเทคนิคและวิธีแก้ไขที่หลากหลาย โดยเฉพาะความสำคัญของการจัดการหน่วยความจำและการโอเวอร์คล็อก
  4. การแบ่งปันกับชุมชน: การแชร์โปรเจกต์ผ่าน GitHub เปิดโอกาสให้ร่วมมือกับผู้อื่น ซึ่งแสดงให้เห็นข้อดีของชุมชนโอเพนซอร์สได้อย่างชัดเจน
  5. ความเป็นไปได้ในอนาคต: โปรเจกต์นี้มีโอกาสขยายต่อได้ด้วยการใช้ MCU ที่มี RAM มากขึ้น ซึ่งเปิดทางให้รันแอปพลิเคชันที่ซับซ้อนกว่าเดิมได้

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

 
GN⁺ 2024-06-17
ความคิดเห็นจาก Hacker News
  • หาสาย VGA ยาก: เมื่อไม่นานมานี้ต้องใช้สาย VGA สำหรับงานศิลปะจัดวาง แต่ไม่มีใครแถว ๆ นั้นมีเลย สุดท้ายจึงต้องซื้อใหม่ รู้สึกเสียดายทั้งที่มีสายจำนวนมากถูกทิ้งไป

  • โปรเจ็กต์ Amiga: อยากสร้าง Amiga ที่รัน AmigaOS 3.2 แนวคิดการทำเชลล์ขนาดเล็กให้มีรูปร่างเหมือนต้นฉบับด้วยการพิมพ์ 3 มิติดูน่ารักดี แม้จะขาดประสบการณ์ไปเล็กน้อยเพราะไม่มีฟลอปปีดิสก์ไดรฟ์แบบเก่า แต่ก็ชอบแนวคิดการใช้เครื่องเฉพาะทางแทนการรันอีมูเลเตอร์บนเดสก์ท็อปพีซีที่มีอยู่แล้ว แนวทางระดับล่างที่ให้ RP2040 รับบทเป็น 68k ก็น่าสนใจ

  • ความประทับใจแรกต่อ Mac: ตอนที่ Mac ออกมาใหม่ ๆ เคยทำงานอยู่ในร้านคอมพิวเตอร์ พอเห็นมุมโค้งมนของหน้าจอก็ทึ่งในความอัจฉริยะนั้น

  • ชื่นชมโปรเจ็กต์: โปรเจ็กต์นี้น่าประทับใจมาก อ่านสนุกและชอบสไตล์การเขียนด้วย เวลาทำโปรเจ็กต์ embedded มักลองทำ dual-target build เพื่อให้ทำ prototyping/debugging ได้เร็ว แต่กลับได้ใช้ build บน PC บ่อยกว่าเดิม คนอื่น ๆ ก็ควรทำแบบนี้กันมากขึ้น

  • อินเทอร์เฟซ VGA: อินเทอร์เฟซ VGA เป็นส่วนที่น่าประทับใจที่สุด

  • ความท้าทายในการแฮ็ก ESP32: เคยพยายามรัน vMac บน ESP32 แต่ไม่สำเร็จ โปรเจ็กต์นี้อยู่คนละระดับเลย ขอคารวะ

  • สำรวจ SBC ขนาดเล็ก: สงสัยว่า SBC ที่เล็กที่สุดซึ่งสามารถอีมูเลต Mac 68k รุ่นสุดท้ายหรือ PPC Mac ช่วงกลางถึงปลายยุค 90 ได้ที่ประสิทธิภาพเต็มรูปแบบคืออะไร ถ้านำไปใส่ในตัวเครื่องโน้ตบุ๊กสมัยใหม่ ก็น่าจะกลายเป็นโน้ตบุ๊ก "โหมดเซน" ที่ใช้งานได้ดีสำหรับรัน System 7.6.1 ถึง Mac OS 9.x

  • บล็อกมิเรอร์: ดูเหมือนบล็อกจะรับโหลดมากเกินไป จึงแชร์ลิงก์มิเรอร์ไว้

  • กล่าวถึง MacPaint: อธิบายเหตุผลที่ไม่ได้พูดถึง MacPaint โดยคิดว่า Bill Atkinson รู้ทุกลูกเล่นและน่าจะใช้สิ่งเหล่านั้นทำให้ MacPaint ทำงานได้ภายใต้ข้อจำกัดดั้งเดิมอยู่แล้ว สำหรับผู้เขียนนี่ไม่ใช่การต่อสู้ที่ยุติธรรม

  • หาคอนเน็กเตอร์ VGA: ต้องการคอนเน็กเตอร์ VGA แต่หาไม่ได้ ระหว่างเดินเล่นตอนพักกลางวันกลับเจอสาย VGA อยู่ข้างทาง บางครั้งเรื่องแบบนี้ก็เกิดขึ้นได้