Home ·
About ·
Contact ·
Products
Regarding SheepShaver
This page is now of historical interest only, because all of the changes described below
(and more)
have since been delivered into the official source tree.
The page is being left up for the time being because I know that some people have linked to it,
but there is no longer any reason for anyone to come here for SheepShaver builds.
Introduction
I use an open-source emulator called
SheepShaver to run Mac OS 8.6 on an Intel-based MacBook Pro with macOS,
which has let me continue to use the venerable application
MacMoney long after the demise of classic Mac OS.
SheepShaver is not without its problems, but since the source code is available,
those willing to expend some effort have the opportunity to track down and fix any
bugs they might run into.
Many thanks to the developers and maintainers of
SheepShaver,
Basilisk II (upon which SheepShaver builds)
and the SDL library,
for all of their hard work, and for making their source code publicly available.
Bug Fixes
The three bugs that have irked me the most in using SheepShaver, in descending order of annoyance, have been these:
-
MacMoney is unable to read data files stored in the host computer’s filesystem,
appearing to think that they are corrupted.
-
If you move your mouse cursor in and out of the SheepShaver window a number of times
(somewhere around 30 or 40 times will do it), SheepShaver appears to lock up.
Although it is still running, it ignores mouse-clicks and keystrokes, and you have to force-quit.
-
The position of the text cursor (I-beam cursor)
seems to be off by several pixels.
I've tracked these bugs down and built a version of SheepShaver with fixes or workarounds.
My bug reports and source-code changes are being submitted to the developers for their consideration.
Until such time as the bugs are fixed in official source trees, I am making available a snapshot of my
current SheepShaver builds, which you will find linked at the bottom of this page.
These builds currently include the following changes:
-
MacMoney’s inability to read data files stored in the host computer’s filesystem
results from a bug in Basilisk II’s external filesystem implementation,
which can result in a seek operation failing to change the file position.
The fix is to mask off the application-specified ioPosMode parameter appropriately
in extfs.cpp:fs_set_fpos(), as is done elsewhere in the same source file.
-
The mouse lockup problem occurs because SDL posts application activate/deactivate events
to its event queue when the mouse moves in/out of the SheepShaver window, but SheepShaver
(or rather, Basilisk II)
never consumes these events and as a result, the event queue fills up.
Thereafter, no new events can be posted, and user inputs are ignored.
The fix is to consume SDL_ACTIVEEVENT in video_sdl.cpp:handle_events().
An alternative would be to disable these events from being generated.
-
The I-beam cursor position issue results from an inability to determine the correct
“hot-spot” when changing the cursor image; as far as I can tell,
this information is simply not available to the SheepShaver video driver.
The best fix I've been able to devise for this involves a combination of techniques
and relies on the observed behavior of the emulated Mac OS.
It cannot be guaranteed to get the right answer in all circumstances, but in practice
it works very well and for all cursors.
-
Have you noticed that SheepShaver never hides the cursor, even when
you would expect that to happen?
For example, Mac OS normally hides the cursor
while you are typing in a textfield, and reveals it again when you move the mouse.
My video driver changes include a fix for this as well.
-
You may also have noticed that command-clicks and option-clicks don’t work
in the emulated Mac OS.
This is because the SDL library maps command-click to right-click,
and option-click to middle-click; I view this behavior as useless for SheepShaver, so
I’ve disabled it by adding an SDL_HAS3BUTTONMOUSE
environment variable to the application’s environment
prior to SDL initialization.
-
I’ve made a few other minor changes that should have no user-visible effect other than
to reduce the amount of console log output generated during a normal run of SheepShaver.
I mention these only because they are included in the builds available below (and of course,
in the source-code diffs).
SheepShaver Snapshot
Linked below is a snapshot of my current SheepShaver builds.
Before you even think about downloading them, consider the following:
-
These builds are in no way official.
I am just some random guy on the internet, and you have no way of knowing what
evil malware I might have embedded in this version of the application.
Build from source code if you can.
-
These builds come with no guarantees.
They work for me, but on your system they will probably crash and take all of your data with them.
-
There is no assurance that my fixes, or something better, will ever appear in the
official source tree.
My development snapshot could diverge from official builds,
leaving you to choose between them.
The zip file linked below contains two versions of SheepShaver.
One (H) is linked with SDL version 1.2.10 and uses a “hardware cursor” approach
that requires the cursor fixes described above.
This is the version that I personally prefer, but your mileage may vary.
The other (S) is linked with SDL version 1.2.13 and uses a “software cursor” approach,
in which the emulated Mac OS is responsible for drawing the cursor and determining its hot-spot.
There are no other differences between the two versions.
The reason for linking with two different versions of the SDL library is that the
hardware cursor approach works only with older versions of SDL, and the software cursor
approach works only with newer versions.
If I ever manage to resolve this, I'll make the cursor choice into a runtime option.
These are Intel-only builds,
created with gcc 4.0.1 on macOS 10.4.11
using SDL source release 1.2.10/1.2.13, the latest Basilisk II and SheepShaver source code
from CVS, and the code changes described above.
I have not tested them on anything other than macOS 10.4.11,
and I have not used them to run anything other than Mac OS 8.6,
with the ROM from Mac OS ROM Update 1.0.
Update:
All of the changes described above (and more)
have now been delivered into the official source tree.
There are no longer any builds available here, but you should be able to
find recent builds for macOS
at the Emaculation SheepShaver forum, via the link below.
Emaculation Forums
Code Changes (old)
How To Build