Skip to content

Latest commit

 

History

430 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Granny Smith

CI License: MIT

Granny Smith is a browser-first Macintosh and Apple Lisa emulator spanning everything from Lisa 2 to Power Macintosh and more that 15 computer models in between.

See it: Demos of PlainTalk speech recognition, A/UX, Marathon, and more

Try it: Run Granny Smith in your browser Use Chromium browser (Safari and Firefox have known issues)

Live webcam video digitized by the emulated 840AV

Emulated Computer Models

In all models, the original ROMs runs without patches, and all on-board devices the software touches are emulated in enough detail to allow original device drivers to work.

  • Apple Lisa 2 and Macintosh XL
  • Macintosh Plus
  • Macintosh SE/30, IIx, and IIcx (the "GLUE" family)
  • Macintosh IIfx
  • Macintosh IIci and IIsi (the "MDU" family)
  • Macintosh Quadra 700, 900, and 950 (the "MCU" family)
  • Macintosh Quadra 840AV and Centris 660AV (the "AV" family)
  • Power Macintosh 6100, 7100, and 8100 (the "PDM" family)
  • Power Macintosh 7500, 8500, and 9500 (the "TNT" family)

Emulated NuBus Display Cards

NuBus display cards can be seated in any machine with free slots, including machines that already have built-in video. Each card runs either from a dump of the real declaration ROM or from a runtime-generated generic declaration ROM (no ROM dump is required); the generic ROM can also synthesize custom resolutions (e.g. 800×600)

  • Display Card 8•24 (the standard "JMFB" card)
  • Display Card 24AC (including hardware QuickDraw acceleration)
  • Display Card 8•24 GC (including hardware QuickDraw acceleration)

Emulated PCI Diplay Cards

PCI cards require at this point a real ROM image to work.

  • ATI Mach64 GX (Apple "Accelerated" PCI Card) (including 2D hardware acceleration)

Verified Guest/Target Operating Systems

The emulated computer models have been tested with various combinations of the following operating systems:

  • Mac OS System 2 to 7.6
  • A/UX 3.0.1
  • Lisa Office System 3.1
  • Lisa Xenix 3.0
  • Lisa MacWorks XL 3.0
  • Copland D11E4
  • MkLinux DR3

Work In Progress

  • Apple Network Server 500 and 700 running AIX 4.1.5
  • Power Macintosh 9500MP running BeOS
  • Voodoo2 PCI Card

Project Principles

Two principles guide the project: stay true to the hardware, and keep it simple. That may sound like a contradiction, as faithful hardware emulation rarely is simple, but we try to find a sweet spot between the two:

True to the hardware means that compatibility is achieved by behaving like the real underlying hardware, not by patching around differences. Machines boot their original, unpatched ROMs, and every needed on-board device the software touches is modeled. Chip behaviour is pinned against Apple documentation, chip datasheets, Apple's own system software sources.

Keeping it simple means for users that the emulator runs in the browser with no installation. For developers, it means a highly portable C99 core with no special runtime requirements, no JIT or code generators, relying on the compiler and modern hardware to acheive "enough" performance. Extensive automated tests keep verification simple, and the entire project has been created to be AI agent friendly.

Getting Started

You will need a ROM image and a bootable system disk image for the machine you want to run.

  1. Open Granny Smith in any modern browser
  2. On first launch, upload a ROM for your chosen model (anything from the Macintosh Plus to the Power Macintosh 8100, or a Lisa); it is persisted in the browser's OPFS storage, so you only need to do this once
  3. In the Machine Configuration dialog, pick a model, choose RAM, and attach disk images to the floppy / SCSI / CD slots (and display cards to NuBus slots)
  4. Click Boot - your session is checkpointed continuously in the background, so closing or reloading the tab won't lose state
  5. Once running, you can drag-and-drop additional disk images directly onto the screen to insert them at runtime

Disk images can be raw (.dsk, .img), compressed (.sit.hqx), or packaged in .zip archives. They are decompressed transparently via the in-tree peeler library.

For build, test, and contribution instructions, see CONTRIBUTING.md. Architecture and design docs live in docs/guide/ARCHITECTURE.md, and coding guidelines in AGENTS.md.

Known Limitations

  • Safari - known rendering and audio issues; not currently supported
  • Firefox - works partially; some compatibility problems remain
  • Ethernet - the Quadras' SONIC and the AV machines' MACE controllers are modeled at the register/self-test level but are not bridged to a network; networking is AppleTalk over LocalTalk (serial) only
  • Sound input - not modeled on any machine; the Quadras' EASC currently runs as an ASC-compatible core, and the AV machines' Singer/AWACS sound is not modeled at all
  • LaserWriter - printer is identified, but print jobs don't complete correctly

A Note on AI

This project allows the use of AI (my project, my rules). This is not limited to code generation or code review; it also includes documentation and reverse engineering of the hardware involved. There is no intention to track, at the file or commit level, which code was generated with AI assistance and which was not. I know that AI may be a red flag for some people, and I fully respect that.

Acknowledgments

Trademarks

All trademarks referenced in this project are the property of their respective owners and are used for identification purposes only. This project does not claim any endorsement by or affiliation with the trademark holders.

License

MIT

About

Macintosh and Apple Lisa emulator in the browser: From Lisa 2 to PowerMac 9500, booting unmodified ROMs into Mac OS, A/UX, MkLinux, Lisa OS, and Xenix

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

9 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages