3P by GN⁺ | ★ favorite | 댓글 1개
  • Snow는 Motorola 680x0 기반 클래식 Macintosh를 하드웨어에 가깝게 재현해, 오래된 Mac 환경을 현대 시스템에서 다룰 수 있게 함
  • ROM 패치나 시스템 호출 가로채기보다 하드웨어 수준 에뮬레이션을 목표로 하며, 그래픽 UI와 디버깅 기능을 함께 제공함
  • Macintosh 128K부터 SE/30까지 여러 클래식 Mac 모델을 지원해 초기 Mac 계열을 폭넓게 실험할 수 있음
  • Rust로 작성된 MIT 라이선스 오픈소스 프로젝트이며, 제한된 온라인 데모와 설치 문서가 공개되어 있음
  • 안정 릴리스는 GitHub에서 받을 수 있고, 최신 개발 빌드는 테스트가 적은 대신 Windows, macOS, Linux용으로 제공됨

하드웨어에 가까운 클래식 Mac 에뮬레이션

  • Snow는 클래식 Motorola 680x0 기반 Macintosh 컴퓨터를 에뮬레이션하는 프로젝트임
  • 에뮬레이트된 머신을 조작하기 위한 그래픽 사용자 인터페이스와 광범위한 디버깅 기능을 제공함
  • ROM을 패치하거나 시스템 호출을 가로채는 방식이 아니라, 가능한 한 하드웨어 수준에서 Macintosh를 에뮬레이션하는 것을 목표로 함
  • 현재 지원 모델:
    • Macintosh 128K/512K/512Ke
    • Macintosh Plus
    • Macintosh SE, non-FDHD 및 FDHD
    • Macintosh Classic
    • Macintosh II, non-FDHD 및 FDHD
    • Macintosh IIx, IIcx, SE/30

공개 방식과 체험 경로

릴리스와 지원 채널

  • 안정 릴리스는 일정한 마일스톤에 도달했을 때 패키징됨
  • GitHub releases에서 안정 릴리스를 받을 수 있음
  • 최신 개발 빌드(bleeding edge) 는 에뮬레이터 개발 진행에 따라 자동 생성되며, 더 새로운 기능을 포함할 수 있지만 테스트는 더 적음
  • 제공되는 최신 개발 빌드:
    • 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에서 받음
  • 지원이나 대화는 The Opcode Collective Discord#snow 채널에서 가능함

댓글과 토론

Hacker News 의견들
  • 클래식 Mac용 휴대 가능하고 쓰기 쉬운 하드웨어 수준 에뮬레이터가 왜 큰 의미인지 배경을 보려면 2020년 글 https://invisibleup.com/articles/30/을 보면 됨
    게임 콘솔에는 Nestopia, bsnes, Dolphin, Duckstation 같은 에뮬레이터가 오래전부터 있었고, PC 쪽은 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를 실행하게 해서 Macintosh판 솔리테어를 브라우저에서 돌릴 수도 있음: https://archive.org/details/executor
      Executor/DOS 외에도 공개되지 않은 버전이 Sun 3 워크스테이션에서 돌았고, Executor/NEXTSTEP은 NeXT 머신에서 실행됐으며 680x0 기반 기기와 NEXTSTEP을 돌릴 수 있는 x86 PC 모두를 지원했음
      Executor는 Apple의 지식재산을 전혀 쓰지 않았기 때문에 호환성이 가장 낮았고, ROM과 시스템 소프트웨어 대체물은 Apple ROM이나 System 파일을 분해하지 않은 클린룸 구현이었음
      Linux 포트가 있긴 하지만 빌드하기 어려울 가능성이 큼. 80386에서 성능을 최대한 끌어내려고 합성 CPU가 gcc 전용 확장에 의존했기 때문임
      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 플로피만 불러오라고 나옴
      그래서인지 지금까지 넣어본 모든 플로피 이미지가 즉시 배출됐고, Mac II와 호환된다는 800K System 7.1.1 디스크도 마찬가지였음
      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 파일은 어디서 구할 수 있음?
  • 대학 졸업 직후 초기에 했던 작업 상당수가 Mac 포맷 Bernoulli 디스크 더미에 저장돼 있음
    소프트웨어 실행에 ADB 동글이 필요해서 실제 하드웨어가 필요함. ADB-USB 어댑터 중에 에뮬레이터로 매핑할 수 있는 게 있을지 궁금함
    • 내가 아는 ADB-USB 어댑터는 모두 마우스와 키보드만 지원하고, 내부 펌웨어가 USB HID로 매핑함
      에뮬레이터로 원시 패스스루를 하려면 커스텀 펌웨어를 작성해야 할 것 같음. 아마 소프트웨어를 크랙하는 편이 더 쉬울 수 있음
    • 아직 백업하지 않았다면 그 데이터는 이미 사라졌을 수도 있음
      가치 있는 데이터라면 늦기 전에 확인해보는 게 좋음
    • 작동하는 Bernoulli 박스를 가진 사람이라면 아마 그에 맞는 오래된 Mac도 같이 갖고 있을 가능성이 큼
    • 이게 될지도 모름: https://www.bigmessowires.com/usb-wombat/
  • 쉽게 구할 수 있는 표준 Mac OS 7.1 설치 디스크와 Mac Plus ROM으로 불러와봤는데, Drive 0에서 디스크가 배출됨
    Mini vMac은 동작하는 걸 보면 아직 개선이 필요해 보임
  • SE, II 등에 대해 HD20 지원이 “해당 없음”으로 표시된 게 의외임. II를 제외한 목록의 모든 모델은 ROM에 HD20 부팅 지원이 있는 것으로 알고 있음
    실제 Mac SE에서도 HD20 에뮬레이터를 쓰고 있음
    임의 크기의 디스크 이미지를 Mac 에뮬레이터와 실제 플로피 에뮬레이터 양쪽으로 가져가는 가장 편한 방법 중 하나임
  • Rust로 다시 구현한 68K 에뮬레이터라서, C로 된 잘 알려진 CPU 코어인 Musashi나 UAE 코드와 공유하는 부분이 없음
  • Mac도 Lisa처럼 하드웨어의 사이클 정확 에뮬레이션이 필요한가? lisaem을 써보고 Qemu로도 실험해봤지만, Lisa OS는 하드웨어 타이밍에 대해 Qemu가 맞출 수 없는 가정을 함
    • 초기 Mac은 IWM을 썼는데, 기본적으로 Wozniak의 1977년 Disk II 컨트롤러를 칩 하나로 줄인 것임
      Apple II에서 쓰던 것과 같은 사이클 정확 코드 기법이 Mac에서도 쓰였음
      디스크에 쓰는 동안 커서가 가끔 멈추는 이유도 이 때문임. Mac에는 커서도 추적하는 60Hz 인터럽트 타이머가 있는데, 쓰기 작업 중에는 꺼야 함
      Folklore.org의 Andy Hertzfeld 글에도 지나가듯 나옴:

      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의 특이한 디스크 기법들도 이론상 Mac에서 가능했을 것 같음. 실제로 복사 방지에 쓰였는지 궁금함

  • 정말 실물 같은 느낌이고 작업이 훌륭함. 이걸 Atari ST 에뮬레이션에도 쓸 수 있을까?
    • Hatari가 이미 훌륭하지 않나? https://github.com/hatari/hatari
      Clock Signal(CLK)도 있음. “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 호환기, Sega Master System, Sinclair ZX80/81과 ZX Spectrum을 위한 지연시간을 싫어하는 에뮬레이터”라고 설명함: https://github.com/TomHarte/CLK