3 คะแนน โดย GN⁺ 2025-06-28 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 2025-06-28
ความคิดเห็นจาก 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

    • ยังมี Executor ด้วย แม้ความเข้ากันได้จะด้อยกว่าตัวอื่นมาก: https://en.wikipedia.org/wiki/Executor_(software)
      สามารถให้เบราว์เซอร์อีมูเลต 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 แบบสังเคราะห์หรือระบบย่อยด้านสี เป็นผลงานของโปรแกรมเมอร์ที่เก่งกว่าผมมาก
    • บทความนั้นถูกต้องในเชิงข้อเท็จจริง แต่ไม่เคยเห็นการด้อยค่างานหนักที่ผู้คนทำกันฟรี ๆ แบบประหลาดขนาดนี้มาก่อน
    • อาจเรียกได้ไม่เต็มปากว่า “เป็นมิตรกับผู้ใช้” แต่ MAME อีมูเลต Macintosh และ Apple II ใน ระดับฮาร์ดแวร์
      มันแม่นยำกว่า KEGS หรือ AppleWin และจัดการอุปกรณ์ต่อพ่วงได้มากกว่า แต่เป็นมิตรกับผู้ใช้น้อยกว่า
    • ผมบูตอีมูเลเตอร์ Macintosh II FDHD ได้แล้ว แต่ถึงคู่มือ Snow จะบอกว่าอีมูเลเตอร์ Mac II FDHD มี SuperDrive สองตัว https://docs.snowemu.com/manual/media/floppies เมนูของอีมูเลเตอร์กลับให้โหลดได้แค่ฟลอปปีดิสก์ 400K/800K
      อาจเป็นเพราะเหตุนี้ อิมเมจฟลอปปีดิสก์ทุกตัวที่ผมลองใส่จนถึงตอนนี้จึงถูกดีดออกทันที รวมถึงดิสก์ System 7.1.1 ขนาด 800K ที่ระบุว่าเข้ากันได้กับ Mac II ด้วย
      Snow มีศักยภาพมากและผมนับถือความพยายามที่ลงไป แต่พูดตรง ๆ ภูมิทัศน์ของการอีมูเลต Mac จนถึงตอนนี้ยังดูไม่ต่างจากเดิมมากนัก ดูเหมือนยังเป็นสถานะที่มีอีมูเลเตอร์หลายตัวให้ เมทริกซ์ผลิตภัณฑ์ที่ตะปุ่มตะป่ำ ของฮาร์ดแวร์ที่อีมูเลตและฟีเจอร์ที่รองรับ ต้องใช้ขั้นตอนมากมายและความรู้ล่วงหน้าเกี่ยวกับโครงสร้างภายในของ Mac รุ่นเก่า และยังอยู่ในสภาพที่ให้คำมั่นกับอนาคต
    • อีกจุดที่ไม่ควรลืมคือ MAME ก็รองรับ 68k Macintosh อยู่ในระดับหนึ่ง
      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 ที่ใช้ได้จากไหน?

    • https://macintoshgarden.org/ เป็น แหล่งมาตรฐานสูงสุด สำหรับผมมาโดยตลอด
    • อันนี้ดูเหมือนจะใช้ได้: https://archive.org/details/mac_rom_archive_-_as_of_8-19-201...
    • ค่อนข้างเหลือเชื่อที่ Apple ยังฟ้องคนที่เอา ROM เก่า ๆ พวกนี้ขึ้นออนไลน์อยู่
  • งานจำนวนมากที่ผมทำไว้ช่วงแรก ๆ หลังจบมหาวิทยาลัยถูกเก็บอยู่ในกอง ดิสก์ Bernoulli ฟอร์แมต Mac
    ซอฟต์แวร์ต้องใช้ดองเกิล ADB ถึงจะรันได้ เลยต้องมีฮาร์ดแวร์จริง สงสัยว่าจะมีอะแดปเตอร์ ADB-USB ตัวไหนที่แมปเข้าอีมูเลเตอร์ได้ไหม

    • อะแดปเตอร์ ADB-USB ที่ผมรู้จักทั้งหมดรองรับแค่เมาส์กับคีย์บอร์ด และเฟิร์มแวร์ภายในจะแมปเป็น USB HID
      ถ้าจะทำ raw passthrough เข้าอีมูเลเตอร์ น่าจะต้องเขียน เฟิร์มแวร์แบบคัสตอม เอง บางทีการแคร็กซอฟต์แวร์อาจง่ายกว่าด้วยซ้ำ
    • ถ้ายังไม่ได้สำรองข้อมูล ข้อมูลนั้นอาจหายไปแล้วก็ได้
      ถ้าเป็นข้อมูลที่มีค่า ควรตรวจสอบก่อนจะสายเกินไป
    • คนที่มีกล่อง Bernoulli ที่ยังใช้งานได้ ก็น่าจะมี Mac รุ่นเก่าที่เข้ากับมันได้อยู่ด้วย
    • อันนี้อาจใช้ได้: https://www.bigmessowires.com/usb-wombat/
  • ลองโหลดด้วยดิสก์ติดตั้ง 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 ทำให้ตรงไม่ได้

    • Mac รุ่นแรกใช้ IWM ซึ่งโดยพื้นฐานแล้วคือการย่อคอนโทรลเลอร์ Disk II ปี 1977 ของ Wozniak ให้เหลือชิปเดียว
      เทคนิค โค้ดแบบ cycle-accurate แบบเดียวกับที่ใช้ใน Apple II ก็ถูกใช้ใน Mac ด้วย
      นี่จึงเป็นเหตุผลที่เคอร์เซอร์หยุดเป็นครั้งคราวระหว่างเขียนดิสก์ ใน Mac มีตัวตั้งเวลา interrupt 60Hz ที่คอยติดตามเคอร์เซอร์ด้วย แต่ระหว่างงานเขียนต้องปิดมัน
      ในบทความของ Andy Hertzfeld ที่ Folklore.org ก็กล่าวผ่าน ๆ ไว้เช่นกัน:

      Woz's disk technology required that the software feed it new data every 32 microseconds exactly. If we were even a single microsecond early or late, it would cause a glitch in the data and ruin it. In order to write the routines, I needed to know how fast the Macintosh executed each instruction. The manual gave the number of clocks for each instruction, but I wasn't sure how long it took to fetch from memory. So of course, I asked Burrell what the timings were, but I was surprised at his response.
      "I don't know. The Mac is synchronous, just like the Apple II, so each instruction has the same timing, every time you execute it, so you will be able to write disk routines that have exact timing. I don't know what it is, so we'll just measure it. Why don't you write your routine and we'll measure it with the logic analyzer."
      -- https://www.folklore.org/Nybbles.html
      พอเห็นแบบนี้ก็รู้สึกว่าเทคนิคดิสก์แปลก ๆ ของ Apple II อย่างแทร็กแบบเกลียว เซกเตอร์ขนาดต่างกัน และวิธี nibblization หลากหลายแบบ ก็น่าจะเป็นไปได้ในทางทฤษฎีบน Mac ด้วย อยากรู้ว่าจริง ๆ แล้วถูกใช้กับ การป้องกันการคัดลอก หรือไม่

  • ให้ความรู้สึกเหมือนของจริงมาก และงานก็ยอดเยี่ยม จะเอาสิ่งนี้ไปใช้กับการจำลอง Atari ST ได้ไหม?

    • Hatari ก็ดีเยี่ยมอยู่แล้วไม่ใช่หรือ? https://github.com/hatari/hatari
      ยังมี 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