Snow - อีมูเลเตอร์ Macintosh คลาสสิก
(snowemu.com)- Snow จำลอง Macintosh คลาสสิกที่ใช้ Motorola 680x0 ให้ใกล้เคียงฮาร์ดแวร์ ทำให้สามารถใช้งานสภาพแวดล้อม Mac รุ่นเก่าบนระบบสมัยใหม่ได้
- มุ่งเป้าไปที่ การจำลองระดับฮาร์ดแวร์ มากกว่าการแพตช์ ROM หรือดักจับ system call พร้อมมี UI แบบกราฟิกและฟีเจอร์ดีบัก
- รองรับ รุ่น Mac คลาสสิก หลายรุ่นตั้งแต่ Macintosh 128K จนถึง SE/30 ทำให้ทดลองกับตระกูล Mac ยุคแรกได้อย่างกว้างขวาง
- เป็นโปรเจกต์ โอเพนซอร์สภายใต้ MIT license เขียนด้วย Rust และมีเดโมออนไลน์แบบจำกัดกับเอกสารติดตั้งเผยแพร่แล้ว
- รุ่น stable ดาวน์โหลดได้จาก GitHub ส่วน development build ล่าสุดมีให้สำหรับ Windows, macOS และ Linux แม้จะผ่านการทดสอบน้อยกว่า
การจำลอง Mac คลาสสิกที่ใกล้เคียงฮาร์ดแวร์
- Snow เป็นโปรเจกต์สำหรับจำลองคอมพิวเตอร์ Macintosh คลาสสิกที่ใช้ Motorola 680x0
- มี อินเทอร์เฟซผู้ใช้แบบกราฟิก สำหรับควบคุมเครื่องที่ถูกจำลอง และมีฟีเจอร์ดีบักอย่างครอบคลุม
- ไม่ได้ใช้วิธีแพตช์ ROM หรือดักจับ system call แต่มีเป้าหมายเพื่อจำลอง Macintosh ใน ระดับฮาร์ดแวร์ ให้มากที่สุดเท่าที่เป็นไปได้
- รุ่นที่รองรับในปัจจุบัน:
- Macintosh 128K/512K/512Ke
- Macintosh Plus
- Macintosh SE แบบ non-FDHD และ FDHD
- Macintosh Classic
- Macintosh II แบบ non-FDHD และ FDHD
- Macintosh IIx, IIcx, SE/30
รูปแบบการเผยแพร่และช่องทางทดลองใช้งาน
- ภาษาที่ใช้พัฒนาคือ Rust และเผยแพร่เป็น โอเพนซอร์สบน GitHub
- ใช้ไลเซนส์ MIT license
- มี เดโมออนไลน์ แบบจำกัดให้ใช้งาน แต่จะใช้ได้เฉพาะเครื่องที่ถูกจำลองเท่านั้น โดยไม่มี UI หรือฟีเจอร์อื่นของซอฟต์แวร์เต็มรูปแบบ
- ดูวิธีติดตั้งและข้อมูลเพิ่มเติมได้ใน เอกสารออนไลน์
รีลีสและช่องทางสนับสนุน
- รุ่น stable จะถูกแพ็กเกจเมื่อถึง milestone ที่กำหนด
- ดาวน์โหลดรุ่น stable ได้จาก GitHub releases
- development build ล่าสุด (bleeding edge) จะถูกสร้างอัตโนมัติตามความคืบหน้าในการพัฒนาอีมูเลเตอร์ และอาจมีฟีเจอร์ที่ใหม่กว่า แต่ผ่านการทดสอบน้อยกว่า
- development build ล่าสุดที่มีให้:
- Windows 10 ขึ้นไป x86 64-bit
- Windows 10 ขึ้นไป ARM64
- macOS 11.7 Big Sur ขึ้นไป Universal
- Linux Ubuntu 24.04 x86 64-bit
- Linux Ubuntu 24.04 ARM64
- รับรายงานบั๊กและคำขอปรับปรุงผ่าน GitHub issues
- การขอความช่วยเหลือหรือพูดคุยทำได้ที่ช่อง
#snowใน The Opcode Collective Discord
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ถ้าอยากดูบริบทว่าทำไม อีมูเลเตอร์ระดับฮาร์ดแวร์ที่พกพาได้และใช้ง่าย สำหรับ Mac คลาสสิกจึงมีความหมายมาก ให้ดูบทความปี 2020 นี้ https://invisibleup.com/articles/30/
ฝั่งเครื่องเกมคอนโซลมีอีมูเลเตอร์อย่าง Nestopia, bsnes, Dolphin, Duckstation มานานแล้ว ส่วนฝั่ง PC การทำ virtualization อย่าง VMWare และ VirtualBox ก็เติมเต็มความต้องการส่วนใหญ่ได้ และช่วงหลังยังมีอีมูเลเตอร์ความเที่ยงตรงสูงอย่าง 86Box และ MartyPC ออกมาด้วย
C64 มี VICE, Amiga มี WinUAE, Apple II ก็มีอีมูเลเตอร์คุณภาพสูงอย่าง KEGS และ AppleWin แต่ Mac โดยมากยังหยุดอยู่ที่ อีมูเลเตอร์ระดับสูงแบบประมาณการ อย่าง Basilisk II
สามารถให้เบราว์เซอร์อีมูเลต MS-DOS แล้วรัน Executor/DOS บนนั้น เพื่อเล่น Solitaire เวอร์ชัน Macintosh ในเบราว์เซอร์ได้ด้วย: https://archive.org/details/executor
นอกจาก Executor/DOS แล้ว ยังมีเวอร์ชันที่ไม่ได้เผยแพร่ซึ่งรันบนเวิร์กสเตชัน Sun 3 และ Executor/NEXTSTEP ก็รันบนเครื่อง NeXT โดยรองรับทั้งอุปกรณ์ฐาน 680x0 และ PC x86 ที่รัน NEXTSTEP ได้
Executor มีความเข้ากันได้น้อยที่สุดเพราะไม่ได้ใช้ทรัพย์สินทางปัญญาของ Apple เลย และตัวทดแทน ROM กับซอฟต์แวร์ระบบก็เป็น การทำแบบคลีนรูม ที่ไม่ได้แยกวิเคราะห์ Apple ROM หรือไฟล์ System
มีพอร์ต Linux อยู่ก็จริง แต่มีโอกาสสูงว่าจะบิลด์ยาก เพราะ CPU สังเคราะห์พึ่งพาส่วนขยายเฉพาะของ gcc เพื่อรีดประสิทธิภาพสูงสุดจาก 80386
ผมรู้เรื่อง Executor อยู่พอสมควร เพราะเป็นคนเขียนเวอร์ชันแรก ๆ เอง อย่างไรก็ตาม ส่วนที่น่าประทับใจจริง ๆ อย่างอีมูเลเตอร์ 68k แบบสังเคราะห์หรือระบบย่อยด้านสี เป็นผลงานของโปรแกรมเมอร์ที่เก่งกว่าผมมาก
มันแม่นยำกว่า KEGS หรือ AppleWin และจัดการอุปกรณ์ต่อพ่วงได้มากกว่า แต่เป็นมิตรกับผู้ใช้น้อยกว่า
อาจเป็นเพราะเหตุนี้ อิมเมจฟลอปปีดิสก์ทุกตัวที่ผมลองใส่จนถึงตอนนี้จึงถูกดีดออกทันที รวมถึงดิสก์ System 7.1.1 ขนาด 800K ที่ระบุว่าเข้ากันได้กับ Mac II ด้วย
Snow มีศักยภาพมากและผมนับถือความพยายามที่ลงไป แต่พูดตรง ๆ ภูมิทัศน์ของการอีมูเลต Mac จนถึงตอนนี้ยังดูไม่ต่างจากเดิมมากนัก ดูเหมือนยังเป็นสถานะที่มีอีมูเลเตอร์หลายตัวให้ เมทริกซ์ผลิตภัณฑ์ที่ตะปุ่มตะป่ำ ของฮาร์ดแวร์ที่อีมูเลตและฟีเจอร์ที่รองรับ ต้องใช้ขั้นตอนมากมายและความรู้ล่วงหน้าเกี่ยวกับโครงสร้างภายในของ Mac รุ่นเก่า และยังอยู่ในสภาพที่ให้คำมั่นกับอนาคต
https://wiki.mamedev.org/index.php/Driver:Mac_68K
ด้วยเหตุผลด้านความถูกต้อง น่าจะไม่มีฟีเจอร์ทรงพลังของ BasiliskII อยู่ BasiliskII แพตช์ OS/ROM เพื่อเพิ่ม ความละเอียดสูงพิเศษ และการผสานกับระบบไฟล์กับเครือข่ายของโฮสต์แทบจะไร้รอยต่อ
น่าเสียดายที่ Basilisk ค่อนข้างไม่เสถียร อาจเพราะฟีเจอร์ที่ทรงพลังแต่ไม่แม่นยำของมัน ตอนที่ทำงานได้ถูกต้อง มันใช้งานสบายมากจริง ๆ
ผมเคยดูโค้ดแพตช์ของ Basilisk แล้ว ไม่ได้ซับซ้อนขนาดนั้น และในโค้ดภายในของ Basilisk, Executor, MACE ฯลฯ ก็มีการทำ Toolbox บางส่วนขึ้นใหม่อยู่หลายจุด
การพอร์ตคงต้องลงแรงบ้าง แต่โดยรวมดูจะใกล้เคียงกับการ แปลโค้ดโดยตรง และเพิ่มสิ่งที่อิงกับการทดสอบมากกว่า
จะหา ROM ได้อย่างไร? ผมลองโหลดมาหลายไฟล์จากเว็บที่เจอใน Google แต่อีมูเลเตอร์ขึ้นว่า “Unknown or unsupported ROM file” ตลอด จะหา ไฟล์ ROM ที่ใช้ได้จากไหน?
งานจำนวนมากที่ผมทำไว้ช่วงแรก ๆ หลังจบมหาวิทยาลัยถูกเก็บอยู่ในกอง ดิสก์ Bernoulli ฟอร์แมต Mac
ซอฟต์แวร์ต้องใช้ดองเกิล ADB ถึงจะรันได้ เลยต้องมีฮาร์ดแวร์จริง สงสัยว่าจะมีอะแดปเตอร์ ADB-USB ตัวไหนที่แมปเข้าอีมูเลเตอร์ได้ไหม
ถ้าจะทำ raw passthrough เข้าอีมูเลเตอร์ น่าจะต้องเขียน เฟิร์มแวร์แบบคัสตอม เอง บางทีการแคร็กซอฟต์แวร์อาจง่ายกว่าด้วยซ้ำ
ถ้าเป็นข้อมูลที่มีค่า ควรตรวจสอบก่อนจะสายเกินไป
ลองโหลดด้วยดิสก์ติดตั้ง Mac OS 7.1 มาตรฐานที่หาได้ง่ายและ ROM ของ Mac Plus แต่ดิสก์ถูกดีดออกจาก Drive 0
เมื่อเห็นว่า Mini vMac ทำงานได้ ก็ดูเหมือนว่ายัง ต้องปรับปรุง อยู่
แปลกใจที่ การรองรับ HD20 สำหรับ SE, II ฯลฯ ถูกแสดงว่า “ไม่เกี่ยวข้อง” ผมเข้าใจว่าโมเดลทั้งหมดในรายการยกเว้น II มีการรองรับการบูต HD20 อยู่ใน ROM
ผมก็ใช้ HD20 emulator กับ Mac SE เครื่องจริงอยู่เหมือนกัน
นี่เป็นหนึ่งในวิธีที่สะดวกที่สุดในการนำดิสก์อิมเมจขนาดใดก็ได้ไปใช้ได้ทั้งกับ Mac emulator และ floppy emulator จริง
เพราะเป็น 68K emulator ที่เขียนใหม่ด้วย Rust จึงไม่มีส่วนที่ใช้ร่วมกับ Musashi หรือโค้ด UAE ซึ่งเป็น CPU core ภาษา C ที่รู้จักกันดี
Mac ก็จำเป็นต้องมี cycle-accurate emulation ของฮาร์ดแวร์เหมือน Lisa หรือไม่? ผมลองใช้ lisaem และทดลองกับ Qemu แล้ว แต่ Lisa OS ตั้งสมมติฐานเกี่ยวกับ timing ของฮาร์ดแวร์ที่ Qemu ทำให้ตรงไม่ได้
เทคนิค โค้ดแบบ cycle-accurate แบบเดียวกับที่ใช้ใน Apple II ก็ถูกใช้ใน Mac ด้วย
นี่จึงเป็นเหตุผลที่เคอร์เซอร์หยุดเป็นครั้งคราวระหว่างเขียนดิสก์ ใน Mac มีตัวตั้งเวลา interrupt 60Hz ที่คอยติดตามเคอร์เซอร์ด้วย แต่ระหว่างงานเขียนต้องปิดมัน
ในบทความของ Andy Hertzfeld ที่ Folklore.org ก็กล่าวผ่าน ๆ ไว้เช่นกัน:
ให้ความรู้สึกเหมือนของจริงมาก และงานก็ยอดเยี่ยม จะเอาสิ่งนี้ไปใช้กับการจำลอง Atari ST ได้ไหม?
ยังมี Clock Signal(CLK) ด้วย อธิบายไว้ว่าเป็น “emulator สำหรับผู้เกลียด latency สำหรับ Acorn Electron และ Archimedes, Amstrad CPC, Apple II/II+/IIe และ Macintosh รุ่นแรก, Atari 2600 และ ST, ColecoVision, Enterprise 64/128, Commodore Vic-20 และ Amiga, MSX 1/2, Oric 1/Atmos, เครื่อง PC compatible รุ่นแรก ๆ, Sega Master System, Sinclair ZX80/81 และ ZX Spectrum”: https://github.com/TomHarte/CLK