- เมื่อเทียบกับหน่วยความจำ 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 ได้
เส้นทางการพัฒนา
กฎสามข้อ
- ต้องสนุก
- ไม่อยากเรียน 68K assembly
- ไม่อยากเจาะลึกภายในของซอฟต์แวร์ระบบ 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⁺
- โปรเจกต์ที่น่าสนใจ: MicroMac เป็นโปรเจกต์ที่น่าสนใจในการอีมูเลตแมคอินทอชคลาสสิกด้วยฮาร์ดแวร์ราคาถูก ช่วยให้สัมผัสความสนุกของงานวิศวกรรมผ่านการผสานซอฟต์แวร์และฮาร์ดแวร์
- โอกาสในการเรียนรู้: โปรเจกต์นี้มอบโอกาสที่ดีให้วิศวกรซอฟต์แวร์ระดับเริ่มต้นได้เข้าใจปฏิสัมพันธ์ระหว่างฮาร์ดแวร์และซอฟต์แวร์ โดยเฉพาะแนวคิดอย่างอีมูเลชัน, PIO และ DMA
- การเพิ่มประสิทธิภาพ: ในกระบวนการปรับแต่งประสิทธิภาพ สามารถเรียนรู้ทั้งความท้าทายทางเทคนิคและวิธีแก้ไขที่หลากหลาย โดยเฉพาะความสำคัญของการจัดการหน่วยความจำและการโอเวอร์คล็อก
- การแบ่งปันกับชุมชน: การแชร์โปรเจกต์ผ่าน GitHub เปิดโอกาสให้ร่วมมือกับผู้อื่น ซึ่งแสดงให้เห็นข้อดีของชุมชนโอเพนซอร์สได้อย่างชัดเจน
- ความเป็นไปได้ในอนาคต: โปรเจกต์นี้มีโอกาสขยายต่อได้ด้วยการใช้ MCU ที่มี RAM มากขึ้น ซึ่งเปิดทางให้รันแอปพลิเคชันที่ซับซ้อนกว่าเดิมได้
1 ความคิดเห็น
ความคิดเห็นจาก 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 อยู่ข้างทาง บางครั้งเรื่องแบบนี้ก็เกิดขึ้นได้