On January 24th, 1984, the Macintosh announced, but along with that
announcement came another that not everyone recalls: The introduction
of the Lisa 2.
Reflecting the echoes of that date, I'm announcing the availability of
The Apple Lisa Emulator. While there are still some flaws and missing
features, to address, I've decided that it was more important to honor
the Lisa's January introduction.
You'll be able to download the emulator from here in a few minutes:
http://lisaem.sunder.net/downloads.html
Questions about the emulator should be directed here: lisaem at
sunder.net
Bug reports here: lisaem-bugs at
sunder.net
To use the emulator you will need a copy of the Lisa Boot ROM
(preferably version H) as well as OS software. Please do not ask me to
provide these. If you own a Lisa, you already have legal copies of these.
The emulator currently runs on the following platforms:
* Mac OS X - Intel and G4 PPC.
* Linux - since there are too many distros, I'm releasing a statically
linked X11 binary for 2.6 kernels, which should run on most distros, but
you'll probably want to compile your own version instead.
* win32 (w2k and possibly XP)
The project will also compile and run wherever wxWidgets runs on a unix
like platform (with some tweaks), I'll put up more binaries as time permits.
Source code will be released in about a week or two, licensed under the
terms of the GNU Public License 2.0. There are parts whose quality of
the code isn't as good as I'd want it to be. :-)
Known bugs:
No documentation, at this time there are hooks in the help menu that
point to the website, where I'll fill in documentation. Future releases
will have built in docs.
The raw keyboard routines aren't quite right. Use the ASCII kb mode for
now.
Won't run Xenix - it boots but stops before the shell, likely a VIA bug.
Printing works, but isn't yet completed (spits out ugly postscript files
only at this time, needs wxWidgets integration which I'm currently
working on)
Win32 LibDC42 routines might not be too stable, may cause trouble with
Profiles
Sound isn't perfect, although it does beep on most platforms, the
"click" is treated incorrectly as a beep.
Some of the animation has color issues in some of the BMP's/XPM's - i.e.
floppy insertion
Mouse movement under certain environments isn't quite right (I've
optimized for Lisa Office System.)
When the emulator quits, on OS X, it segfaults (crashes.)
Won't work with Lisa 1 ROMs as there is little support for Lisa 1 HW
emulation at this time.
A few tools I intended to write still need to be written.
Why a Lisa emulator?
There are many reasons to this project, and even more for the decisions
that shaped it.
The most important goal was to preserve the technology behind the Lisa,
and allow future generations to experience a piece of history. If you
search the web, you will find lots of articles, pictures, and even
videos of Lisa's. But these are second hand information, in that they
do not allow you to actually interact with an actual Lisa.
Unfortunately it isn't possible to fully emulate the physical aspects of
a computer. You cannot experience the almost imperceptible 60Hz flicker
of the display, the not-quite paper white, blueish tints of the
phosphor, the yellow glow of the power switch, the heat a Lisa computer
gives off, nor the feel of its keyboard, mouse, or see the curvature of
the CRT on modern LCD and flat CRT displays. But, you can still get
close.
I hope that long after the last functional Lisa is gone from the face of
the earth, that my emulator, as well as the documents that David has
collected, would survive and allow future generations to go back in time
and experience what it was like, to study it, and understand how and why
it was built.
In many ways, as I watched Lisa Office System and MacWorks boot up (via
trace logs), I saw many glimpses into the software design ideals and
practices of the early 80's. I've never been an archaeologist, and
don't really know that experience, I can guess at the rush and thrill of
discovery. Seeing the machine code of various Lisa OS's fly by has been
that experience for me. I could almost understand what the coders that
wrote them were thinking, how they designed things, and why. I could
easily tell what code was hand written assembly by an expert, or novice,
what assembly was generated by compilers.
I don't much expect many to spend more than a few hours with the
emulator, but perhaps there will be a few like minded folks who remember
the Lisa and want more than a stroll down memory lane, or want to learn
what it was about and how it worked who will.
By releasing this as GPL, I'm guaranteeing its future long after I
would loose interest in maintaining it. There are many emulators that
are closed source, or shareware, or that are outright sold, and thus
locked down. These are less likely to survive the ravages of time, and
thus are less valuable in the long view. While I cannot presume that
the libraries and API's upon which this emulator was built will still
exist, I can at least hope that it will be relatively easy to rewrite or
port to future platforms.
I purposefully built the emulator on what some would consider exotic
hardware. (i.e. DEC Alpha) to force me to write portable code. At
various times, I also had it running on the SPARC, PowerPC and Intel
chips. (i.e. a range of 32 and 64 bit CPU's with different designs.)
Although I cannot vouch for it running on SPARC or Alpha at this moment
in time, by building it on varied platforms, I avoided locking myself
into a particular CPU with specific endian issues, and thus exposed more
bugs. While I've only compiled the emulator under variations of GCC
from 2.x to 4.x, I suspect that it will work with other
compilers after
some tweaking.
There is some history to this emulator. A synopsis for those who aren't
yet bored of reading this rant:
This project started in February 1998, when one day I attempted to power
on one of my two Lisa's, and it no longer turned on. I realized that as
with all retro computers, that replacement parts would over time become
scarce to obtain and that repairs would be more and more difficult. In
the interest of preserving the historical significance of these
machines, I thought that an emulator would be one way to preserve them.
Having been inspired by projects of the time such as Executor and vMac,
I naively assumed that this would be an easy project, taking only
perhaps a year or two.
The Lisa is a far more complex creature than I imagined. Luckily, I
managed to find David Craig's contact information, and obtained a ton of
Lisa documentation from him. Most of the Lisa documentation out there
on the web exists because David had carefully collected and cataloged it
over the years. Without his efforts, neither this emulator, nor any of
the spin off emulators would been possible. I would also say that
without his efforts a great deal of Apple history would have been lost
to the ravages of time.
Perhaps a large portion of the remaining Lisas would not be repairable
without this type of information information. (This is why I've spent a
lot of time distilling David's documentation and the knowledge of
LisaList in building the LisaFAQ.)
While I was, at best familiar with the C language, and knew some 68000
assembly, there were a lot of things that I had to teach myself. I've
learned a lot more than I could possibly list here (C, Unix programming,
Xwindows, wxWidgets, deep 68000 coding techniques, low level operating
system stuff, postscript, PCL, anti-aliasing, reverse engineering,
optimization techniques, and so on.) So there was great benefit to me
beyond the emulator itself.
There were many wrong turns taken throughout the lifetime of the
project. Most notably, I originally wrote my own 68000 CPU core, but
scrapped after the generator (
http://squish.net/generator ) core was
recommended by Richard Bannister.
I originally wrote the emulator directly for the XWindow System. Yes,
that's right, raw xlib calls without a toolkit. Writing your own UI in
XLib is quite the exercise in masochism. I didn't replace the xlib UI
with wxWidgets until late 2006. (In 1998, Motif was the main toolkit
out there, but as it was commercial, and since Tk was sort of obsolete,
with not too much else was available, or portable to all platforms. Xlib
seemed to be the right choice. Over time, I stuck with xlib because I
didn't care as much about the UI as much as getting the emulator working.)
I must have rewritten the MMU subsystem at least three times. In hind
sight, I probably over-engineered the last iteration in an effort to
cache the MMU tables, but it works very well.
I probably have spent too much time on sysadmin duties (that is setting
up environments for myself to develop in.) After all, system
administration is my day job. This project was originally born on a DEC
Alpha Multia running on OpenBSD 2.3 or such. I moved it to an old SPARC
running Solaris 2.5.1, then a sparcbook running 2.6, then Cygwin under
w2k, then coLinux under w2k. I now have it running under Ubuntu,
coLinux, win32 and OS X.
As I'm told, there was talk of a Lisa emulator before 1998, but no
actual project had been started. I released my crufty 0.00 version of
the source code back in 98, hence "The World's First" is accurate
enough. As far as I know, this is the only Lisa emulator that is
capable of running the Lisa Office System, hence "fully functional."
(Some would argue this because it doesn't yet run Xenix, but that's less
important to me.)
Of course, all of the documentation I had scanned, and put online
attracted others who wanted to build their own emulators.
Unsurprisingly, they did have some success, but not with Lisa Office
System.
I was disappointed with the competing project, but kept quietly on
working on my own throughout the years. I hid my actual progress since
the emulator wasn't working yet, and besides, it would have only fed the
competition valuable information. I thought he had the advantage, since
he had the whole of the MESS team and library of code for various
devices, while I was writing and rewriting nearly everything from scratch.
It surprises me to this day that despite all of my perceived fumbling,
that he hasn't overtaken me yet! (I suspect that in a few days, or
perhaps weeks, - i.e. sometime after I release my sources, we'll see the
other two competing projects gain the capability of running LOS as well.)
I intentionally let the website look dead to give the impression of
abandonment, while I redoubled my efforts. This became a fun cloak and
dagger kind of game: I only decloaked once, when I though that I was
very very close. One day in May of 2006, I found the secret magic to
make the MMU work. I got the Lisa Office install disk to boot, and
everything started falling into place. I then furiously debugged the
VIA code, and then the ProFile code, and it started to all work. The
SCC came next, along with other fun stuff. I rewrote the imagewriter
code twice over. (Once again, this week, for wxWidgets printing/output,
which isn't in today's release.)
Towards the end of 2006, I purchased the wxWidgets book and reworked the
UI. It'll probably be a few more months before the emulator would be
perfect in my opinion but that would miss the January 19th announcement
anniversary, so early, buggy, release it'll have to be. :-)
I would like to thank the following folks for their numerous contributions:
David T. Craig for the wealth of Lisa information which he allowed me to
scan in, for the many contacts with Lisa developers and faithfully
listening to status reports over the ages,
James MacPhail for all of the hardware help with the Lisa and many
suggestions as to what and how to test, for helping me with the logic
analyzer, for the 68000 help, for the schematics help, for helping me
repair my dead Lisa, for the help with the ProFile protocol, and many
other things I could fill a book with.
James Ponder for his wonderful Generator project, one of the better Sega
Genesis emulators out there, whose CPU core is the heart of the LisaEm
project.
Adam Firester for providing the many years of bandwidth for the project
website,
Steve Hatle for providing Lisa Office documentation, Xenix help,
encouragement, and beta testing,
Brian Foley for beta testing, profiling, and debugging help with OS X,
and fixing nasty display bugs in wxWidgets on OS X,
Chris McFall for advice on the Lisa file system,
Natalia Portillo whose file system work inspired me to build the Lisa
FSH Tool, and later libdc42,
Patrick Schaefer for providing the protocol transitions graphs of the
Profile, which at a glance proved far clearer to interpret than the
official documentation,
Andy Hertzfeld for his amazing
folklore.org website for the numerous fun
stories about the birth of the Lisa and the Mac,
The wxWidgets folks, whose project I wish I made use of a lot earlier,
who have made my life a lot easier,
especially Stefan Csomor who found an early bug in my display routines,
Steven Stengel of
http://oldcomputers.net for the Lisa image used as the
icon in the Mac OS X version.
Raphael Nabet, for disassembling and documenting the I/O ROM, which
shaved about a month off of reverse engineering on my part, even if he
did write a competing emulator. :-)
Gilles Fetis for being the third person to use my dc42 routines. :-)
(Gilles, If you thought those were cool, wait till you see libdc42!)
To all of the folks who have wished for a Lisa emulator, whose requests
and encouragement over the years pushed me to complete this project.
Most importantly, to all of the people at Apple, who worked on the Lisa
over the years, and remember it fondly.
Lisa, Lisa Office System, and the Macintosh were trademarks of Apple
Computer, Inc, now Apple, Inc. w2k/XP are Microsoft's trademarks, etc.
Genesis is trademark of Sega, etc.