www.gryphel.com/c/news/oldnews - feedback

Gryphel Project

Old News

June 19, 2016

Today’s Mini vMac 3.4.1 is the first beta of the 3.4.x branch. The Changes page lists differences from current stable 3.3.3 version. (The only change in the source code from the last Development snapshot is the version number.)

The main reason for moving towards a new stable version now is that improvements to the build system in the 3.4 branch make it work smoother with the Mini vMac Variations service. (See the Mini vMac 3.4 Variations beta service.) The standard variation (with Macintosh Plus emulation) is little changed from the 3.3 branch. The core CPU emulation is identical. The main new feature in 3.4 is build time options for the initial values in Parameter RAM. (These options are supported by the Variations service.) And that sound is improved in the Mac II emulation.

In other news, there is a new version of FDisasm that can correctly disassemble the Macintosh PowerBook 100 ROM. (MPW Assembler gets back the original binary.) Even though the PowerBook 100 has a 68000 CPU, this ROM has some 68020 code. FDisasm can now better handle the full extension word format of addressing mode 6, the absolute long addressing mode, and the Bitfield instructions. The disk images with the PowerBook 100 formatting information has also been updated.

MacLynx has been added to the software hosted by the Gryphel Project. In addition, NCSA Mosaic, that before was only linked to, is now hosted.

June 12, 2016

Today's Mini vMac Development source snapshot has a few more tweaks to sound for Macintosh II emulation. It now clears the FIFO buffer when changing the enable mode to FIFO, or when changing mono/stereo mode when in FIFO mode. In addition, one ReportAbnormal message is now suppressed, about a word sized write to VIA1 that occurs on shutdown in System 6.

MacPerl and Little Smalltalk are added to the software hosted by the Gryphel Project. In addition, some more software is now hosted by the Gryphel Project that before was only linked to: Pocket Forth, UCB Logo, Open Prolog, ProIcon, MacGofer, Caml Light, and MacABC.

June 2, 2016

There is a new Mini vMac Development source snapshot, with much improved sound in the Macintosh II emulation. It is not perfect, but good enough that sound is now enabled by default for Macintosh II in the build system. Variations 5358 and 5359 on the Latest Variations page have this Macintosh II emulation for Intel OS X and Windows. Calls to “ReportAbnormal” are now strewn throughout the code emulating the Apple Sound Chip, so it will tend to give warnings when ever it strays from states that have been tested.

Besides lots of experimentation and debugging, the asc.cpp source file of the MESS emulator was helpful. MESS has lately been merged with MAME, and now under GPL and BSD licenses.

Some more software is now hosted by the Gryphel Project instead of only linked to: MacGambit, Chipmunk BASIC, MacMETH, Yerk, and Mops.

May 26, 2016

Jesús A. Álvarez (Zydeco) has updated his iOS port of Mini vMac. It no longer requires a jailbreak, instead you build it yourself in Xcode (which is free). It works in iOS 7 through iOS 9, is based on Mini vMac 3.4, and has some new features.

Today’s Development source snapshot fixes a bug reported in the Windows version, when compiled with recent development tools. It turns out to have been passing invalid flags to CreateWindowEx, since Mini vMac verion 0.1.1 (the first version to support Windows).

Also there are three additional build system options for initial values in the Parameter RAM: “-mnb” for Menu Blinks, “-kyt” for Keyboard Repeat Threshold, and “-kyr” for Keyboard Repeat Rate.

And also, the SDL 2.0 port now supports drag and drop.

I've added Metronome to the software hosted by the Gryphel Project. In addition a lot more software is now hosted by the Gryphel Project, that before was only linked to. Including almost everthing in Arcade Games, Other Games, Text Editors, Programming Tools, Math, and Astronomy.


Thanks to Chaled Schmidt, Michael Roberts, Matteo Trevisan, Leo Tognella, Bo Winqvist, Michael Roberts, and David OConnor for sponsoring the Gryphel project, including over nine months of web hosting.


January 9, 2016

There is a new Mini vMac Development source snapshot, which adds support for the Simple DirectMedia Layer 2.0 API (the older 1.2 API was previously supported), based upon a port by Manuel Alfayate, after this discussion. The build system option is “-api sd2”.

A new build system option “-dct” selects the initial value of Double Click Time (the maximum time between mouse button clicks which will be treated as a double click) in the Parameter RAM.

June 10, 2015

There is a new Mini vMac Development source snapshot, which updates the build system to support current development tools from Microsoft and Apple. The “-ev” option now supports Apple Xcode 6.3.2, Xcode 6.2, Xcode 4.6.3, and the 6.4 Beta. Though not tested, Xcode versions in between should also work. And for Microsoft, the “-ev” option supports Visual Studio 2013, Visual Studio 2012, and Visual Studio 2015 RC.

There actually doesn’t seem to be much change to the file formats for these IDEs. The only change to Mini vMac build system is to just write different version information. A few more changes were needed to the Mini vMac source code due to compiler and API changes. And also both IDEs now include source code analysis tools, which found a few things to fix, and to change just to avoid warnings.

The Carbon version of Mini vMac can not be compiled with recent Xcode, instead the Cocoa version must be used (with the “-api cco” option).

March 6, 2015

There is a new Mini vMac Development source snapshot, which fixes several reported bugs, adds a couple compile time options, and makes a significant change in how the platform independent and platform dependent code interact.


Thanks to Stephen Chamberlin, Marc Schaedle, Chaowang Zhang, Daniel Shuman, Ursula Katoll, Edward Mendelson, and Gottfried Haider for sponsoring the Gryphel project web hosting with Rackspace for February, January, December 2014, August, July, May, April, and March. (I've returned to the previous method of accounting for how donations are used.)


bug fixes:

* The OS X version of Mini vMac was using the wrong syntax for the value of the LSRequiresCarbon key in the Info.plist file in the application bundle, as reported by Ryan Schmidt.

* The Linux, and other X, versions of Mini vMac would crash when exporting a file, if the “out” folder in the application directory didn't exist, and Mini vMac lacked permission to create it, due to not properly handling errors in the routine “FindOrMakeChild” in the source file “MYOSGLUE.c”, as reported by Éric of Montréal.

* The Linux, and other X, versions of Mini vMac can crash if the HOME environment variable is not set, due to missing error checking (which in turn was due to incorrectly disabling an alternate implementation), as reported by fzn.

* The Linux, and other X, versions of Mini vMac will now look for the ROM image in the application directory before looking in the “~/.gryphel/mnvm_rom”, instead of after, to match the behavior of the other ports. This makes it easier to have a ROM image for general use, and still be able try out another ROM image.

* The autoscroll feature (used in full screen mode when the emulated screen size is larger than the real screen) would not work when the emulation was stopped (using the “Stopped toggle” in the “S” command of the Control Mode).

* In the Cocoa port, Mini vMac would fail to mount a disk image located on a file system that doesn't support locking. It now checks the result from the flock call, and only prevents mounting if the file is already locked, and doesn't prevent mounting for other errors.

* The WinCE version wouldn't compile. WM_INPUTLANGCHANGE changed events used by the new keyboard unscrambling code for Windows don't seem to be present in WinCE.

new compile time options:

* A new build system option “-svl” selects the initial value of the Sound Volume in the Parameter RAM.

* A new build system option “-sss” selects the output Sound Sample Size.

some internal changes with visible consequences:

* To make Mini vMac simpler and more maintainable, the interaction between platform dependent code and platform independent code has been changed a bit. Instead of the platform dependent code calling a routine to emulate one tick (sixtieth of a second) whenever appropriate, the main loop of the program is now in platform independent code, which periodically calls platform dependent code to check for events. A visible consequence of this is that the emulation will now stop running in certain circumstances when it used to continue running, such as during the open disk image dialog. The exact situations this happens varies for each platform.

* To minimize glitches in sound output when emulation starts, stops, or just isn't running fast enough, the sound call back functions in the various Macintosh versions and the SDL version will now try to play an appropriate transition in each of these circumstances.

* In the Cocoa port, when the platform dependent code checks for events, rather than using a time out value, it turns out there is a bit less overhead to check for events, sleep, and then check for events again. This allows matching the performance of the Carbon version, making the Cocoa version more ready for prime time. (Apple has declared Carbon very, very deprecated.)

The same fix actually also applies to Carbon. Mini vMac used to use a standard Carbon event loop with a complicated system of timer events only because a manual event loop didn't get quite as good performance. With this change, all ports can use the same platform independent event loop, as described above.


In other not so recent news, a number of bug reports by Steve Chamberlin led to improving FDisasm enough so that its output for the Macintosh Plus ROM can be fed to the MPW Assembler and get back the original ROM. This also works for the Mac 128/512 ROM, and the Mac SE ROM.

December 12, 2014

I've received permission to add Data Desk 7.0.3 to the software hosted by the Gryphel Project. A tool for Exploratory Data Analysis first released in 1986, Data Desk is one of the oldest Macintosh programs still actively developed and sold (for OS X and Windows). A version for Macintosh 680x0 is now freeware to honor Data Desk’s origin.

There are a few changes in the Mini vMac development version in recent months that I hadn't documented previously:

The Virtual-Key Codes of Microsoft Windows, that are independent of differences in keyboard hardware, turn out not to be independent of the choice of Keyboard Layout. Changing the Keyboard Layout to something other than "US" may scramble the Virtual-Key Codes, strangely enough. Mini vMac will now check the current Keyboard Layout, and attempt to unscramble the codes, so that the Keyboard Layout chosen in Macintosh operating system running within Mini vMac will work properly. There is a new build option to disable this fix, -ikb 0, because this is fairly large amount of code and US only users don't need it. But also because I'm not sure I really understand this. Why has no one complained about this issue in the last decade?

Mini vMac on Microsoft Windows will now recognize the Virtual-Key code of VK_OEM_102, and translate it to the Macintosh key code of 0x0A. This key is used for angle brackets in the German keyboard layout, for example.

A new build system option “-cbt” selects the initial value of Caret Blink Time (Rate of Insertion Point Blinking) in the Parameter RAM.

Added build system option “-t fbpc” for FreeBSD on PowerPC.

Added build system option “-t cpu”, to provide a starting point for compiling a combination of operating system and CPU that is not yet supported.

October 7, 2014

Mini vMac is moving back to its original home: "http://www.gryphel.com/c/minivmac". The web pages from SourceForge should now all be moved, but the file downloads are currently still on SourceForge. A few pages not directly about Mini vMac itself are also moved and accessible from "http://www.gryphel.com/".

There is no longer separate documentation for the current stable version (3.3.3) and the version in development (3.4.0 alpha). There is one set of documentation, that in places notes changes in the alpha version.

Please let me know if you notice anything broken.

July 29, 2014

I've added MacPaint 1.3 to the software hosted by the Gryphel Project. MacPaint was one of the very first applications available for the Macintosh, written by Bill Atkinson, the author of QuickDraw, the core Macintosh graphics library.

In 2010 the source code of MacPaint was donated by Apple to the Computer History Museum, for non-commercial use. I compiled the application from this source, and am making the result publicly available, after receiving assurance that this is a permitted use.

I modified the source to compile in MPW Pascal, so my version is not identical to the original. I have added to the version string and the about dialog, to note that this is a modified version.

July 27, 2014

I've added True Clock to the software hosted by the Gryphel Project.

July 25, 2014

Joseph V. Barrile has created and donated a second alternate Mini vMac icon.

May 20, 2014

Today’s development version fixes a bug reported by Ryan Schmidt, in the new “Export” command of the Build System, where the initial name of the file in the Save dialog was not initialized.

March 19, 2014

MiniUnZp is a new application to use in Mini vMac to unzip a compressed archive created by OS X, preserving some of the Macintosh specific information: the file type, the file creator, and the resource fork. It is currently extremely preliminary, but it functions, and may be useful as is. MiniUnZp is based upon Info-ZIP code copyright Mark Adler and many others.

MiniUnZp was created by starting from the Info-ZIP unip code, and stripping out anything not needed to unzip a single archive named "arc.zip" on OS X. Next, this code was made to compile for Mac 680x0, by creating a library that implements c library functions, using the Classic Mac API. Only the very minimum amount of c library functions needed for MiniUnZp were implemented. Still this library could be useful for other projects, and gradually expanded. After this was gotten working, a post processing pass was created to look for the Macintosh specific information that OS X saves in a folder “__MACOSX”, and another pass to delete (for now) “.DS_Store” files.

The next step would be to merge the unzip code and the library glue to create a better Macintosh port. In particular, to make file handling more native. Also it would be better to use Macintosh handles rather than allocating pointers.

March 15, 2014

In today’s development version:

The Build System window now has a progress indicator. The last development version merged in code from ExportFl to support dropping files onto the application icon, and today’s version merges in more code for additional features. The progress indicator at the bottom of the window can display information about what is going on. Clicking on it is equivalent to choosing the “Go” command from the File menu. The Build System can now potentially allow the user interface to remain functional while processing. But calls have to be added to the processing code to allow this, calls that report progress and can yield time to the user interface code.

The Build System now supports drag and drop (when the drag and drop operating system software is present) onto its window, which has equivalent function to dropping a file on the application icon.

The Build System has a new “Import” command in the File menu, which has equivalent function to dropping a file on the application icon.

The Build System has a new “Export” command in the File menu, which saves the window’s contents to a new file, that the “Import” command can read. The new file has the creator set to the Build System, so double clicking on the file will work. The Build System application defines an icon for the files it saves.

It does not make sense to combine the build options “-magnify 1” (to start with magnification on) and “-mf 1” (to disable magnification), and the Build System now prevents this.

March 9, 2014

In today’s development version:

I've added a requested feature that can help in automating the build process. Files can now be dropped onto the build system application icon. This is equivalent to copying the contents of the file, and pasting it into the build system window after removing any existing text (such as by the ‘Select All’ and ‘Clear’ commands), and then choosing the ‘Go’ command. Multiple files can be dropped, and they will be all be processed. (Though if there is an error, that error is reported, and all remaining files are forgotten.) If the build system application was not yet running when icons are dropped on it, then the application automatically quits after processing all the files. Other ways of generating kAEOpenDocuments apple events, besides dropping files on the application icon, should also work, such as AppleScript.

March 5, 2014

In today’s development version:

Changed URL displayed in about screen to "../../c/minivmac/alpha.html".

The Pocket PC version wouldn't compile with "-im 1". Removing the call to GetShortPathName for Pocket PC allows it to compile, but then registration won't work if the path of the application contains spaces. Upon further investigation, it seems all that is needed is to put the application path in quotes when setting registry entries, so GetShortPathName isn't needed. So have made this change for both Pocket PC and the regular Windows version.

Renamed the Build System application to include branch information - "MnvM_b34". This makes it easier to deal with the Stable and Development branches at the same time.

Prevent warning about unused code when using options "-var-fullscreen 0 -fullscreen 1 -mf 1".

The Build System now generates a compile time check in a configuration file when compiling with gcc for x86-64 or x86-32, to make sure the 64 bit configuration is not compiled with a 32 bit compiler, or vice versa. This can result (especially when used with "-no-asm"), in a binary that almost but doesn't quite work correctly. The check is for the wrong predefine being present, rather checking that the correct predefine exists, to reduce the chance of incorrectly giving an error on an unusual compiler version.

March 1, 2014

Work has begun on a new branch: Mini vMac 3.4.x. So far it contains a few fixes to bugs that prevented some variations from compiling. And also new for this branch is allowing variation requests compiled from the latest development source, at the Mini vMac 3.4 Variations service. In other news, the Mini vMac Variations service for the stable branch has passed 500 variations served.

The specific changes in 3.4, version 140226 are:

The Windows version wouldn't compile with magnification disabled (-mf 1) and screen depth (-depth) of thousands, millions, or 4 colors. (It's not clear to me why disabling magnification is a popular request.)

The Classic Mac versions ("-t m68k" and "-t mppc") didn't always request a large enough memory allocation in the SIZE resource, particulary for large screen sizes and color depths. The build system now tries to compute the memory requirements more exactly.

The hack allowing the emulated Mac Plus (and other models without Color Quickdraw) to have a larger screen always allocated enough memory for a screen with up to 1048576 pixels. It now allocates more closely to just the memory needed, and can handle screens up to 2097152 pixels (the size of the unused area in the address space that is used by this hack). I believe the previous limitation was mostly consequence of how earlier versions handled memory access in the CPU emulator. The build system will now give an error when the requested screen size contains more than 2097152 pixels (before it would compile fine and just not work right).

By the way, the Mini vMac 3.4 branch is located on www.gryphel.com, instead of on SourceForge. This is part of considering gradually moving all parts of the Gryphel Project to www.gryphel.com. One reason is that it makes it simpler to suggest that people should download Mini vMac and other related gryphel project software only from www.gryphel.com, unless they have good reason to trust the source. I have now seen for myself something claiming to contain Mini vMac which was actually malware, after receiving a couple reports indicating such existed.

January 17, 2014

Mini vMac 3.3.3 is now officially released (with no change from the final beta, as usual). The Changes file lists what has changed since Mini vMac 3.2.3.

There have been no reports so far of problems in version 3.3.3 that are not in 3.2.3, the previous stable version. But there has been a second report of drawing problems in Linux. I'd guess that some combinations of drivers/hardware do not properly implement X11 XYBitmap, which is probably not used much in modern software. In the future I might change Mini vMac on X11 to convert the image to color before passing it to X11, at least by default, even though that would potentially be much less efficient.

The Mini vMac Variations service should be simpler to use. It again has a form with pop up menus and check boxes for available options, rather than a single text field. Some invalid configurations are automatically detected. There is no longer a need for an activation code. The service is now free, with a $5 donation suggested.

December 17, 2013

Today’s Mini vMac 3.3.3 is the first beta of the 3.3.x branch. The Changes page lists differences from current stable 3.2.3 version.

I still don't have much time for working on Mini vMac, but I'd like to get out the work done already into the stable version before it is obsolete. The largest amount of work is in improvements to the X Window versions. The standard variation of the Windows version (with Macintosh Plus emulation) has a few small bug fixes, and the OS X version has even less (it's what I use, and pretty much just works already). But there is one improvement in all versions: more efficient drawing. Outside of the standard variation, of note are Mike Fort's LocalTalk emulation, a Polish translation by Przemysław Buczkowski, fixes for a number of bugs in 68020 emulation reported by “AP”, and initial ports to the Cocoa and SDL API's.


Changes since the May 8 development snapshot:

There were a number of bugs in the 68020 emulation (for Mac II) reported by “AP”. The BFFFO instruction was broken. And, all bit field operations on a register now use rotate rather than shift, as selected bits can be non contiguous. Bit field operations on memory now try to only operate on as many bytes as needed - previously it always operated on 5 bytes, which may have undesirable effects if operating on a memory mapped device. The “MoveP.L <ea>, Dn” instruction mixed up the order of shifting and masking.

Also, there are improvements to the SDL port. Color works (for Mac II emulation). There is more accurate mouse emulation in full screen mode. And the video output is more optimized. (The SDL port was created as a stepping stone to a native Cocoa port, but it can also be used as is to port to other platforms supported by SDL. Such as the TI-Nspire port by Jim Bauwens.)

The WinCE version can again be compiled. The code added to prevent Windows shut down wouldn't compile on WinCE and so has been made conditional. And one other fix is to allow color to work in the X Window versions when compiled with the magnify option disabled.


Previously requested variations have been updated to 3.3.3 on the Mini vMac Variations service.


In other news, Steve at Big Mess o' Wires (previously mentioned here for creating a Mac Plus emulator with an FPGA), has now created, and offers for sale, the Macintosh Floppy Emu. This allows an old Macintosh to access a disk image saved on an SD card, making it much easier to transfer files to and from a modern computer.

August 29, 2013

Mini vMac in the news : John Leake of RetroMacCast has built a “Mini Mac”, a working one third scale replica of the original Macintosh, containing a Raspberry Pi running Mini vMac. This has been reported in a number of places : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25, among others.

July 30, 2013

Matthias Melcher has created “mosrun”, a program for running “MPW tools on Mac OS X, Linux, and MSWindows.” It is like Executor in not requiring a ROM image or system software from Apple, but for running MPW (Macintosh Programmer's Workshop) tools instead of normal Macintosh 680x0 programs. The “project is still in the proof-of-concept stage”, but “the code basically works”.

May 8, 2013

Today’s Development source snapshot may now work on Raspbian for the Raspberry Pi. (A binary for Linux on ARM is included, stretching a bit the meaning of source snapshot.)

I received a bug report last year that the Linux ARM version of Mini vMac was freezing on the Raspberry Pi. We narrowed it down to a problem with sound, but I couldn't solve the problem without having a Raspberry Pi of my own to work on.

I recently got a Raspberry Pi, and have been able to debug further. As far as I can tell, the "snd_pcm_avail_update" call of ALSA is broken in Raspbian. It doesn't return a value less than the buffer size, but increases without bound. So I've put in a work around, that tests if the result is unreasonable, and if so calls snd_pcm_status_get_avail (after calling snd_pcm_status), which seems to work correctly. (I'm not really sure exactly what the difference is supposed to be between snd_pcm_avail_update and snd_pcm_status_get_avail.) This work around is currently only enabled for ARM.

The work around is actually the second needed fix. The first problem is that before snd_pcm_start is called, snd_pcm_avail_update returns a reasonable looking value, but doesn't change as sound samples are written. Mini vMac was waiting for the ALSA buffer to become full before starting the sound playing, and so sound never started playing. Thinking about it, this algorithm wasn't really right anyway, even if ALSA was working as documented. ALSA doesn't promise that its buffer will be the size you request, it could be much larger or smaller, and so waiting for it to fill could give inconsistent results. So now instead Mini vMac waits until its private buffer is full, then transfers as much as will fit into the ALSA buffer, and then starts sound playing.

April 27, 2013

Jim Bauwens has announced an initial port of Mini vMac for the TI-Nspire graphing calculator.

Also, a status update: Sorry for disappearing for some months. I have lately accepted paid work to update one of the oldest programs for Macintosh still sold to use the Cocoa API. My plan is to make the platform independent and platform dependent parts of this program interact as closely as possible to how this is done in Mini vMac. Then in the future most of the work of continuing to update and port to new platforms can be shared between it and Mini vMac. (The hard part is more in getting a good grasp of the parts of the API to use rather than writing code.) And then work on Mini vMac can continue with less of the distractions of poverty. But there are still some months more to go to get to that point.

December 6, 2012

In today’s Development source snapshot, the Cocoa port for OS X seems to be feature complete. I'll do some testing, and then compile an alpha version that others can test.

Work in today’s version includes: remembering window positions when toggle Magnify and Full Screen mode, remembering magnification state when toggle Full Screen mode, automatically choosing magnification for Full Screen mode, support color for Mac II emulation, using relative mouse motion in Full Screen mode, using a borderless window for Full Screen mode to eliminate some drawing artifacts, using localized strings for the application menu, allowing for better error recovery on toggle Magnify/FullScreen by creating the new window before disposing of the old one (which also reduces flicker), implementing the drawRect method to eliminate flicker when create the new window, using the mouseLocation method of the NSEvent class to get current mouse position on each tick (because the location data from events gets stale in a number of situations), using setPresentationOptions when available (instead of the older SetSystemUIMode), support compiling with the 10.4 SDK, adding an applicationDidChangeScreenParameters method to update the OpenGL context when needed, and cleaning up the sound code a bit.

November 29, 2012

Today’s Development source snapshot continues work on the Cocoa port for OS X, including: handling aliases, supporting "~/Library/Preferences/Gryphel/mnvm_rom", generating projects for the XCode IDE (in addition to previously supported compiling with the command line), using OpenGL for drawing (as done in the Carbon version), using more efficient drawing code (taken from the Carbon version), and Full Screen mode.

November 15, 2012

Today’s Development source snapshot continues work on the Cocoa port for OS X, restoring features from the Carbon version.

Such features include: Drag and Drop support. An Open dialog. A Save dialog (used by ExportFl). Clipboard support (used by ClipIn and ClipOut). Mini vMac style menu bar. Date and time zone. Setting the window title from the application name. Keeping the names of files (used by ImportFl). An error alert, used such as if Mini vMac fails to start. The "mnvm_dat" directory. And, advisory file locking.

November 1, 2012

Today’s Development source snapshot includes an initial port to Apple's Cocoa API, and an SDL port that was used as a stepping stone to the Cocoa port.

The Carbon API, which Mini vMac currently uses for the Macintosh OS X version, is nearly defunct. Apple continues to label more and more of it as deprecated.

The first step to an Cocoa port was to port to the SDL library (Simple DirectMedia Layer). Programs built upon SDL can be easily compiled to run on many platforms, including Cocoa on OS X. But I started with Linux. The Mini vMac build system option for this port is "-t wx86 -api sdl". Then I got it to work in OS X. When I compiled SDL on OS X it turned out to be 64 bit, so I just used that, and added a "-t mc64" target to the build system, for Macintosh x86-64. (The Carbon API can't be used for x86-64, which is why this target wasn't already supported.) So the build system option for this SDL port is "-t mc64 -api sdl -cl". (Only the command lines tools are supported so far, not the XCode IDE.) Eventually I could add support for the other platforms supported by SDL.

The basics of Mini vMac work in the SDL ports. But some features of Mini vMac can't be implemented on top of SDL. So the SDL ports are not intended for practical use, but as a stepping stone to more native ports.

The next step was to merge the source code for Mini vMac and SDL into a single program. Then I removed all SDL source code for platforms other than Cocoa. Then I removed SDL code that Mini vMac didn't make use of. Then I started cleaning things up. And in the end I had a basic port of Mini vMac to Cocoa. (The build system option is "-t mc64 -api cco -cl".)

This was all a lengthy process, but still much easier than directly trying to learn Objective C and Cocoa and writing a port from scratch. Now that I have some practical feel for how they are used, I am starting to to wade into the documentation for a better understanding. It took me a day just to pick out about 100 PDF files from Apple that seemed most relevant.

Much work remains before the Cocoa port can replace the Carbon Port for OS X. There are missing features to implement, and also I have to review the code and decide where there would be more appropriate ways of implementing things for Mini vMac.


Thanks to Guillermo Graña Gomez, nicola giacobbe, Adam Hope, Édouard Canot for sponsoring the Gryphel project, including web hosting for October.


Thanks to a report from "AP", today’s snapshot also corrects a bug in emulating the DIVS.L instruction of the 68020 (for Macintosh II emulation).

Another fix is that the Windows version now responds to the WM_QUERYENDSESSION message, so that if you try to shut down your computer with Mini vMac running (with mounted disk images), then Mini vMac will complain and stop the shut down.

Also, thanks to a report from William Grana, I've adjusted the build system to suppress warning messages that were generated when compiling the Macintosh II emulation with Microsoft Visual C++.

Thanks to a report from "David", I've updated AutQuit7, AutoQuit, and EjctQuit with the fix previously applied to the Mini vMac build system, so that they will work in emulators such as Basilisk II and SheepShaver.

Rob Braun contributed a fix to FDisasm for disassembly of 32 bit offsets for the BSR and BRA instructions. And then he provided code to disassemble certain MMU instructions, seen in the IIsi ROM.

I've added ShowSizes, The Tilery, ASCII Chart, Camera, Print2Pict, ScreenSnap, O'Clock, attoClock, StopWatch, LightningPaint, View Picture, XLisp-Plus, Zoom Lens, Moon Tool, MacROT13, and SoundHandle to the software hosted by the Gryphel Project.

August 6, 2012

I've begun making Recipes for Mini vMac. These are How-To guides that go beyond the Getting Started guide. Each is illustrated, perhaps too extensively illustrated. It was easiest to make the screen snapshots first, and then write some text around them. I'd been intending to make these for a long time, but a complaint about the documentation being inadequate got me to work on it now.

Also lately, I've begun to seriously study the source code to the MESS emulator, in hopes of getting ideas from all the work that has been done in it lately for Macintosh 680x0 emulation, and adapting them to Mini vMac. And so making the results of that work more accessible, in my opinion. (I can't copy code directly, both because of incompatible licenses, and because of the very different architectures of the programs.) So far I have gotten MESS to compile and run, and then I've cut out a lot of code not related to Macintosh emulation, reducing the approximately 400 MB of source to under 10 MB, which is more manageable, but still a lot to study.

I've added Lunar Phantom, FKey Manager, ResCompare, Calendar, MacAstro, Finder Info, and Creator Changer to the software hosted by the Gryphel Project. Lunar Phantom is used in one of the new recipes to illustrate "wrapping" a game. Some of the others may be used in future recipes.

Thanks to Charles Lehner, Evan Appelman, Fabian Hahn, and Micah Bly for sponsoring web hosting for the Gryphel project for July, August, and most of September. And thanks to andrew macfarlane, Matthew Nash, Cameron Harvey for sponsoring a memory upgrade, which allows running multiple VMware Fusion virtual machines at the same time, speeding up compiling of Mini vMac variations.

And thanks to Landon Fuller for sponsoring living expenses for one half day of work on the Gryphel Project today. I've decided to reallocate some previous non specific donations that were not yet used to this purpose. This may help in getting me to find 4 hour blocks of time to focus only on Gryphel project work. Thanks to Landon Fuller, Dmitry Larionov, Todd Katz Kevin Grabher, and Evan Appelman for sponsoring an additional 7 half days, to be scheduled in the future.

June 30, 2012

The latest Mini vMac 3.3.2 alpha improves sound in the X versions, and has a few miscellaneous fixes.

The X versions can now be compiled to play sound using the Open Sound System (OSS) API, in addition to the Linux-only ALSA that was previously supported. A new build system option, “-snd-api”, can be used to select which API to use. The sound API is normally selected automatically, using ALSA for Linux, and OSS for everything else, but it is possible to choose the OSS API for Linux (using “-snd-api ddsp”). Generally, an implementation of an OSS compatible API for each operating system is used, and not the official OSS itself. In the future, it would be possible to add support for a more native sound API for each operating system.

Sound is now enabled by default on FreeBSD and NetBSD. Sound compiles without problems on Dragonfly BSD and OpenIndiana, but I have not been able to test on these yet. Getting sound on Dragonfly BSD seems to require some manual setting up. OpenIndiana doesn't seem to produce any sound at all in VMware Fusion. Sound also compiles without problems on OpenBSD, but it doesn't work - setting the desired sample rate fails. Minix doesn't really seem to support sound yet.

In the Linux version, using ALSA to play sound, snd_pcm_start was called before putting any sound samples in the ALSA buffer. This is not the way ALSA is meant to be used, and could cause stuttering at the beginning, or according to one report (by “Éric”), prevent sound from working at all.

In the Linux version, when playing sound with ALSA, snd_pcm_delay is no longer called. The delay until a sample is played is not really relevant. What Mini vMac needs to know is time to buffer underrun. So Mini vMac now looks at buffer size minus the available space in the buffer, which may be more useful, for the purpose of preventing buffer underrun while minimizing latency.

The Windows version now maps the Enter key on the numeric keypad to the Macintosh Enter key. It can now distinguish that key from the Enter key on the main keyboard, which is mapped to the Macintosh Return Key. There was previously no way to type the Macintosh Enter key. Thanks to “Alex” for pointing out this issue.

In the Windows version, in Full Screen Mode, the check for whether a key down event is an autorepeated key is incorrect. So potentially keys could have been ignored when they shouldn't have been. I've removed the check, since it isn't clear how to do so correctly (when using a "low level keyboard hook"). This doesn't affect Macintosh emulation, since there is an additional check for redundant events. It can affect the Control mode, such as when holding down Control-M.

The Windows CE version suffered bit rot. It now compiles and at least works on the Microsoft Device Emulator with Windows Mobile Version 5.0. I have no idea if it works on real hardware. This port was starting to interfere with maintaining the main Windows version, and the choice was to remove it entirely or make it maintainable.

The hack that allows extra large amounts of Video RAM in the Macintosh II emulation wasn't working properly because an array used for address space translation in the CPU emulation wasn't allocated large enough. Now the build system chooses the allocation size. (This problem was observed for 1024x768 with millions of colors.) Further detail: Each NuBus card gets only 1M of address space when the computer is in 24 bit mode. And a Mac II seems to usually draw in 24 bit mode. When more Video RAM is needed for the requested compile time options, Mini vMac uses address space from adjacent NuBus slots.

This Video RAM issue affected the requested variation number 507 of the Mini vMac Variations service. I've updated this variation, and all the rest, to Mini vMac 3.3.2.

I've added support for Linux on SPARC (“-t lspr” in the build system), again using a Debian Linux image provided by Aurélien Jarno.

May 29, 2012

Today’s Mini vMac 3.3.1 alpha supports more host targets, has a few miscellaneous fixes, and adds a Polish translation.

Przemysław Buczkowski contributed the Polish strings for the Mini vMac user interface. They can be selected in the build system with “-lang pol”. This is the first translation that uses characters not in the MacRoman character set.

I figured out how to set up the QEMU emulator with some Debian Linux images provided by Aurélien Jarno. This so far allows adding support for Linux on ARM (Debian armel port), selected with “-t larm” in the build system, and to provide better support for Linux on PPC, selected with the existing “-t lppc” option in the build system.

I've also figured out how to extract compiled applications out of my VMware image of Minix 3.2. The compiled applications are very large, apparently because Minix doesn't yet implement shared libraries. (The build system now supports Minix 3.2.0 instead of Minix 3.1.8.)

So the Mini vMac 3.3.1 downloads page now includes versions for Linux on ARM, Linux on PPC, and Minix 3.2.

The X Window versions as of Mini vMac 3.3.0 look for the application path and name. Since this might not give the desired results, there are now command line options to override them. “-d [directory_path]”, in which [directory_path] is used instead of the application directory when looking for the ROM image, and disk1.dsk and so on files. And “-n [app_name]”, in which [app_name] is used instead of the application name for the title of the Mini vMac window.

In X Window versions of Mini vMac, when using the Mini vMac extension to create a file on the host system, such as with ExportFl, a save dialog is not implemented. Previously the file would simply be created in the application directory with the asked for name. This was not safe, at worst it allows a program running in Mini vMac to replace the Mini vMac application. So now files will instead be created in a folder named "output" in the directory containing the application. This folder will be created if it does not exist.

In the Microsoft Windows version, if a path to a disk image is passed to Mini vMac on the command line that is longer than is legal for a path, a buffer overflow would result. This is fixed.

If the host computer is not fast enough for Mini vMac to run at 1x speeds, then Mini vMac would not run smoothly, pausing for a few seconds periodically. The test for this situation was incorrect, and a one byte counter would overflow. (Have such counters as small as possible makes it easier to detect bugs like this.)

When using the new magnification factor option set to 3x, with a particular real and emulated screen sizes, I noticed autoscroll would not reveal the last row of pixels. This was because Mini vMac constrains scrolling to multiples of two pixels (so scrolling of the standard gray pattern looks better) and because the emulated Mac constrains the mouse to one pixel less than the bottom and the right. So to avoid this issue, Mini vMac now constrains the emulated width and height of the visible area in full screen mode to a multiple of two (but only if the visible area is smaller than the emulated screen size).

For the Mac II emulation, there is now a flag that the platform dependent code can set at program start up to indicate that the requested color setting is supported. The platform independent code will check if color is supported before emulating a color machine. This means that a version of Mini vMac compiled for color will still at least run in Black and White if displaying color is not possible.

The build system uses a default color depth for Mac II emulation of 256 colors rather than Black and white.

For Macintosh II emulation, AutoSlow is now disabled by default. AutoSlow may need some further tuning to work well with Mac II emulation.

Using the build system option "-lt" no longer causes speed to default to 1x. Mike Fort's LocalTalk emulation appears to work just as well at higher speeds.

When compiling the Mac 68K version of Mini vMac, the build system now generates some assembly language glue that allows the "large" code model to work correctly with the standard libraries, and not cause linker errors if Mini vMac grew larger.

April 18, 2012

Mini vMac 3.3.0 is the first alpha of the the 3.3.x branch. The Changes file lists what has been done so far since Mini vMac 3.2.3, with the highlights being Mike Fort's LocalTalk emulation, and work on the X versions.

I think it is important to regularly test that the development branch compiles on all supported platforms, and provide the compiled applications for people to try. Instead of only providing source snapshots, as I've been doing for some months.

There is a new permutation of the Mini vMac Variations service. It is a hybrid of the Mini vMac 3.1.x Variation service and the Mini vMac 3.2.x custom variations. For Mini vMac 3.3.x, you can request variations that I will compile for you, and try them as long as you like, before purchasing an activation code. This may be feasible now that I have the process of compiling variations pretty well automated.

Though Mini vMac 3.3.0 is an alpha version, activation codes purchased now will still be good for all later versions in the 3.3.x branch. Activation codes purchased previously for 3.1.x will still work for 3.3.x variations. (Probably new codes will be required for 3.4.x.)

Mike Fort's LocalTalk emulation is included in Variation 182 for OS X of the Example Variations. Some software to try with this variation is hosted on the Macintosh Plus LocalTalk Software page.

April 15, 2012

Gil Osher has updated his Mini vMac for Android port to version 3.2.3 of Mini vMac. Compiled variations may be downloaded from the Android Market for Macintosh Plus (free) and Macintosh II ($1.99) emulation. Source code is available on GitHub.

March 23, 2012

Today’s Development source snapshot includes initial support for color in the X Version (for Mac II emulation), and a build system option for higher magnification factors than 2.

The X Version so far only supports 24 bit "TrueColor", and has a few other limitations on format. I doubt that anything besides TrueColor is used on modern machines, and so probably won't support the other options. Other depths such as 15, 16, and 32 bits may be used, and so probably should be supported, if I can find a way to test them.

A new build system option "-mf" allows changing magnification from the default 2. For example, "-mf 3" sets the magnification to 3. This may be useful as modern screens get higher resolutions. The option "-mf 1" disables magnification (removing the Control-M command). At least for now, the magnification factor must be an integer.

Though it wasn't previously supported by the build system, the code for the OS X version already allowed higher magnification. The Windows version also had such code, though it was slightly broken. These versions were easy, because the APIs have support for magnification. The X API doesn't seem to have such support. Mini vMac previously implemented it's own code for 2x magnification.

Today’s X version implements a more general magnification algorithm that is also simpler and faster, using a table to process one byte at time. The OS X version now also uses a table to process a byte at time when the color depth is 3 or less. Even though magnification doesn't need to be handled, it is still simpler and faster than the previous methods.

The OS X and X versions now take advantage of knowing the left and right of the changed area to reduce the work when translating between the emulated screen format and the host screen format. Recent versions of Mini vMac started finding the left and right of the changed area, to allow autoslow to work better, and to reduce drawing to the real screen. But the translation step hadn't been updated.

The Mini vMac build system should now work properly in other emulators such as SheepShaver. It was anonymously reported that the build system would crash emulators. The test for whether the build system was running in Mini vMac (so that the resulting archive may be exported to the host) was not good enough.

The same report also mentioned a number of unused parameters warnings when compiling the SCC emulation, which should be fixed now.

I've recently tried out Windows 8 Consumer Preview in VMware Fusion for a few minutes, and Mini vMac seemed to work fine. (In the desktop environment of course, not Metro.)

I've added a new section to the software hosted by the Gryphel Project, and added EZChat, Net Othello, and Watch. These are software that work with Mike Fort's LocalTalk emulation.

I've used EZChat quite a bit in testing the LocalTalk emulation as I merged it into my version of the code. I was able to contact the author of EZChat, and purchased a license for it.

March 2, 2012

Today’s Development source snapshot includes a couple fixes from Mike Fort that make LocalTalk more reliable. The problem of occasional lost packets seems to be solved.

It also includes various maintenance stuff I've done on the LocalTalk emulation, such as splitting the platform specific code out to a separate file, which should make it easier to port to other platforms besides OS X. Actually the same Berkeley Packet Filter code probably should be able to work on various BSDs, and perhaps Linux. For Windows, perhaps the WinPcap library could be used.

I also made the LocalTalk emulation check the "Addr Search Mode (SDLC)" flag before discarding packets meant for other machines. This allows programs like "Network Watch" (from Cayman Systems) to work.

February 26, 2012

The latest Development source snapshot continues to improve the X version. To match the behavior of the Macintosh and Microsoft Windows versions, it now tries to determine the application path. This is used when looking for the ROM image, and in looking for disk images named disk1.dsk, etc. If the application directory can not be determined, it uses the current directory, as before (which is often, but not always, the application directory). The application path is also used to determine the application name, which is displayed in the window title bar. (If the application name can not be determined, "Mini vMac" is used as before.)

Determining the application path is implemented (in somewhat different fashions) for Linux, FreeBSD, NetBSD, Dragonfly BSD, and OpenIndiana. I've not figured out an implementation for OpenBSD and Minix.

The build system now supports compiling 64 bit versions for OpenBSD (-t ob64), NetBSD (-t nb64), Dragonfly BSD (-t db64), and OpenIndiana (-t oi64).

Mike Fort sent a fix in setting up the ethernet port in the LocalTalk emulation. And I've put in a considerable amount of debug logging code into the SCC emulation (enabled by preprocessor condition), to make it easier to figure out what it is doing.

I've added TattleTech and Monitor to the software hosted by the Gryphel Project.

February 12, 2012

In today’s Development source snapshot, Mike Fort's alternate version of SCCEMDEV.c (for LocalTalk emulation, with build system option "-lt") is merged with original file, using the preprocessor condition "EmLocalTalk" to enable it or not. This is more maintainable. Much work remains.

Also in this snapshot, the X version now supports a central ROM folder like the Mac and Windows versions have. If "~/.gryphel/mnvm_rom" exists, Mini vMac will look there for the ROM image. If it isn't there, it will look in the current directory as before. (And the -r command line option will override both.)

The X version now also supports saving Activation Codes, like the Mac and Windows versions have. The custom made variation service tried for 3.2.x seemed elegant, and a good fit for funding an open source project, but there does not appear to be demand for it. So for 3.3.x, I'll try going back to the shareware like custom variations service, and try some other tweaks.

The ongoing work on the X version involves drifting further from using the most generic standard c library and Xlib API's. Rather than guess what portability problems this causes, I'd prefer to have real data. So I've been setting up various operating systems in VMware Fusion, and getting Mini vMac to compile in them.

The build system now supports OpenBSD ("-t obsd"), NetBSD ("-t nbsd"), Dragonfly BSD ("-t dbsd"), OpenIndiana ("-t oind"), and, for a challenge, Minix ("-t minx"). These are all for 32 bit x86. I should try the 64 bit versions later. Adding support for other architectures like PowerPC, for the operating systems that support it (like NetBSD), wouldn't be much work, except that I don't know of any way nearly as convenient as VMware for testing them.

This snapshot fixes a bug where the clock is not properly initialized, and is only correct after the first second interrupt.

Also fixed is a more serious bug where in full screen mode, if the emulated screen is too big to fit on the real screen (when autoscroll is available), if the area of the emulated screen that has changed doesn't intersect the visible area of the emulated screen, then an invalid rectangle was used for drawing. I discovered this when trying out Vector Linux 7, which seems to have some extra debugging checks.

I've added Peek-a-Boo and Checksum to the software hosted by the Gryphel Project.

January 29, 2012

The latest Development source snapshot has an initial merge of Mike Fort's LocalTalk emulation. It is enabled with the build system option "-lt". It is currently implemented with an alternate version of one source file (SCCEMDEV.c), but I expect to eventually merge that with the original. I've already editted it quite a ways in that direction, hopefully not adding too many bugs.

The are currently some limitations. It is only implemented for OS X. It requires running the command "sudo chmod ugo+rw /dev/bpf*" to allow Mini vMac (and everyone else) access to all network traffic. It loses packets some of the time. If running faster than 1x, it loses more packets (which in a way is good, as that should be a clue where to look for the problem). So the "-lt" option causes the default speed to be 1x. The "-lt" option also cause Mini vMac to run in the background by default, because Mini vMac can't be a proper LocalTalk node if it isn't running. And you need to manually turn on AppleTalk in the chooser - I can set the PRAM flags to boot with AppleTalk already on, but it doesn't work properly.

All my testing of Mini vMac with LocalTalk emulation has been done in VMware Fusion 4 (sponsored by Peter Godwin and Andrew Macfarlane), which now supports running OS X as guest.

In other news, I've verified that the version of Mini vMac compiled in PC-BSD 9, with the new "-t fbsd" option, works in FreeBSD 9, and also FreeBSD 7.

I've added Burn and Disinfectant to the software hosted by the Gryphel Project.

January 22, 2012

Mike Fort has implemented LocalTalk networking support in Mini vMac for OS X, available as a beta on his website. This allows, for example, using multiplayer games like NetTrek over a local network. It does not yet allow connecting to the modern internet, but Mike Fort says this could be possible by creating "gateway" software.

Using it requires enabling the "Berkley Packet Filter" to allow Mini vMac to access all packets on the network, which has security implications. If I understand correctly, allowing all software complete access to network traffic is not normally considered desirable. An alternative to giving all software access would be to give Mini vMac elevated privileges, which is more convenient, and in some ways safer, but in other ways more dangerous, in that if Mini vMac gets compromised, the entire computer is completely compromised.

I'll be learning more about networking, as I work to merge Mike Fort's code into my version of Mini vMac.

January 20, 2012

Today’s Development source snapshot adds advisory locking to the Linux version (and other X Window ports). Previously in the Linux version, Mini vMac could open an already opened disk image, likely corrupting the image. Now Mini vMac will refuse to open a disk image that has been opened by another copy of this version of Mini vMac (and presumably later versions).

In Windows and Mac OS 9 and earlier, the operating system prevents opening the same file twice with write access (at least when opened in the normal way that Mini vMac does). After some early versions which didn't, OS X now also prevents this for Carbon programs (though it still allows read access to a file open for writing).

The Linux operating system does not prevent opening the same file twice with write access. But it does provide advisory locks, to allow programs to say that a file is in use, to any program that pays attention to this. To make things more complicated, there are two different kinds of advisory locks. Mini vMac is now using "fcntl". If other programs use "flock", they may not notice Mini vMac locks. And Mini vMac can't simply set both locks, because one kind of lock can be implemented using the other, or not, depending on operating system version. I don't really understand this all completely, and/or it isn't designed very well.

As part of seeing how this code works in other X Window ports, I tested it in the latest PC-BSD. I've added "-t fbsd" to the build system, for FreeBSD, because I think PC-BSD and FreeBSD are compatible for compiling, though I still need to test this. There is also now "-t fb64" for the 64 bit version.

It also seems to work in Apple's X11 implementation. I've added "-t mx64" for the 64 bit version, in addition to the previous "-t mi11" and "-t mx11".

And it works in Cygwin/X for Microsoft Windows. I've added "-t cygw" to the build system. Cygwin can also be used to compile the regular Microsoft Windows version with "-t wx86 -e cyg".

Related is MinGW, which the build system now also supports with "-t wx86 -e mgw". Actually since Bloodshed Dev-C++ is based on MinGW, "-t wx86 -e dvc -cl" would previously give similar results.

Support for Cygwin and MinGW is due to Hugh Sparks, who got Mini vMac to compile with NetBeans. NetBeans for Windows C development seems to use either MinGW or Cygwin, and can import Makefiles for them fine. At some future time I could look at supporting a more native style project.

Internal to the build system, there is now a concept of target family, which groups together targets with the same CPU. This simplifies supporting operating systems that support many different CPUs.


Thanks to Peter Godwin and Andrew Macfarlane for sponsoring a VMware Fusion 4 Upgrade. And thanks to Evan Appelman for sponsoring storage and web hosting for the Gryphel project.


I've simplified the Custom Variations service to be one step, instead of donation and request steps. The previous offer is still good for people who have already donated or customers of the earlier Variations service. Just contact me.

I've added Speedometer to the software hosted by the Gryphel Project.

I was about to host NumberCrunch, my favorite tool for quick arithmetic, but I discovered that it is currently available from the author, with a newer and fancier version than what I had. I've added a link to it on the Math Software page.

I also added Hexy by Marc Liyanage to the Programming Tools page. It is an extension for BBEdit.

December 20, 2011

Mini vMac 3.2.3 is now officially released (with no change from the final beta, as usual). The Changes file lists what has changed since Mini vMac 3.1.3.

Today’s Development source snapshot is the start of the 3.3 branch. It adapts for the Linux version the technique seen in SDL for dynamically loading the ALSA library, so that Mini vMac will still run, without sound, even if ALSA is not installed. So by default the Linux version is now compiled with sound, matching the Mac and Windows versions.

Other changes in the snapshot: Fixed "-min-extn" build option in the Linux version. Changed order of arguments to the link command when building the Linux version. It turns out there is a conventional order for how libraries should be specified, which I didn't know since I hadn't come a across a linker that cared until Ubuntu 11.10. In all X versions, the "Xext" library is no longer linked in. I don't think it is needed, but haven't removed it before since I'm not sure there isn't some distribution where it is. But now I've decided to remove it to find out. And also in the X version, the results of fwrite and fread on disk images are now checked for errors, which stops compiler warnings in recent Ubuntu.

I've added GIF Converter and ShareDraw to the software hosted by the Gryphel Project.


Thanks to Kevin Grabher and Todd Katz for sponsoring storage for the Gryphel project.

December 13, 2011

I've added 64-bit Linux binaries for Mini vMac 3.2.3. They are much slower than the 32 bit versions, for lack of assembly language tweaking, but some 64-bit (x86-64) Linux distributions can not by default run the 32 bit binaries. I used 64-bit Ubuntu 10.04 LTS to compile the default variation and the example variations, and tested them in 64-bit Fedora 16, openSUSE 12.1, and Mandriva 2011. Also, the custom variations page now supports x86-64.

As items on my list of links to currently available software for Macintosh Plus are gradually disappearing, I've decided to start hosting some selected software on the Gryphel Project website, in the zipped disk image format that is convenient for use with Mini vMac. I've made new pages for Stuffit Expander and DropStuff that I'd previously hosted, and then added BBEdit Lite and FullWrite.

(For more software in disk image format, ready for use in Mini vMac, E-Maculation has a large collection of shareware and freeware Macintosh games.)

I've also added to the Gryphel Project website a list of alternatives to Mini vMac for running Macintosh 680x0 software. For the goal of the project, the more alternatives the better.

December 6, 2011

The second batch from the Custom Variations beta is available. The beta is now over, and Custom Variations are live.

I've chosen to make Custom Variations a thank you gift for Mini vMac sponsors. Everyone who donates $5 or more is eligible for a Mini vMac 3.2.3 variation. People who have already donated are also eligible. And also, customers of the earlier Variations service are eligible for a custom variation.

An extra benefit of requesting a variation is that it is a vote for what Mini vMac options you think are important, influencing development priorities.

Though Mini vMac 3.2.3 is still in beta, the official release should be close. But if a version 3.2.4 becomes necessary, I'll recompile all variations made previously.

In other news, I've been collaborating with Arbee (AKA R. Belmont), of the MESS emulator project, by making a series of programs similar to CopyRoms, that copy other ROMs found in some Macintosh 680x0 computers, including for the Egret microcontroller (EgretRom), the Power Management Unit of some PowerBooks (PMURom), and Nubus Cards (SlotRom).

Another recent Mini vMac extra is ExportPS, which saves a few steps in the process of printing from Mini vMac.

November 28, 2011

The first batch from the Custom Variations service beta is available.

Lessons learned from the first batch led to a few refinements to the service. The Custom Variations service free beta is open for another week.

In other news, Peter Godwin is working on updating the iPhone port by Jesús A. Álvarez (Zydeco) to use Mini vMac 3.2.3 source code.

November 21, 2011

Todays starts a free beta period of a revised Mini vMac Variations service. The concept now is that I'll make custom made variations, for a small fee, to help support Mini vMac development. Instead of the previous idea of activations codes, you are permitted and encouraged to redistribute your variations. Which I think is more compatible with the goals of the Gryphel project, and open source generally. Previous work for the earlier variations service I think now makes it feasible to build large numbers of custom variations, in batches.

I've updated the Mini vMac 3.2.3 documentation from the list of changes, which gets it closer to the official release. The example variations are more accessible, from the Options page.

In other news, I've resigned from recent paid work to have more time for Mini vMac, and the Gryphel project.

September 20, 2011

Today's Mini vMac 3.2.3 is the first beta of the 3.2.x branch. It has been too long since the last stable version, so I want to put together a new stable version to make more available the improvements since then. The Changes page lists differences from current stable 3.1.3 version.

Since the previous 3.2.2 alpha, the fix that most affects me is allowing command-option drag from a background Finder window in OS X to work again. But there are also a number of other changes.

The new AutoSlow feature is refined a bit. Reading and writing to disk now counts as activity that prevents AutoSlow. Instead of 2 seconds of inactivity before AutoSlow, it is now the longer of either a half second, or 16 seconds worth of instructions executed (which corresponds to about 2 seconds at the default 8x speed).

Misbehaving software running in Mini vMac that makes wild jumps to non memory locations is now less likely to result in a segmentation fault that terminates Mini vMac. It now works about as well as it did in Mini vMac 3.1.3. In the future I'd like to make Mini vMac catch such events properly, but it will take some work to be able to do so without significantly slowing emulation. In the mean while, such events should not cause harm other than terminating Mini vMac, because it is only reading from random memory locations, and not writing.

The "-t xgen" version of Mini vMac for generic x window system now works again. The code for better determination of changed screen area that was added for the AutoSlow feature was previously only implemented for big endian and little endian systems. Now it can also work with out assuming either, by operating on a byte at a time instead of four bytes. It can also now operate on eight bytes at a time, which would be more efficient on 64 bit systems, but this ability isn't used yet.

The build system now supports XCode 4.0.2 (with "-ev 4000").

There is better support in general for different versions of Microsoft Visual Studio. Specifically, support has been added for Visual Studio 2010 (with "-ev 10000"), Visual Studio .NET 2003 (with "-ev 7100"), and Visual Studio .NET 2002 (with "-ev 7000").

There is a new option, "-t wx64", to target for 64 bit Windows. But it is currently slower than the 32 bit version, because that version has some assembly language tweaking.

The copyright message in the about screen of the German version was munged when the about screen was rearranged. This is fixed.

A new build system option "-intl" forces Mini vMac to support international characters in the user interface, even when using the default English. This is useful if the maintainer name needs the extra characters. (It would be nicer for the build system to figure out for itself what character set is needed. But this will do for now.)

In the Windows version of recent 3.2.x, toggling magnify in full screen mode turned off more accurate mouse emulation. This is fixed.


Thanks to John Feinberg, John Goodwin, Simone Manganelli, Callum MacKendrick, Gianfranco Cilia, and Fabian Hahn for sponsoring over a year of web hosting for the Gryphel project.

They also helped motivate my taking a week off from other work to work on Mini vMac and get out the new beta. (Not setting aside a big block of time doesn't seem to allow much progress.)


In other related news, on Big Mess o' Wires, Steve Chamberlin is documenting his progress on an interesting project to emulate a Macintosh Plus in hardware, using an FPGA.

I hear that Macintosh emulation in the MESS emulator is making major progress. Sometime when I find time, I'll examine its source code closely for ideas.

The PCE emulator is also being actively developed.

Mike Gleason has created "a NEW program in 2011 for 68k Macs", Daleks Forever.

May 18, 2011

Gil Osher has announced his new Mini vMac for Android port, based on an earlier initial port by Jesús A. Álvarez (Zydeco).

I don't have an Android, but looking at the source code, it looks to be updated to use Mini vMac 3.1.3 code instead of Mini vMac 3.0.4, plus interface refinements like having code for sound, some work on keyboard support, and supporting Reset and Interrupt commands.

May 2, 2011

Today's Mini vMac 3.2.2 alpha is made from the last source snapshot. (Variations to follow.)

I think I'll phase out the OS X universal version. Five years after the transition, there isn't much demand for it. I'll still keep the PowerPC only version, along with versions for OS 9 and earlier.

A reminder: notification of Mini vMac news can now be found on Twitter.

April 29, 2011

Today's Development source snapshot allows the power button to be used in the OS X version when in full screen mode, to put the (real) computer to sleep.

A problem with this, and the previous enabling of the force quit (command-option-escape), is that they bring up dialogs, which Mini vMac didn't notice and so the real cursor remained hidden. It turns out that requesting window focus events allows Mini vMac to notice when such a dialog has appeared, so that it can show the real cursor.

A previous fix, also in the OS X version, in the February 20 snapshot, involved registering for changes to the screen configuration. Upon receiving such notification, Mini vMac will now also turn off full screen mode if it is on, instead of just leaving the emulator window at a size that is now wrong.

The new autoscroll feature in full screen mode (in all versions) previously tried to keep the emulated mouse on the real screen and out of a border area. After using it a while, I think the border area was a mistake. So now it only scrolls upon reaching the edge of the real screen.

I've rearranged the Mini vMac about page (Control-A) a bit to make room for another idea I have for the variations. It no longer displays which the computer is being emulated. That can be inferred from the variation number.

I've fixed a problem with the previous snapshot, where toggling full screen or magnify mode would turn off control mode.

I have scripts that enforce some conventions in the source code. As of this snapshot, a maximum line length of 72 characters is also enforced. (72 characters fits well on a Macintosh Plus screen. And it is generally thought that lines much wider than that reduce readability, and a better use for more screen space is to put editing windows side by side.)

If no problems turn up, I plan to make a new alpha version from this source snapshot.

April 10, 2011

The latest Development source snapshot may fix a very long standing issue in the OS X version. Mini vMac tells the operating system to hide the cursor when it is over the emulator window, but sometimes the operating system shows the cursor again by itself. The most easily reproducible such situation is when the computer goes to sleep and wakes up. In OS X 10.3 and later, there is a way to tell if the cursor is visible, the "CGCursorIsVisible" routine, but it is not always accurate. So a previous attempt to use this routine to correct cursor visibility just made things worse. Now I think I've figured out how to use this routine without getting permanently confused when it is inaccurate.

By the way, after observing for a while the behavior of Mini vMac versions with and without the attempted fix (in the February 20 snapshot) for problems when switching screens in OS X, I'm fairly confident the fix is effective.

By request, Mini vMac will now by default mount disk images in Disk Copy 4.2 format as read only. This is because by default Mini vMac ignores the checksum and tags of this format, so writing to the image makes it invalid. Mini vMac can be compiled with full support for this format, in which case the images will be writable.

I have created a utility, CnvtDC42, that converts Disk Copy 4.2 format images to a new image without the tags and checksums, that the default version of Mini vMac can write to.

Also in the latest snapshot, the Windows and Linux versions now match a previous feature of the Macintosh versions. When switching from full screen to normal mode, or toggling magnification in normal mode, it will preserve the emulated cursor position, by moving the host computer's cursor. (This was not an issue in full screen mode, because then the host computer's cursor is not in the same place as the emulated cursor.)

There is a new build system option, "-t lx64", to target for 64 bit linux. It would currently be slower than the 32 bit version, because that version has some assembly language tweaking.

As an additional safety feature, the control mode confirmation for the reset, interrupt, and quit commands will now treat anything other than 'y' as meaning no, rather than ignoring it. (With exception that a repeated key is ignored - so 'q' is ignored for quit, 'r' for reset, and 'i' for interrupt.) This is because I once managed to accidentally reset Mini vMac by typing unintentionally into control mode.

There is new build system option, "-emm 0", to disable the more accurate mouse emulation normally used in full screen mode. This allows Mini vMac to work somewhat better on tablet computers without a mouse. But such computers are still not really supported. (The compile time option already existed. Supporting this option in the build system was prompted by communication from someone using Hypercard on their HP TC1100.)

A new build system option, "-var-fullscreen 0", makes the full screen mode option a constant rather than a variable. So "-var-fullscreen 0 -fullscreen 1" will make Mini vMac always run in full screen mode, and "-var-fullscreen 0 -fullscreen 0" will make Mini vMac never run in full screen mode. The "F" control mode command disappears.

Thanks to Matthew Exon for sponsoring a month of web hosting for the Gryphel project. And thanks to Joel Schmidt for previously sponsoring gas. The notification email from PayPal hadn't reached me. I've set up stricter accounting to catch if that happens again.

update For Twitter users, I have set up http://twitter.com/gryphel, basically to announce when there is news here. (Sorry, I don't know how Twitter is supposed to be used.)

March 5, 2011

The latest Development source snapshot fixes a bug reported in the Mini vMac Variations. The numeric keypad can't be used to type in activation codes. (I didn't notice this because I usually use keyboards without a keypad.)

Today I'm trying out an improvement to the Variations service. A problem with the service has been that there are so many possible combinations of options that it is difficult to find some useful subset to offer. So instead you can now order a custom made variation with the exact combination of options you want. Up to 3 custom variations per activation code. An activation code is now $10.

The 3 custom variations are also available to everyone who has previously purchased an activation, as a thank you gift.

My current paid work may not last forever. (For one thing, my main task is to make myself unnecessary.) So I'm still trying to make Mini vMac a self supporting business, in the time I can make to work on it now.

Somewhat related, some time ago I created a Flattr page for Mini vMac. Flattr is a clever micro donation service. One of the cleverest bits is that you need to give donations before you can receive them. So if anyone with a webpage, or maintaining software, that is related to the goal of "preserving software for early Macintosh computers" sets up a Flattr page, and lets me know about it, I would be likely to donate (to "flattr" it).

In conventional donations, thanks to John Duncan, Philippe Dautremont, Eric Eliasson, Dave Henning, and Robert Eliason for 3 months of web hosting and domain registration. And thanks to Gianluca Abbiati, Joseph Buchanan, Douglas Egan, Mike Gleason, Dax Mackenzie Roggio, T.C. Meggs for paying expenses for the next trip to work on Mini vMac, when I can get opportunity to do so.

February 20, 2011

In today's Development source snapshot I tried to fix a problem where switching between using the screen of my new MacBook Air and an external screen would tend to make Mini vMac stop drawing. Reading Apple's documentation, I think you're supposed to call CGDisplayRegisterReconfigurationCallback to get notification of when the screen changes, and then call aglUpdateContext. After doing this I don't see the problem anymore. However, now I don't see the problem in the previous version of the program anymore either. So I don't completely understand what is going on.

I haven't approved of some directions Apple has gone lately, but I have no complaints about the 11" MacBook Air. It is the nicest computer I have used. Besides making travel easier, I like how easy it is to switch between working at a desk, reading in bed, writing on a couch, and web surfing on an exercise bike.

February 12, 2011

Today's Development source snapshot fixes a bug in the 3.2.1 alpha which broke emulation of the trace flag, used by debuggers such as MacsBug and TMON. Thanks much to one of the developers of ScummVM for reporting this bug.

There is no other significant change in this snapshot. In recent months I have accepted some other work that is keeping me pretty busy, so I don't have much time to spend on Mini vMac. But I still intend to maintain it - for one thing, I need it for myself. Highest priority is fixing any regressions - bugs that break things that used to work, like the one fixed today.

September 12, 2010

Today's Mini vMac 3.2.1 alpha is the netbook edition of Mini vMac. It also includes work on better accuracy of speed. This is an alpha, rather than a development snapshot, mainly to help ensure the development version doesn't drift too far from shippable.

Thanks in part to donations from Zebadiah Kimmel and Greg Lee, I now have an ASUS netbook. Using it as one of my primary computers will encourage better support for Windows and Linux. It is a different experience from briefly using them in VMware Fusion. (The model of Mac Mini I was thinking of getting was discontinued, the new model is more expensive, and I can get most of the desired benefits of enabling 64 bit development for much cheaper with the netbook.)

The first improvement I've made for the netbook is auto scrolling. If the emulated screen is larger than the real screen while in full screen mode, the emulated screen will be scrolled to keep the mouse pointer in view. (Previously only the top left corner would ever be displayed.)

The other improvement I've made so far because of the netbook is an "AutoSlow" feature to help conserve the battery. If the user hasn't typed, or clicked, or moved the mouse, and the emulated computer hasn't drawn to the screen, for about two seconds, then Mini vMac will automatically shift down to 1x speed.

A blinking insertion point will not prevent AutoSlow. This required improving the code for detecting how much of the screen was changed. Previously it would detect that areas at the top and bottom of the emulated screen hadn't changed, to limit the amount of drawing to the real screen. Now it can detect that areas at the left and right of the emulated screen haven't changed. If the remaining area that has changed is only a single pixel wide and less than 32 pixels tall, it is assumed to be only a blinking insertion point.

It is possible that some software will not draw anything to the screen for more than two seconds while doing real work, so the AutoSlow feature can be disabled with Control-S-W.

The biggest changes since the last snapshot are not related to the netbook, but about improved accuracy of timing. Mini vMac now measures time in cycles rather than instructions executed. In the simplest form, all instructions are assumed to take the same number of cycles, and this closely matches the results of previous versions of Mini vMac. (Mini vMac actually counts sixty fourth cycles, not just integer number of cycles, so that average times of instructions can be more accurate.)

But by default, Mini vMac now assigns an average number of cycles for each of the 65536 primary opcodes. The larger table now used, as of the last snapshot, for the primary opcodes provides a convenient place to store this, allowing the more accurate timing to be done fairly cheaply.

As a compile time option, in addition to using the table, Mini vMac can try to compute more accurate cycles for certain instructions, depending on the current data. This is slower, and only implemented in the C version of the 68000 emulation, making it slower still. By the way, I believe the MESS emulator takes this approach.

The build system option "-ta 0" selects the least accurate of these three methods, the default is "-ta 1", and "-ta 2" selects the most accurate.

Completely accurate timing would be exceedingly difficult. The CPU and video output conflict for accesses to RAM, and that would seem very complex to model.

The greater accuracy is so far mostly theoretical. The timings were entered from Motorola documentation. It needs to be tested and calibrated by comparing to real hardware.

Currently 68000 timings are used even in the 68020 emulation. More accurate timing for 68020 should be added in a future version. Truly accurate timing for 68020 would be much more difficult than for the 68000 because of pipelining and caching, probably to the point of being unfeasible for Mini vMac. But more accurate averages should be possible.

Sourceforge has improved, but on second thought it's still not ideal for releasing large number of files. So I've decided to bring back the Mini vMac Variations service for distributing compiled variations of this alpha. People who have previously purchased the Variations can use the activation code they already have.

If one in ten users of Mini vMac purchased the Variations (for $5), that would be more than enough to support full time development of Mini vMac, rather than the current slow pace. But, more realistically, it might eventually at least pay for the web hosting costs.

August 4, 2010

Today's Development source snapshot contains an experiment in CPU emulation. The CPU emulation method introduced in 3.0.1, and made the default in 3.1.0 involves a table that classifies each of the 65536 primary opcodes, saving the work of decoding opcodes bit by bit. It has occurred to me that the reason that it is not much faster than the previous approach is because it is a poor fit for the caching scheme of modern processors. On each instruction it loads a random byte from this table, which can cause the CPU to load an entire cache line, perhaps 32 bytes or more, depending on the CPU, the rest of which likely won't be used. One alternative would be to go back to the previous bit by bit decoding, making the program a bit smaller and use a bit less memory, making it more "mini". But instead I've experimented with going in the opposite direction - as long as an entire cache line is being read in anyway, make each element of the table larger, saving additional information that can help with emulation. That's the basic idea, but the pros and cons are complex, and to see what really would happen I needed to try it. Each element is now 8 bytes, and depending on the opcode, saves information about the instruction arguments. The main advantage is that there are now fewer paths for decoding arguments, so those that remain can be better optimized, at the expense of making them larger. Parts of the routines they call are inlined into them, and then rearranged for better parallelism. Another advantage is that since there are no longer separate classes of, for example, the ADD instruction for each style of arguments, instead there can be separate classes for each of the argument sizes (byte, word, and long), avoiding nasty conditional branches that modern processors will likely mispredict. Another benefit is that more of the logic of the emulator is moved into the code that sets up the table (in M68KITAB), simplifying the multiple versions of MINEM68K (c code, and assembly language for each processor). The new approach so far averages around 5 percent faster for x86 and PowerPC assembly language, and I feel more improvement is possible. The c version can be slower than before. The new approach makes careful assembly language optimization more possible, but that generally doesn't help a c compiler.

July 16, 2010

The theme for the latest Development source snapshot is address space translation, the mapping between emulated memory and real memory. With much refinement the new scheme developed at the end of last year (internally known as "UseMATCs"), is within a few percent of the speed of the previous scheme (internally known as "UseBanks"). So I've decided to make the new scheme the default, trading some of the speed gained by recent use of x86 assembly for more accuracy and flexibility. The "UseMATCs" scheme can handle equally well the old 24 bit addressing and the newer 32 bit addressing, available on the Mac II and later. It also allows detecting misalignment without additional speed penalty. This is important because in previous versions of Mini vMac, a misaligned memory access near the very end of a bank of memory could end up reading or writing past the end. This mostly worked for Macintosh Plus emulation, because the memory mapping is mostly contiguous. (For safety, Mini vMac allocates a few extra bytes past the end of emulated memory.) It's just inelegant, and not a practical problem. For later Macintosh computers, it could matter more, particularly if one wanted to emulate a PMMU. Mini vMac can now accurately emulate non contiguous memory mappings.

Some unrelated tweaks to the PowerPC assembly version allow it to nearly maintain its previous speed.

In other unrelated work, the Mini vMac build system now supports the Digital Mars Compiler (with "-t wx86 -e dmc") and the Pelles C Compiler (with "-t wx86 -e plc" and "-t wx86 -e plc -cl").

Much of this work was accomplished during a trip from June 23 to 30, with gas sponsored by Anonymous.

June 20, 2010

The latest Development source snapshot continues work on the new approach to assembly language for the core 68000 emulation. The build system now supports using assembly language in the Linux for Intel version.

Furthermore, assembly language can be used for the Windows version, using the command line tools from Bloodshed Dev-C++ (basically a version of MinGW). I haven't figured out a way to make the IDE deal with assembly code. To compile with the Bloodshed Dev-C+ command line tools, use "-t wx86 -e dvc -cl" in the Mini vMac build system, extract the resulting archive in Windows, and at the Windows command line, run something like "set PATH=c:\Dev-Cpp\bin;%PATH%", then change to the extracted directory, and run "make". The result is somewhat faster and smaller than the previous best version compiled from the c code, using Microsoft Visual C++. This demonstrates the hoped for advantage of using assembly language, getting consistently good results with any development tools.

Compiling for PowerPC Linux, broken in the previous snapshot, is fixed. But late testing revealed a trivial bug in this snapshot preventing the Mac OS 9 and earlier for PowerPC version from compiling. This will be fixed in the next snapshot.

June 1, 2010

Today's Development source snapshot takes a different approach to assembly language source code (previously used only on PowerPC computers, for 68000 emulation). This made it more feasible to start supporting assembly language on Intel computers. So I have started tweaking assembly language on my Mac Mini (starting from assembly language generated by GCC for "MINEM68K.c").

So far it is more than 25 percent faster (on a 1.5 GHz Intel Core Solo). Which isn't all that much. I hope to improve this in the future, but I don't expect by too much. I think the main limitations are unpredicted branches and cache misses, neither of which would be much affected by tweaking, without taking a completely different approach than used by "Mini" vMac.

So the main motivation for using assembly language remains to give more consistent results using different development environments. In the future. The build system currently only uses Intel assembly language for OS X. I have gotten the Linux version to work with it, but haven't supported it in the build system yet. Another limitation is that for both PowerPC and Intel, the assembly language version only emulates the 68000, and not the 68020 used in the Mac II emulation. So the emulated Mac Plus is faster than emulated Mac II. Another motivation for the assembly language is aesthetics. The compiled c code is just so ugly, partly because the c language doesn't allow direct access to certain features of the computer. (Though this doesn't seem to slow it down that much, because of other bottlenecks.)

This work was mostly accomplished during a trip from May 21 to 28, with food sponsored by ClockWise, Greg Lee, Timothy Scoles, and Claude Armstrong, and gas sponsored by Timothy Scoles.

In other news, Jesús A. Álvarez (Zydeco), has announced FuseHFS, to allow OS X Snow Leopard to write to HFS disks (and disk images). (He has previously ported Mini vMac to Android and the jailbroken iPhone.)

May 6, 2010

There is a new Development source snapshot and also many of the Mini vMac Extras have been updated. The main change since the January snapshot is to make the build system and the extras easier to compile with different Macintosh 680x0 C compilers. It's not very "open source" if it requires a compiler that almost nobody has. One development environment that can now be used easily, MPW, is still available from Apple, for free. (It requires a Mac II or later - the Mac II emulation of the last Mini vMac alpha seems to work well enough.) I have started some documentation on compiling with various compilers.

(I had previously started a project to make the build system portable in the same way that Mini vMac is, so that it would port itself as well as Mini vMac, but I backed out of that for being likely in the long run to take up too much time to maintain. The current idea of only supporting Macintosh 680x0 has the advantage that most of the Mini vMac extras can be compiled in the same way as the build system.)

Much of the initial work on this portability was done in a few days in March, one day of which was sponsored by Leon Buijs. For one reason and another (starting with record snow in February) I haven't had much opportunity for longer trips to work on Mini vMac, but hopefully I will again within a month or so. Expenses for the next trip have already been sponsored by ClockWise, Greg Lee, Timothy Scoles, and Claude Armstrong.

Thanks to Zebadiah Kimmel and Iván dominguez martin I have a new keyboard, and so have less stuff to cart around between locations. I think the Apple keyboard is the nicest I've used, quiet, not requiring much force, and the main thing - no numeric keypad. The remainder of the donation from Zebadiah Kimmel, along with one from Greg Lee, go a significant way towards sponsoring a new Mac Mini, which would enable supporting 64 bit Intel versions of Mini vMac.

Thanks to Ryan Schmidt for finding and fixing a bug in the previous (unannounced) snapshot. Also, thanks to an anonymous report, I've made the PowerBook 100 emulation compile work again (though it still doesn't do much).

Douglas Mencken has compiled Mini vMac for Fedora 12 PowerPC Linux. I've added the link to the Ports page. It's not clear to me whether it would work on other PowerPC Linux distributions. The Intel Linux binary I provide seems to work most places, but only because it was compiled on an ancient version of Linux (Red Hat 7.1). I've also added to the ports page a generic X source archive, which was available for Mini vMac 3.0.4, but was previously missing for Mini vMac 3.1.3.

Thanks to Andrew H., CopyRoms will now correctly save a 2M ROM image on a PowerBook 520 or PowerBook 540, instead of 1M. Also because of that discussion, I've started adding md5 checksums to my page of ROM information. I also created the utilities Md5Im and Md5Fl so that I don't need to document or support all the other software out there that calculate md5 checksums.

There are also various other fixes and refinements to CopyRoms and the rest of the Mini vMac extras. For example, binUnpk wasn't setting the bundle bit of the extracted file. FindCode didn't work on a 64K ROM. TestSync would leave the screen corners white.

The new GetRsFrk utility makes it easier to disassemble an application (instead of a ROM image). I've made another example application, Blacken.

Sorry for the lack of news updates lately. With lack of time, documentation and publicity are the easiest things to neglect, since I'm mostly a programmer. But they're probably more important to the goals of the Mini vMac project than the programming.

February 15, 2010

Luc Pauwels has compiled and packaged Mini vMac 3.1.3 for Solaris 10 on SPARC and x86.

January 28, 2010

The latest Development source snapshot contains the preceding week's work on Macintosh II sound emulation. John Knoll sponsored food for the week, and Manuel Alfayate sponsored gas.

In many cases the Macintosh II emulation can now emit sound that is recognizably related to how it is supposed to. It's not perfect yet, and due to the nature of sound that means it not really yet usable at all. But it is significant progress.

Emulation of the ASC (Apple Sound Chip) is difficult, because unlike previous hardware emulated by Mini vMac, I have no real documentation of its operation. (I had a few clues from the Mac II section of Apple's "Macintosh Family Hardware Reference", from mac 68k bsd ports, and from the December 15th version of the MESS emulator source code, where early work has been done on ASC emulation.) Furthermore, unlike other hardware that has been emulated in Mini vMac so far, the ASC is not usually controlled by software in ROM, so my ROM disassembly is of less help.

So most of the work in the last week was not directly on the sound emulation, but improving the logging infrastructure in Mini vMac, to make it easier to figure out what is going on. It can now write out megabytes of information per second to a log file without bogging down the emulation too much. (On a modern machine.) Also, expanding upon code in Ross Martin's FPU emulation work, I've been putting in a disassembler directly into the emulator. Besides disassembling a number of instructions executed after an event of interest, it can disassemble instructions prior to the event, as the emulator can save the addresses of instruction executed to a circular buffer.

Logging code is enabled by a new build system option '-log', and the disassembler by the option '-dis'. But nothing much will happen without further enabling or creating code to log various events that you are currently interested in. This is for developers only.

January 20, 2010

I've updated the blank disk images archive. Surprisingly, this has been one of the most popular downloads. The new version provides many more sizes. It also includes a few images in Disk Copy 4.2 format, with file tags and checksums, which are useful with the compile time options “-sony-tag 1” and “-sony-sum 1”. These options are enabled in Mini vMac variation 155, and in the new variation 2010.

Selected variations (including 155 and 2010) are now available from a new Mini vMac Variations page, this time with no activation required. The evidence so far is that simply accepting donations is more effective than the shareware like scheme. Also, it seems a better match for the goals of the Mini vMac project. And also, SourceForge has recently made it much less of a pain to release files, so including more than just the default compile is less of a problem.

Thanks to a donation from Andrew Johnstone, along with income from the former variations activation scheme, I now have a copy of Microsoft Windows 7 for testing Mini vMac on. The first use of it was in updating the Screenshots page. Beside a new image for Windows, I also added new images for OS X and Linux, and put previous images on another page (which also includes new screenshots of Mini vMac running on Windows 98 and Mac OS 7.5.5).

I run Windows and Linux in VMware Fusion. Thanks to donations from Andrew Johnstone, Steve Waddell, Evan Appelman, Stephen Kluskens, Jonathan Ploudre, and Zheng Yang, I now have a 1 TB hard drive for holding all my current VMware Fusion images, with room to create more.

Thanks to John Knoll for sponsoring food for my next period of working only on Mini vMac without internet access. This starts later today, and will last about a week. And thanks to Leon Buijs for sponsoring one day of work on Mini vMac (I haven't picked which day yet).

I haven't found as much time lately to work on Mini vMac with internet access. Sorry for not keeping up with email. This may change later this year, or else I'll just try getting better at making do.

Some news from Mini vMac development is that I've tried out a new scheme for caching the translation of emulated to real addresses. Mostly it has shown just how good the current scheme is, which was one of the first things I worked on in Mini vMac almost a decade ago. But I expect the new scheme will still be useful eventually for emulating later Macintosh computers that spend most of their time using 32 bit addressing.

December 7, 2009

Mini vMac 3.1.3 is now officially released (with no change from the final beta, as usual). Mini vMac 3.1.3 is rather old news by now, which is how it should be. There should be no surprises in the stable version. The Changes file lists what has changed since Mini vMac 3.0.4. To summarize, the main work has been on Macintosh II emulation, which is not yet complete, but also the default Macintosh Plus emulation is a bit faster and smoother. One fun new feature is a compile time option to emulate a hacked Macintosh Plus with larger screen sizes.

There is also today a Mini vMac 3.2.0 alpha. It is early in the development of the 3.2.x branch, but since Macintosh II emulation is so much improved since 3.1.3, I've decided to make some official binaries. (There isn't too much change from the previous development source snapshot, except for more accurate timing.)

Thanks to a donation from Jonathan Ploudre, I now have new headphones for use in working on Mini vMac sound emulation. My previous headphones were failing.

November 8, 2009

I've rearranged the website a bit in preparation for the upcoming official release of Mini vMac 3.1.3. (If you know of any bugs, tell me now.)

Thanks to donations from Pedro Maciel, Greg Lee, and ClockWise, I now have VMware Fusion 3. It is supposed to work better with OS X Snow Leopard, and should eventually allow better support for Windows 7 and 64 bit versions of Mini vMac. I use VMware Fusion for all Windows and Linux development.

I've received a couple reports that Mini vMac 3.1.3 works fine in Windows 7, so that doesn't seem to be reason to delay the official release.

November 2, 2009

Jesús A. Álvarez (Zydeco), has announced the start of a port of Mini vMac to Android. He previously ported Mini vMac to the jailbroken iPhone.

October 25, 2009

Thanks to a donation from ClockWise of E-Maculation, I now have Snow Leopard (Mac OS X 10.6). I haven't seen any problems with Mini vMac in Snow Leopard yet. I didn't really expect to, or I probably would have heard about it from someone else already. None the less, I will be much comfortable about officially releasing Mini vMac 3.1.3 after trying it on Snow Leopard myself. (It would also be nice to try it on Windows 7.)

I've made a few refinements to the recently reinstated donations program. I now explicitly state that donations made with the donate button on the main Help Mini vMac page will be used for items on the Mini vMac Wish List. People may now specify a web page address that they would like their name to be linked to in the list of sponsors. And I have made a new Wishes Granted page, for items in the Wish List that have been obtained, starting with Snow Leopard.

Having Snow Leopard also makes it possible to better support Xcode 3.2. Ryan Schmidt had already clarified his earlier report to say there is only a problem if no '-ev' argument is used, so that the build system generates a project for Xcode 2.4.1. Also he was using the command line tools ('-cl'). If '-ev 3100' is used, then a project is created for Xcode 3.1, which Xcode 3.2 works fine with. I'll look into adding a '-ev 3200' option, though so far it doesn't look like that much is different.

There is one problem with Snow Leopard that many people have reported. It does not supported writing to HFS disks, or disk images. (It can still read them.) So the method described on the Disk Images page no longer works in OS X. The ImportFl utility can be used instead, but it doesn't transfer resource forks. An eventual solution would be to create a utility for OS X that can archive files in a format that can be extracted in the emulated mac. Or else a utility for the emulated mac that can extract zip files created by OS X. For now, you can use an older version of OS X to transfer files that have resource forks.

October 14, 2009

Today's Development source snapshot is the first in the 3.2.x series. This snapshot includes a first draft of merging in Ross Martin's FPU emulation code. There's still a lot of work to do, but it already allows much more software for the Mac II to run without crashing.

One thing I changed is that it was originally using the native floating pointing abilities of the computer it ran on, which I'm not enthusiastic about, because this could cause the emulation to give different results on different computers, and because of the even worse problem of getting it compile on various compilers that provide different ways of accessing obscure floating point features. Instead, I've made it use SoftFloat (by John Hauser), which I found being used in the Bochs emulator, plus some extensions to SoftFloat in Bochs by Stanislav Shwartsman. Though it's slower, it should give consistent results with minimum trouble. (The native floating point option is still available in the code for anyone who wants to fiddle with it, but I don't intend to support it.) SoftFloat does require the compiler to support 64 bit integers, and I haven't updated the build system yet to adjust this for different compilers (It is currently hard wired to use "long long").

One fun thing the improved FPU emulation makes possible is that the final MPW development tools from Apple now run well enough within Mini vMac to successfully compile the 68000 version of Mini vMac. (Mini vMac doesn't actually run inside the Mac II emulation unless it is compiled without sound. The incomplete sound emulation now seems to be the main reason programs don't work in the Mac II emulation.)

October 8, 2009

There is now a Mini vMac 3.1.3 beta, with a few small bug fixes. (The Variations service is also updated.) Thanks to an anonymous bug report and patch, 16 and 32 bit color will now work in Intel OS X (to the extent that the incomplete Mac II emulation works at all).

I've noticed that if Mini vMac is in Stopped Mode, mouse and keyboard events are no longer discarded, but saved in the Mini vMac event queue and played back upon leaving Stopped Mode. This might not be quite what is expected, but I've not changed this, since it turns out to be a good way to test that the new event queue code works as expected. Which it didn't. I've fixed several bugs in it. (The new event queue code is supposed to ensure that mouse and key events are handled accurately, even if emulation is not getting time to run regularly.) Also fixed is a bug where if Mini vMac for OS X was in Stopped Mode, error messages such as for failing to open a disk image would not be displayed.

I've updated the copyright year for the build system. Thanks to Ryan Schmidt for pointing this out. Also fixed is a bug where the build system would fail silently if the argument to "-n" is too long. (The maximum allowed by the HFS file system is 31.)

Since several people have asked about it, I have recently enabled donations for Mini vMac again. Asking for donations has not been very effective in the past, but I'm in no position to turn them down. I'm also trying something new, creating a "wish list", so that people can sponsor specific items that would aid the Mini vMac project. For example, Mac OS X Snow Leopard. Donations can be made from the Help Mini vMac page. This page also lists many other ways to help the Mini vMac project, financially and otherwise. My thanks to the one person who has already noticed this page and made a donation.

September 19, 2009

Ross Martin has implemented FPU emulation for Mini vMac, for x86 linux. This is a major step towards a more complete Mac II emulation. He also implemented 32 bit color for the gtk port. I've uploaded his source code here.

I'll merge this into the Mini vMac 3.2.0 branch I've begun. This branch so far has mostly source code clean ups. This seemed a good a time as any for cleaning. I find it a good way to turn up for bugs. A few minor issues turned up, but not enough to warrant making a 3.1.3 beta. Then I received an anonymous report of 16 and 32 bit color not working (in the Mac II emulation) for Mac OS X on Intel, and patch to fix it. That is enough, along with the other issues, so I think I'll make a new beta.

Ryan Schmidt reports that the Mini vMac build system doesn't support XCode 3.2. I may need to obtain Snow Leopard after all before 3.1.x can be final.

Another anonymous contributor sent versions of David Sibley's Mini vMac OS X icons converted for Windows. I've uploaded the files here and here. I'm not very familiar with how custom icons are used in Windows. I'll need to investigate further, and then add them to the Mini vMac Extras.

August 1, 2009

There is now a Mini vMac 3.1.2 beta. The Mini vMac Variations service has been updated. As usual for Mini vMac, "beta" also means "release candidate". I don't know of any problems with it, and if no problems are found in a reasonable time, it becomes the official release version. (But it is more likely that there will be another beta or two.)

The Macintosh and Windows versions now match the X version in not initially filling the sound buffer with silence, but instead waiting to accumulate real sound samples before starting to play sound. This may reduce the tendency to stutter as the program starts, mostly by giving the emulation more time to get settled into a regular rhythm before attempting sound. I also changed the X version to match the Macintosh and Windows version in only skipping a single sound block on underrun, rather than stop playing sound until the buffer is refilled.

There is also much more work done on sound, but it is disabled for the time being. A Mac Plus plays sound samples ranging from 0 to 255, but when not playing sound it often doesn't leave the level at the midpoint 128, but at some other value like 0. This can causes clicks when the emulation is paused. To reduce clicks, Mini vMac currently contains a deliberate inaccuracy in setting the sound to level 128 when sound is disabled instead of 0. I'd thought I'd try a different approach and instead have Mini vMac notice when the emulated computer is outputting a constant sound level, and then gradually shift real sound output to the midpoint. When the emulated computer begins outputting sound again, the real output is first gradually shifted back to where it was. Unfortunately this approach didn't seem to work, at least on a Mac OS X 10.5 on Intel. The shift was clearly audible. No matter how gradually Mini vMac shifted the sound level, the operating system seems to think, there's sound here, but it's really faint, let's amplify it so you can hear it clearly. Eventually I found that converting to 16 bit sound avoided this "feature". But this is starting to get too major a change for too subtle a benefit, so soon before release, so I've disabled this code for now.

There is now a build system option "-vsync 1" for OS X only, which turns on OpenGL double buffering and sets AGL_SWAP_INTERVAL to 1. This eliminates the "tearing" issues noted Manuel Alfayate. Unfortunately it isn't yet a real solution. Beside using much more memory, it also reduces the maximum speed of emulation unpredictably and erratically, because it makes aglSwapBuffers block until the vertical retrace, when Mini vMac is expecting to give the emulation extra time, for above "1x" speed. Anyway it helps to illustrate the issue. Now that I've seen what it looks like with vsync, I can see the difference in certain games. [update: I've added variation 159 to demonstrate this option.]

Control-P now gives some visual feedback, displaying the message "Registration String copied".

A bug is fixed in alternate keyboard mode that could result in the emulated ';' key being left stuck down.

Entering full screen mode immediately after launch in OS X 10.5 wasn't working properly. The title bar would show at the top of the screen. This seems to have broken because I tried avoiding the deprecated call aglSetDrawable. There actually seem to be two bugs of Apple here. aglSetWindowRef didn't work quite right on a window without a title bar, so I had changed it to use a normal window, but now this problem turned up. So I've reverted back to the Mini vMac 3.0.4 method of using aglSetDrawable on a window without a title bar. It's probably not worth verifying that these actually are Apple bugs, instead I should be moving Mini vMac to the Cocoa API, and then it might be worth reporting bugs.

July 26, 2009

I've created a first draft of updated documentation for Mini vMac 3.1.1. This includes the Changes page.

July 24, 2009

I have moved and revised the feedback page. This page now offers a form, rather than linking to a page with a form, and doesn't offer the SourceForge trackers and forums, which I think I'll phase out as too much trouble.

I've also started a Mini vMac mail archive, to contain the mail I've received and my responses. I'm still working out exactly what it looks like. This might become the primary way for me to respond to mail, since email is less than completely reliable. Partly because of spam filters, also sometimes people just enter the wrong email address on the feedback form. (Such as Vince, most recently.)

July 22, 2009

I have set up a registration scheme for the Mini vMac Variations service. It allows people who have purchased an activation code to in effect vote for which variations are important and where I should be spending my time.

Thank you to everyone who has already bought an activation code, even though Mini vMac 3.1.x is still in alpha. There have been no reports of problems with Kagi so far. Earlier, the first of my own two test purchases didn't go smoothly, when things hadn't been quite set up properly, but Kagi took care of that extremely quickly. So I'm pleased with them so far.

July 13, 2009

TestSync is a small program that demonstrates a problem reported by Manuel Alfayate with the video emulation of Mini vMac. Without TestSync I couldn't see the problem, even when I was looking for it. In fact, I wrote TestSync to prove the problem didn't exist, but it didn't work out that way. Either Manuel has very good eyes, or the problem is more obvious on his hardware.

Anyway, now that I can reproduce the problem, I can think about what to do about it.

June 28, 2009

There is now a Mini vMac 3.1.1 alpha. The Mini vMac Variations service has been updated to use the new version. The new version corrects some minor problems found in the previous alpha.

I've removed a warning message about "read verify" mode that I recently put in to see whether this mode is used. It turns out that it is, such as when using the Finder to copy files to an 800K disk. So sometime I should implement this mode correctly in the replacement disk driver used by Mini vMac. For now it just continues to treat it as a normal read, which isn't correct, but doesn't cause problems.

The Windows call SHGetSpecialFolderPath doesn't seem to be supported in some development environments, so I've made Mini vMac dynamically load the routine instead. Mini vMac is using this routine to support finding ROM images from a central location, and to support activation of Mini vMac Variations.

As reported by "macgeek417", the "-m pb100" option wouldn't compile. It will now compile, but still not do much. Making sure it compiles may help prevent bit rot until I get back to Powerbook 100 emulation.

The "-min-ext" option also wouldn't compile. I've fixed this, so Mini vMac Variation number 157 is now available.

The build system will now work properly from a locked disk when exporting an archive, if there is an output folder preference. (The archive is placed in the output folder, rather than in the folder containing the application.)

The build system can now resolve aliases of folders, such as the output preference folder. So the output can be directed anywhere, such as to another disk.

I previously incorrectly documented the output preference folder. The build system looks for "System Folder:Preferences:Gryphel:Build:output", not "System Folder:Preferences:Gryphel:output".

The build system can now handle multiple sets of options at once, separated by ";". I use this in the process of compiling the set of Mini vMac Variations. To allow this to work, the build system no longer replaces the entire output folder on each run, but just replaces folders within the output folder.

I've removed the "-pk" option of the build system to restrict the program to a more manageable scope. And anyway I find it more convenient to handle post processing in external scripts.

The build system now has an "-an" option, for changing the programs abbreviated name, from the default "minivmac". So the Mini vMac variations are compiled with say "-an mnvm0001", instead of "-n mnvm0001-3.1.0-umch". The abbreviated name must be 8 characters or less, and should only include lowercase letters, numbers, and underscores.

The Mini vMac Variations that require an activation code now have a new command: Control-P. This copies a string to the clipboard of the real computer that contains version information and an encoding of the activation code. This could be used for a scheme to allow people to "register" the variations they use, and in effect allow them to vote for what variations they think are important.

June 5, 2009

I've added some more variations to the Mini vMac Variations service.

Also, "macgeek417" points out that I haven't previously announced the addition of the build system option '-m SEFDHD', for emulating a Macintosh SE FDHD. It is currently identical to the Macintosh SE emulation, except for expecting a different ROM (which should be named 'SEFDHD.ROM'). This was added last year in May, thanks to reports from Steve Secker and David Sibley.

June 3, 2009

The Mini vMac Variations service, which I described last week, is now live.

May 27, 2009

There is now a Mini vMac 3.1.0 alpha. I've decided to make a new stable version soon, without waiting to complete the Macintosh II emulation. Since that is where most work has been done, this will be a fairly minor update. Still, the current stable version is getting old - I'd prefer any possible future derivative projects to be based on more recent code.

Also, I'd like to experiment with offering a new service. A lot of the power of Mini vMac comes from the variations that can be compiled, such as emulation of different Macintosh models. However, no matter how easy I try to make it to compile variations from the source code, it has become clear that most people aren't going to do this. So I've decided to try offering some compiled variations as shareware, which people can download, try out, and purchase if they find them useful. I'm currently thinking maybe $5 for the set all of available variations (until the 3.2.0 release), perhaps using the Kagi payment processing company. If this is successful enough, it will motivate me to do it again - compiling, packaging, testing, uploading, and verifying variations of the 3.2.0 release of Mini vMac.

This will be just an additional service - the default compile remains free, the source remains free (and by the GPL license must always remain available), and anyone can compile variations themselves, if they spend a little time to figure out how. Also, people can of course still make publicly available versions that they compile, and I'm pleased when they do so.

To demonstrate how this might work, the alpha download page includes an "activation demo". This is a variation of Mini vMac with the larger screen hack (not all software is compatible with this, but much is), support for file tags when using disk copy 4.2 format, and allowing up to 16 mounted disks. So far it is available for Mac OS X and Windows. (Linux users are presumed to be more comfortable with compiling from source.) When first launched it prompts for an "activation code". A temporary code is provided right on this prompt - "281 953 822 340". If you type in this sequence of digits, the prompt goes away, but comes back again on the next launch. It is expecting you to type digits (0-9). You can type the spaces, but they are ignored. You can correct mistakes with the backspace (delete) key. The only penalty to using the temporary code is having to enter it on every launch - the program otherwise works as normal, and there is no time limit. If you instead type the sequence "275 227 140 839", it saves this in a preference file, and should not ask again. (I'd be interested in hearing if this doesn't work, especially on Windows Vista, where I haven't tested.)

I think it is ok to have this activation demo on SourceForge, since the activation code is provided. I'll put the rest of the variations elsewhere. The source code dealing with activation is also provided, and it's not especially sophisticated. It is only intended to be a little harder to get around than it is to figure out how to compile Mini vMac from source.

Beside the activation code stuff, there are also a few other new things since the last source snapshot. If Mini vMac, on Mac OS X or Windows, doesn't find the ROM file in the folder containing the application, it will now also look in a specific central location. In OS X it checks in "/Users/[your_UserName]/Library/Preferences/Gryphel/mnvm_rom/". In Windows XP, "C:\Documents and Settings\[your_UserName]\Application Data\Gryphel\mnvm_rom\". Windows 98, "C:\WINDOWS\Application Data\Gryphel\mnvm_rom\". And in Vista, I think "C:\Users\[your_UserName]\AppData\Roaming\Gryphel\mnvm_rom\". Usually "mnvm_rom" would be an alias (on OS X, on Windows this is called a short cut) to where ever you keep your ROM collection. This avoids having to create an alias to the ROM image for each emulated Mac you use.

There are also some assorted clean up of the emulated video and disk drivers. Also, thanks to an anonymous tip, I cleaned up some code that may cause compiler warnings about security dangers. (I believe it was ok as actually used, but poor style.)

"macgeek417" pointed out that the Mac Plus emulation will work with 128K memory, so the build system now allows "-m Plus -mem 128K".

The alternate keyboard mode option now gives a visual indication of the current keyboard mode, intended to be easy to see in peripheral vision, without covering up where text is normally typed.

The build system will now check if the folder "System Folder:Preferences:Gryphel:output" exists, and if so direct output there, instead of "minivmac:output:". This is useful if you keep the minivmac source disk image on a flash drive, avoiding excessive wear.

April 2, 2009

Todays Development source snapshot merges in code sent by "zydeco" from his iPhone/iPod Touch port that improves support for the Disk Copy 4.2 disk image format, using information found in the Lisa Emulator Project by Ray A. Arachelian. I've also tried adding support for file tags to Mini vMac.

There has been no further progress in Macintosh II emulation since the last snapshot. And I haven't been keeping up with correspondence. But the good news is that I think I'm gradually getting my health back.

The code from zydeco means that Mini vMac will now get the correct size of the data in a Disk Copy 4.2 disk image, and will identify such an image even if it is not in HFS or MFS format.

Also, with the build system option "-sony-sum 1", Mini vMac will update the checksum in a Disk Copy 4.2 disk image when it is unmounted. This prevents other programs that deal with such images from complaining about an invalid checksum. (I didn't include this by default, because it makes Mini vMac slightly bigger and slower.)

With the build system option "-sony-tag 1", Mini vMac tries to support file tags. There are an additional 12 bytes for each 512 byte block on a 400K or 800K floppy disk, containing some additional information that was supposed to aid in recovering damaged disks, but was never actually used much. The Disk Copy 4.2 disk image format can support these tags. (The more usual raw format, such as found in Blanks, does not.)

The build system also now has the option "-sony-dc42 0" to completely disable support for disk images in disk copy 4.2 format. This could be useful when trying to compile the smallest and simplest version of Mini vMac possible for some specific purpose. It should not be used when compiling a version of Mini vMac for general distribution, because a primary goal of Mini vMac is that disk images that work with any past version of the program should also work with the current and any future version (at least when default compile options are used).

To make it easier to support file tags, and also easier to make (and debug) other changes, I've moved most of the logic of the replacement disk driver out of the 68k code and into the main Mini vMac program. This actually is moving back closer to how vMac works. But it still avoids having the main program try to call back into the 68k code, which I never got to work reliably.

I've made a number of small changes to the replacement disk driver that I think make it act closer to original Apple versions. (But which don't make any known observable difference.)

One more change in this snapshot is that it supports Microsoft Visual Studio 2008 Express, using "-t wx86 -ev 9000" in the build system.

January 24, 2009

For the 25th anniversary of the Macintosh, I've greatly expanded the "Books about Macintosh 680x0" section, by a factor of 10, to over 600 books. I've also put back in the Amazon links to make it easier to acquire them. The hope is to encourage preservation of these books by helping to encourage a market for them. Also, buying books through the Amazon links will help support the maintainence and further development of Mini vMac.

December 19, 2008

I am travelling for about a month mostly without internet access.

December 6, 2008

The latest Development source snapshot supports color in the Windows version for the Mac II emulation. (Previously color only worked in OS X.)

It currently uses StretchDIBits for all color drawing in Windows. I'm not sure if this will give adequate performance on all versions of Windows on all hardware. It seems to work ok in Windows 98 running in VMware Fusion, which is all I've tried so far.

As a reminder, these development snapshots are not betas, or even alphas, they are just work in progress. I'll accept bug reports, but I'm not particularly interested in having people test the snapshots. Most people should stick with the stable version. The reason for the snapshots is to conduct development more openly, since Mini vMac is open source. The main practical uses for the snapshots are to assure people that Mini vMac is actively developed, and for backup.

There have been complaints about the rarity of the Macintosh II. So this snapshot also supports emulation with the Macintosh IIx ROM, using '-m IIx' in the build system. The ROM image should be named 'MacIIx.ROM'. (The ROMs in the IIcx, II FDHD, and the SE/30 are supposed to be identical to the one in IIx. Actually I don't own a IIx, I have a IIcx, donated by Lil and Sherm Sundet.) This doesn't really emulate a Macintosh IIx yet, it just accepts the IIx ROM and emulates the Macintosh II hardware, which seems to work ok. I haven't looked closely yet at what the differences should be. (One main difference is that a IIx should have a 68030 instead of 68020 CPU.)

There is a new memory allocation scheme in this snapshot, so the platform dependent code doesn't need to know about each allocation made by the platform independent code. This made it simpler to fix a problem with compiling the CPU emulation code for Macintosh 680x0.

The build system now supports Xcode 3.1, using the option "-ev 3100". Mini vMac compiles without warnings, which wasn't possible with the SDK that comes with Xcode 2.4.1.

The build system can now be compiled with the final version of MPW, still available from Apple, rather than only with MPW 3. Unfortunately, the final MPW doesn't quite work yet in Mini vMac, but I hope to make this work in the not too distant future (by implementing the FPU in the Macintosh II emulation). I also went further, as far as porting the build system to the Xcode tools on Intel OS X, but I'm not sure that I'll keep this.

In unrelated news, thanks to ClockWise of Emaculation, for pointing out that Gemulator is now open source. Or at least the source is available. Looking at it so far, I can't tell under what license. The copyright notices seem to just say "All Rights Reserved." Also, the interesting (to me) bits seem to be missing. The "mac.vm" folder, which I would guess should implement the Macintosh emulation, just contains empty files. Anyway, Gemulator is supposed to be able to emulate a Macintosh Plus in addition to Atari computers, and in this release also emulate later models such as the Macintosh II. But so far I didn't get it to work in Windows 98 in VMware Fusion (specifying a disk image seems to be broken), I might try later using a later version of Windows.

November 20, 2008

"zydeco" has made "an iPhone/iPod Touch port of Mini vMac, for jailbroken iPhone OS 2.x devices". Thanks to David Sibley for pointing out this news.

I have been ignoring the iPhone myself, since my understanding is that Apple's restrictions on non hacked iPhones mean that emulators (and perhaps also GPL licensed software) are not welcome, and I have no interest in going against the wishes of Apple. But even I find this port interesting and useful, since it may make it much easier to port Mini vMac to the Cocoa API for OS X, as may eventually be necessary (Apple is ever more strongly discouraging use of the Carbon API that the current OS X port is based on).

October 17, 2008

Thanks to "Gord" for pointing out to me the news that the source code for Executor has been released. I think that an interesting use of it could be to create an open source ROM replacement for Mini vMac. Unfortunately, I can't work on this myself since I have looked a lot at Apple's ROMs. (Executor is a "clean room" emulator.)

October 13, 2008

Today's Development source snapshot adds color to the Mac II emulation. So far this only works in OS X, with other platforms to be implemented later.

The desired color depth is chosen at compile time, with the "-depth" option in the build system. "-depth 0" is black and white (the default for now), "-depth 1" is 2 bit color (4 colors), "-depth 2" is 4 bit color (16 colors), "-depth 3" is 8 bit color (256 colors), "-depth 4" is 16 bit color (thousands), and "-depth 5" is 32 bit color (millions). These options only work with the Macintosh II emulation ('-m II'). Color depth is a compile time option, instead of run time option, to help keep Mini vMac simple and small. However, regardless of the chosen color depth, Black and White is also available, and can be selected from the "Monitors" control panel. (In fact, you may not see color until selecting it from the "Monitors" control panel.)

The FPU and ASC are still not implemented, which sharply limits what programs will work without crashing (which I may not have made clear enough before). Two programs that will work nicely, in color, are "Slime Invaders 2.0.7" by Ingemar Ragnemalm and "Glider 4.10" by John Calhoun, which are both listed in the Arcade Games page.

Besides adding color, this snapshot also patches out the RAM checking at start up code from the Macintosh II ROM (as is already done for other models), and initializes the PRAM more suitably for a Macintosh II. Together, these allow the Macintosh II emulation to start up much faster.

September 6, 2008

The next Development source snapshot fixes the cursor display issue in the Mac II emulation (by implementing the VBL interrupt in the emulated video card). So now this emulation can be perfectly useable for long stretches of time, until it attempts to play sound or do any floating point arithmetic. The FPU and ASC emulation need to be worked on. It is still black and white only for now. (The build option for Macintosh II emulation is '-m II'.)

Besides the documentation from Apple (such as "Designing Cards and Drivers for Macintosh II and Macintosh SE"), the source code for the Basilisk II emulator has been a useful reference. Thanks.

Also thanks to Jonathan and Shelly Pratt, for making possible this work.

There are a number of other changes besides the cursor display fix. The Mac II emulation can now support other screen sizes, at compile time with the -hres and -vres options. The default is 640x480, but 800x600 for example can be selected with '-hres 800 -vres 600'. The MacsBug debugging software operates correctly, unlike when using the larger screen hack implemented for other Macintosh models. (The video card ROM, which lists the available modes, is now created dynamically at startup. Only the driver code is precompiled. The source to this driver is now included in the snapshot. I forgot to include it in the previous snapshot.)

The Mac II emulation can now use 8M of memory, twice the 4M limit on all previous versions of Mini vMac. The build option is '-mem 8M'. It can also use '-mem 5M', '-mem 4M', '-mem 2M', and '-mem 1M'. The '-m' option now checks that its argument is valid for the machine being emulated. So the Mac II for example has two banks of memory, each of which can contain 1M or 4M or none (or higher on the real machine, but that isn't useful with 24 bit memory addressing).

By the way, the Mac II emulation in Mini vMac does implement 32 bit addressing, as it is required to even boot, but the emulation is optimized for 24 bit addressing. The 32 bit addressing mode is significantly slower.

The Mac II emulation now implements the automatic power off at shutdown. That is, Mini vMac will quit automatically.

Besides all the Mac II emulation work, this snapshot also has an initial port to Gtk. This will allow the Linux version to better match the other ports, with menus and an open file dialog. It also will make possible a port to Maemo, which is based on Gtk. The build option is '-t lx86 -api gtk'. (The build system now optionally allows you to choose what API to use, instead of automatically setting it from the selected target.)

August 3, 2008

Emaculation.com, which years ago was the first to announce the existence of Mini vMac, now has an illustrated guide to "Setting up System 6.0.8 on Mini vMac for Windows", written by ClockWise. He has also updated the vMac page on Emaculation with information about Mini vMac.

June 10, 2008 The latest Development source snapshot has the Mac II emulation getting close to useable. The video now works, but there is still an issue with cursor display. I have an idea of what to fix next, as time permits. My year of mostly working full time on Mini vMac has ended. I intend to continue development of Mini vMac, but it is likely to be slower.

April 25, 2008 Thanks to prompting from Steve Secker, I've revised the AutoQuit documentation to try to make it clearer. I also have repackaged the AutoQuit archive (and also the EjctQuit, DAOpener, DAFKEY, and Gryversi archives) to conform to my currently preferred format (zipped hfs disk image with checksum). There is no change to the software.

April 22, 2008 Today's Development source snapshot can now emulate a Macintosh II, sort of. It doesn't emulate a video card yet, so it is not too useful. But it does successfully boot System 6.0.8, run an application, and then run AutoQuit. Mostly it demonstrates that progress is being made. (The build option is '-m II'.)

The snapshot also contains the work done so far on PowerBook 100 emulation. (The build option is '-m PB100'.) It gets as far as waiting for an ADB interrupt. I may get back to this some day (after getting the Mac II emulation fully working).

March 27, 2008 PowerBook 100 formatting information for FDisasm is now available. (Also, the original Macintosh Portable ROM is said to be identical.) In some ways it is half way between the Macintosh SE and the Macintosh II, so it may, or may not, be a useful stepping stone. It has already been useful in identifying some more bugs in the emulation of the VIA chip (that don't seem to affect the computers emulated previously.) But the emulation of the Power Management Unit protocol, while it looks doable, might be too much to bother with just right now.

March 16, 2008 The latest Development source snapshot can now use a Macintosh Classic ROM, thanks to assistance from David Sibley and "Gord". The build option is '-m Classic'. Though it runs, it is not necessarily an accurate emulation of a Mac Classic. A Mac Classic is supposed to be nearly identical to a Mac SE, but there are a few minor differences. There may be more differences that I don't know about. I can't really work on this much further until I own a Mac Classic. Getting the Mac Classic emulation to work to this extent involved fixing some issues in the emulation of the VIA chip, which could save time in emulating later Macintosh computers, which was my motivation for working on this now.

One thing to be aware of is that the Mac Classic ROM should be 512K. Apparently some ROM acquisition programs only save the first 256K. The CopyRoms program should save the correct size.

Another change in this snapshot is that the build system now has a separate argument for the memory size of the emulated machine ('-mem'), instead of including this in the model ('-m'). Possible values are: '-mem 128K', '-mem 512K', '-mem 1M', '-mem 2M', '-mem 2.5M', and '-mem 4M'.

Thanks to a tip from William Nolan, Mini vMac now has, when accessing the emulated computer's memory, a special case for little endian processors that allow unaligned access (such Intel), similar to the existing special case for big endian (such as PowerPC). This makes it a bit faster.

When Mini vMac is in full screen mode, it tries to send all key events to the emulated computer, instead of any normal meanings they would have in the host operating system. But I've decided that it went too far with this. So now in OS X, in full screen mode, it will no longer disable force quit (command-option-escape). This was just too dangerous, especially during development of Mini vMac. You can still send command-option-escape to the emulated computer, using the F1 and F2 keys, which are mapped to 'option' and 'command'.

After using the “Alternate Keyboard Mode” for a while, I've made some refinements to make it better suit how I use MPW (which is what Mini vMac is really for). I don't expect anyone else is using the Alternate Keyboard Mode, and anyway I warned that changes were likely. Typing ';' now locks the mode on, there is no temporary state. (I found holding ';' while typing other keys too much strain.) Typing 'm' now leaves the mode. (I find 'm' slightly easier to hit than 'u', and it is no longer needed for entering the mode.) The 'shift' and 'option' keys now override the mode like the 'command' key does. (So anything except lowercase letters can be typed without leaving the mode.) When compiled with the Alternate Keyboard Mode, Mini vMac now starts up with the mode on rather than off. (I think I've reinvented what I've read about the vi editor. You are normally in command mode, and only use insert mode temporarily.) A number of the mappings are changed: 'a' - semicolon, 'b' - backslash, 'e' - backspace, 'h' - equal, 'n' - minus, 'o' - ], 'r' - return, 't' - tab, 'u' - [, and 'p' and 'w' are now not used.

February 29, 2008

Macintosh II ROM formatting information for FDisasm is now available. (Which is what all the work on disassembly the last couple months has been leading to.) The disassembly tools and the formatting information for the other ROMs have also been updated. The disassembler now better supports 68020 code, but it still has no support for FPU or MMU instructions. There are only a few uses of the MMU in the Macintosh II ROM, and the FPU is used only in PACK 4 and PACK 5.

February 16, 2008

The Mini vMac bounties page has a new simple and informal system. [This has been suspended.] I have decided to transition away from using microPledge, because, after working with it a while, I feel that what it offers doesn't really match what I wanted to use it for. On the positive side, they have just fixed a bug I had noted with removing pledges from a developer started project.

February 9, 2008

Macintosh Plus ROM formatting information for FDisasm is now available. Also FDisasm and FindCode have been updated. (One notable change is that they now consistently use hexadecimal notation instead of decimal.) And also there is a new tool FindRes to get information about Macintosh resources such as are found in the Macintosh Plus ROM.

In other news, John-Robert La Porta has created a guide (pdf) to using Mini vMac to play Dark Castle and Beyond Dark Castle.

January 28, 2008

FDisasm 0.2.0 is the second public development release of the formatting disassembler. The Macintosh SE ROM formatting information is now in a separate disk image, and there is also now formatting information available for the Macintosh 128/512 ROM. (The Macintosh Plus information is still to come.)

FindCode is a new tool to help create some of the formatting information used by FDisasm.

January 18, 2008

Lazyone” has released the third version of his port of Mini vMac to the Nintendo DS.

January 17, 2008

FDisasm is a formatting disassembler for Motorola 680x0 code. It makes it possible to distribute the means to create an annotated disassembly of copyrighted code (such as Macintosh ROM images), without distributing that code or files derived from it.

FDisasm 0.1.0 is an initial public development release, and so not yet of too much interest. For that matter, I don't expect very many people to be interested in it even when it's done.

January 8, 2008

"interrobang" reports (with pictures) that the default Linux Intel version of Mini vMac works on the XO-1 laptop from OLPC. I've made a microPledge project for people to express interest in an improved port, better integrated into the Sugar user interface.

December 30, 2007

John-Robert La Porta just sent me a link to the Dark Castle Forum, about the game Dark Castle and sequels. Dark Castle and Beyond Dark Castle are among the most popular reasons why people use Mini vMac.

December 22, 2007

Today's Development source snapshot has more accurate mouse and keyboard event handling, by using an event queue to communicate between the platform dependent code and the platform independent code. Previously, the platform dependent code would tell the platform independent code every emulated sixtieth of a second the current mouse position and up/down state of the mouse button and keys. If the host computer was very busy, or just slow, then a down and up pair could end up being processed in the same emulated sixtieth, and they would cancel each other out and be lost entirely. Also a mouse button state change might not be processed until well after it happened, and the mouse position might be different by then. (Though if Mini vMac is not getting time every sixtieth of a second, so that these problems can be observed, then sound emulation isn't likely to work either, emitting horrible noises. But it is possible to compile Mini vMac without sound.) And also if the host computer is a device without a keyboard, such as using handwriting recognition, then there might not be separate key down and key up.

The X version now uses mouse motion events when possible instead of XQueryPointer, which is alleged to be inefficient. (Especially if the program is using the display on another computer, so that XQueryPointer requires a round trip over the network. I've never tried this. I don't know if anyone has.)

The Macintosh SE emulation, in full screen mode, will now emulate the ADB protocol for mouse movement, instead of just poking the changes into emulated low memory. This turned up a bug where apparently emulated ADB devices were responding to commands too quickly, before the emulated Mac was ready. I increased the constant that specifies the delay.

December 10, 2007

You can now increase the priority of features that you want added to Mini vMac, and support their development, by pledging bounties. [This has been suspended.] This is done through microPledge, which looks to be the most suitable bounty system I've found on the web. "zorzal" has already pledged towards the Maemo port, and also offers to contribute a Nokia 800.

December 8, 2007

This week's Development source snapshot has two fixes to the 68020 emulation (In distinguishing between long DIV and MUL, and in bit field operations with width of 32.) Not too big a change, but it involved a major project to identify the bugs. The 68020 emulation is probably now accurate enough to emulate a Mac II. But this isn't too useful yet, as Mini vMac doesn't emulate a Mac II, and almost no software that requires a 68020 doesn't also a require color quickdraw.

December 1, 2007

I've decided to try to make development of Mini vMac 3.1 a bit more open than in previous versions. The Development page has source code snapshots of the work in progress. There is no promise that it works correctly. Most people should wait for the first alpha, at least.

The main feature of today's snapshot is a hack to support larger screen sizes, with the build system options '-hres' and '-vres'. For example '-hres 640 -vres 512' makes the emulated screen take a quarter of my lcd monitor, so it uses the entire monitor in full screen magnify mode. Be warned this is very much a hack, involving numerous ROM patches (and somewhat different patches on the Mac Plus, the Mac SE, and the Mac 128/512). It emulates a computer that never existed, so there will definitely be compatibility issues with some software. Also keep in mind that most games that will work on the Mac Plus are designed for 512x342, and don't benefit from a larger screen. (The original vMac supported larger screen sizes also, with related method that doesn't directly work in Mini vMac.)

You can also set the emulated screen smaller than 512x342, which could be useful on portable devices, but that will really cause compatibility issues.

Another change is that the alternate CPU emulation of Mini vMac 3.0.4 is now the main and only emulation. More testing is needed to become confident about it. The PowerPC assembly code version has been revised to match the new emulation. Also the build system now generates this assembly code for the selected development environment, instead of keeping separate copies of this source for the two previously supported environments. This made it possible to also support using assembly code in PowerPC linux, with a new build system target, '-t lppc'. (Which about doubles the speed.) This so far has only been tested in Ubuntu 6.06.

In response to this patch, I've tried to start cleaning up type definitions so as to be better able to work on non 32 bit CPUs.

I've merged in changes from Fabio Concas's Pocket PC port version 2.8.2, and used a suggestion by Yuhong Bao to use _tWinMain instead of WinMain in the Windows version.

The build system now supports using the command line tools of the LCC compiler ('-e lcc -cl'), supports the Sun c compiler ('-e snc'), and supports compiling the Pocket PC version with Microsoft Embedded Visual C++ 4 for ARM and the emulator ('-t wcar' and '-t wc86').

November 15, 2007

Mini vMac 3.0.4 is now officially released (with no change from the final beta, as usual). New since the previous official release, 2.8.2, is support for importing and exporting the clipboard and files, a new build system, localized versions for Dutch and Spanish, and more. Also there are some bug fixes, such as that the PowerPC version now works in Mac OS X 10.5. The Changes file in the documentation gives a more complete list.

November 9, 2007

There is now a Mini vMac 3.0.4 beta, which fixes a bug in the PowerPC Macintosh OS X version that made previous versions incompatible with Leopard. It changes only 10 bytes of code from 3.0.3, so I'm optimistic it won't introduce further problems. The same fix is in the PowerPC version for Macintosh OS 9 and earlier. There is no change in the Intel Macintosh OS X version from 3.0.3, or the versions for other operating systems, other than to change the version number.

I've also updated to 3.0.4 the '-im 1' version of Mini vMac with David Sibley's icons installed.

Besides the icons, David Sibley has now also contributed a t-shirt design for Mini vMac. Buying a T-shirt or other item with this design is one way to help support the maintenance of Mini vMac. [This is no longer available.]

November 7, 2007

Mini vMac for PowerPC Macintosh OS X is not compatible with Leopard, as pointed out in this bug report. I've figured out the problem, and will make a new beta soon. The version for Intel is not affected, and as far as I know works fine.

October 24, 2007

I've added a universal binary for Mac OS X to the download area for the Mini vMac 3.0.3 beta, as requested by Jason Townsend. (Actually he requested replacing the separate PowerPC and Intel versions, which I haven't done.) The universal version is useful for people who use both PowerPC and Intel Macintosh computers, and for people who don't know which they have. It is made by simply gluing together the separate versions with the 'lipo' tool. The executable code is not changed, which I why I'm willing to do this at the last minute before official release.

I've also made an '-im 1' version of this universal binary, and installed David Sibley's icons into it. This is available for download from the icons for Mini vMac page. (For Macintosh OS X, the '-im 1' option doesn't change the executable code, so again, this should reasonably safe to include at the last minute.)

October 23, 2007

David Sibley has created a very nice set of true Mac OS X style icons for Mini vMac.

October 3, 2007

AutQuit7 version 1.1.0 can now open a document as it launches an application. And if either the application or the document is on a disk that hasn’t mounted yet, it will now wait up to 15 seconds for it to mount.

September 27, 2007

I've updated the software for Macintosh Plus list. I added the 4 Ray's Maze adventure games, thanks to “Martin” for pointing them out. The recent HappyPlusClock is also added.

September 20, 2007

TestMnvM is the start of a utility for testing Mini vMac.

September 6, 2007

There is now a Mini vMac 3.0.3 beta. Beta means no new features will be added before the official release, which will hopefully be soon. Many more features could be added, but it has been too long since the last official release.

There aren’t too many changes in the default compile since the last alpha. The main one being that by default, the Macintosh versions of Mini vMac will not claim ownership to disk image and ROM image files. So double clicking on disk images will not launch Mini vMac. This is because when you have lots of copies of Mini vMac around, all of which claim ownership of disk images, it is unpredictable what happens when you double click on one, making the feature useless. Instead there is a compile time option, -im 1, to make Mini vMac claim ownership as has been done previously. You can then make sure to have only one copy of Mini vMac compiled this way on your computer.

The Windows version also will now claim to own disk image and ROM image files when compiled with '-im 1'. This feature had been removed from Mini vMac as of version 1.0, to avoid potential conflicts with other programs.

The Windows and Linux version will now attempt to do character set translation when importing and exporting the clipboard, and for the names of imported and exported files. The Windows version will now removed illegal characters from the default name for exported files (the Linux version already did this).

Most of what is new in Mini vMac 3.0.3 are compile time options, such as -bg, -speed, -no-asm, and -min-extn.

As previously mentioned, the optional sound in the Linux version may now be more reliable.

August 23, 2007

AutQuit7 assists in “wrapping” an application for the Mac Plus that requires System 7.0 or later, so that you can use it with Mini vMac more as you would a native application for your machine.

August 17, 2007

DoLaunch is a trivial application that makes it possible to “wrap” programs that will not work as the Start Up application in System 6 or earlier.

August 14, 2007

I’ve revised the code for sound in the Linux version (originally by Stephan Kochen), in response to a patch from Anonymous, with the help of what little documentation I could find on the web, and referring to the SDL code.

This new code seems to work reliably in Ubuntu 7.04 in Parallels, and will be included in the next Mini vMac release (alpha or first beta). If anyone would be interested in testing it before then, let me know.

August 11, 2007

ClockFix is a utility to keep the emulated clock accurate in System 7 or later. (It should work in any version of Mini vMac, not just the current alpha.)

I have updated ClipIn and ClipOut to provide the desk accessories in a second format, packaged as a system 7 style desk accessory, with icon and version resources. The desk accessory code itself is identical, and hasn’t changed since the previous version.

My original intention was to repackage ClipIn and ClipOut as applications for system 7, so as to better handle memory management, and since desk accessories are only supported in system 7 for backward compatibility. But it turns out that due to some quirks of how the scrap manager works and how desk accessories are handled in system 7, a desk accessory works better than an application can for the purposes of ClipIn and ClipOut.

August 4, 2007

There are new archives for ImportFl, ClipIn, and ClipOut, to fix mistakes in the README files. There are no other changes. Thanks to Anonymous for reporting the problem in ImportFl on the Proofreading tracker.

August 2, 2007

There is now a Mini vMac 3.0.2 alpha, with an assortment of bug fixes, new compile time options, and few changes to behavior.

The main change to the behavior of the default compile is that the stopped mode toggle is now Control-S-D instead of Control-S-S. Before I had wanted to make it quick to type, but now I think it is more important to prevent hitting it accidentally.

Another change is that the variation name displayed in the about message, and used for file names, no longer includes the development environment used to compile it or the debug status, but only has the program name abbreviation, the version number, and the target. Such as minivmac-3.0.2-imch, for the Intel Macintosh version of Mini vMac 3.0.2.

When switching back to the Mini vMac application, previous versions would always ignore keys that were already held down. There is now a special case such that immediately after a drag and drop on Mini vMac, it will not ignore keys already held down. This makes it easier to rebuild the desktop of disk images by holding down command and option. However, the keys that map to command and option can have special meanings in other operating systems. (For example, in OS X, clicking on the window of another application with command and option down will hide all other applications.) So it usually works better to press command-option right before dropping, instead of before dragging. (Thanks to a complaint by David Sibley for this feature.)

An obscure change is that when entering the control mode, or the open dialog, or switching to another application, all the emulated keys (except for caps lock) are released immediately, instead of waiting until normal emulation resumes. An even more obscure change is that in the control mode, changes to the caps lock key take effect immediately, instead of waiting until leaving the control mode.

There is now a compile time option, “-ccs”, to swap the emulated Control and Command keys. And there is an experimental option, “-akm”, for making some keys more convenient to use.

The build system now supports more versions of Xcode. (Thanks to complaints from David Mullin.)

The build system now includes targets for Solaris, for use by Luc Pauwels port. So far the only change to the generated source from the linux target is to include the 'posix4' library. (And also the different target means the variation name, used in the about message, is different.)

The build system now has an option, “-pk”, to package the compiled application in a format suitable for distribution.

The biggest bug fixed in this version is that in OS X the clock could be off by some hours because the time zone wasn’t taken into account correctly. This happened because I was recently updating the OS X specific code to remove deprecated calls, which now seems to have been a waste, since now it seems the entire carbon API is basically deprecated.

Another bug fixed in OS X, and also earlier Mac OS, is that dragging and dropping onto the open file dialog would also immediately try to mount that file in Mini vMac.

A call to XFlush was missing in the X version (such as the linux port), and the most noticeable effect was the lack of drawing when Mini vMac was in the background with the run in background option on.

The Windows and X versions now support the PageUp, PageDown, Home, End, Help/Ins, and ForwardDelete keys.

An obscure bug fixed is that the mouse position could shift slightly when leaving full screen mode (or entering the open dialog in full screen mode). A more obscure bug fixed in the Macintosh versions is that {mouse down, control-o, mouse up, type escape key} would leave the emulated mouse stuck down.

July 26, 2007

I’m back from traveling and have released new versions of ExportFl, ImportFl, and binUnpk.

ExportFl and ImportFl will now quit when told to on shutdown, and now check that the needed Mini vMac extensions are available. The common source used in all 3 programs have been synchronized, along with a few additional minor cleanups.

I’ve moved the news from the alpha page to the Mini vMac main page. All Mini vMac related news will now go here. I’ve also moved the downloads to a separate page.

(Update: a few minutes after releasing binunpk-1.0.1.zip, I noticed that the disk image was missing the desktop file. This is fixed in binunpk-1.0.1b.zip)

July 12, 2007

I have minor updates to ImportFl and ExportFl about ready to release. (They don’t quit when told to on shutdown.) But I’m leaving in an hour to travel two weeks, so this will have to wait until I get back.

July 8, 2007

binUnpk is a utility to unpack MacBinary files. The ImportFl application is mostly useful for importing archives, since it will lose the Macintosh specific information of other kinds of files. Then you need a program such as Stuffit Expander 4.0.1 to unpack the archives. But Stuffit Expander itself comes as an MacBinary archive. binUnpk allows you to get started, since it doesn’t need to be imported into a disk image, it comes already in a disk image.

July 2, 2007

ImportFl is an application to use in Mini vMac (version 3.0.0 or later) to import files into the emulated computer from the real computer.

June 29, 2007

ExportFl is an application to use in Mini vMac (version 3.0.0 or later) to export files from the emulated computer to the real computer.

June 23, 2007

There is now a Mini vMac 3.0.1 alpha. Mini vMac 3.0.1 has basically no changes to the default compile, so only source code is provided. The main change is in the system for building the program from the source code.

To keep Mini vMac small, simple, and reliable, the design has been to have no run time preferences, only compile time options. The new build system is designed to make this more practical, to make it easier for people to compile a custom version.

The build system is now a Macintosh program that runs in Mini vMac (it would also work on a real 680x0 Macintosh). After you specify the options, the program generates an archive containing all the files needed to compile Mini vMac with those options in the selected development environment. If the build system is running in Mini vMac 3.0.0 (or later), then this archive will then automatically be exported to the real computer, where you can extract the files and compile the program.

For the documentation (so far) of the build system, see here.

Beside the build system, the other main change in Mini vMac 3.0.1 is the inclusion of a Dutch translation from Luc Pauwels (option “-lang dut”), and a Spanish translation by “Chir” (option “-lang spa”).

Also, thanks to “Lazyone” complaining that Mini vMac’s simple emulation of the 68000 processor was too slow for his Nintendo DS port, I’ve tried out a slightly different approach, which makes it around 5 to 20 percent faster. Which might not be enough to matter. But this approach also made it possible to be more accurate about illegal instructions without speed penalty, and it also makes the code a bit cleaner. However, this code is too new for me to trust it yet, so it is not used by default. Using it is a compile time option. (“-alt-cpu”)

December 25, 2006 I’ll be travelling and out of touch for a few weeks. My current location the last month or so didn’t work out so well for working on Mini vMac, with so much else going on. Maybe next year.

November 29, 2006

Luc Pauwels has now compiled and packaged Mini vMac 3.0.0 for Solaris 10 on SPARC and x86.

After traveling and other events the past couple weeks, I’ll now get back to Mini vMac, once I catch up a bit on sleep.

November 19, 2006

Sorry for the delay as I’ve started travelling again. I hope to regain some momentum in a week or so.

November 12, 2006

DAFKEY is a set of simple FKEYs to open items in the Apple menu. They provide a quicker way to use ClipOut and ClipIn.

November 11, 2006

ClipIn is a Desk Accessory that imports the clipboard of the real computer into the clipboard of the emulated computer (in Mini vMac 3.0.0).

November 10, 2006

ClipOut is the first software to go with Mini vMac 3.0.0. It is a Desk Accessory that exports the clipboard of the emulated computer to the real computer.

November 9, 2006 There is now a Mini vMac 3.0.0 alpha. It has no immediately obvious new features over version 2.8.2. Instead it provides certain capabilities for software running within the emulated machine.

I hope to provide some such software over the next few weeks.

October 17, 2006 Luc Pauwels has now also compiled and packaged Mini vMac for Solaris 10 on x86.

October 6, 2006 Luc Pauwels has compiled and packaged Mini vMac for Solaris 10 on Sun SPARC.

September 20, 2006 Mini vMac 2.8.2 is now officially released, with no change from the June beta. It includes localized versions for French, Italian, and German, and has a native Intel Macintosh version. More minor changes include an improved stopped mode, and some better error reporting.

The overlong beta period was mainly due to delay in writing up documentation for the new build system. But lately, on getting back to looking at this, I feel the current form isn't appropriate for Mini vMac. It may be powerful and easy to use, but it fails to be simple and maintainable. And I think I have a better idea, which can be based of the current code. But this will need to wait for a future version, and so I'm releasing Mini vMac 2.8.2 now.

Pierre Lemieux provided the French translation of the program strings. Gaël Coupé assisted by proofreading (an earlier version). Pierre Lemieux has also translated much of the Mini vMac documentation, available on his website at http://pages.videotron.com/plemieux/minivmac/.

Fabio Concas and Gianluca Abbiati provided the Italian translation. (Fabio Concas has previously ported Mini vMac to Pocket PC, available on his website at http://digilander.libero.it/jpdefault/mvm_index.html.)

Detlef Kahner provided the German translation. (He maintains the website Classics For X.)

The localizations are a compile time option. Now that the work has been done on Mini vMac to support French, Italian, and German, it wouldn't be too hard to support other languages, that use a similar character set, if anyone wants to volunteer to provide translations. See the Localization Page and the Localization Forum.

Mini vMac now has a 'Stopped' mode as an on/off toggle, instead of stopped being one of the set of speeds. So you can stop the emulation and then resume it, without having to remember what speed you were running. The implementation of Stopped mode is improved; the emulation is truly stopped, which fixes a potential issue with spurious sounds. The native cursor of the real machine is now shown while in stopped mode.

The ROM not found message now tells the name of the file it is looking for. There were many reports that indicated this was needed. It also gives a web page address for further information.

This message, and other error messages and informational messages are now displayed using platform independent code similar to the control mode. This improves the X version, which previously would just write messages to stderr or stdout, which could easily be missed, or be lost entirely depending on how the program was launched. It also means the non ascii characters (such as accented characters used in the French and Italian translations) are displayed more reliably across all versions.

If the ROM isn't found the program now doesn't immediately quit, but enters the stopped mode. This allows the error message to be seen using the new display method.

A number of other error messages have been added or improved. If the ROM file is too short, Mini vMac gives an error saying so, and a different error if there was a some other problem reading the ROM. In the X and Windows versions, if it doesn't recognize a command line argument, it will give a warning.

There are numerous refinements to the user interface strings, many of which were suggested by Pierre Lemieux.

The Windows version should now work better when the real computer isn't fast enough to emulate at 1x speed, allowing other programs and the computer as a whole to remain responsive.

In the Windows version the function keys F3 through F12 are now passed through to the emulated machine, to match the Mac and Linux versions. (F1 and F2 are used for the option and command keys.)

In the X version, the open command has been removed, instead of having a command that just gives a message saying not implemented (because an 'open a file' dialog isn't part of basic X). This is possible because of the more flexible way of displaying the help screen which was needed for the French and Italian localizations.

In the X version, switching between normal mode and Magnify mode and Full Screen Mode may now work more reliably on more operating systems, though it may sometimes flicker a bit more.

July 26, 2006 Lazyone” has released a Test/Alpha version of his port of Mini vMac to the Nintendo DS.

July 22, 2006 “Lazyone” is making progress porting Mini vMac to the Nintendo DS. For details and pictures see the Lazyone DS Development page.

June 9, 2006 Natalia Portillo has contributed versions of Mini vMac compiled for Microsoft Windows XP x64. They are available from the download area on this page. (I don't have an x64 machine, so I've not tried these myself.)

May 25, 2006 The public beta of version 2.8.2 is available.

March 1, 2006 The public beta of version 2.8.1 is available.

January 31, 2006 The first public beta of version 2.8.0 is available.

January 13, 2006

I've started a FAQ (Frequently Asked Questions) page.

January 12, 2006 "Daniel" has volunteered to do the Spanish translation. I've started a Localization Forum to coordinate translation work.

January 11, 2006 The new Localization page shows the current French and English strings to be used in the next version of Mini vMac. If anyone wants to volunteer a translation to another language (that uses a similar character set) in the next couple weeks, I'll include it in next version, which I intend to release a beta for by early February. The plan is to include a version compiled for Intel Macintosh, which is why the hurry. (I expect to get access to an Intel iMac within two weeks, and I believe the port should be trivial.)

January 10, 2006 Pierre Lemieux recently volunteered to translate the user interface strings of Mini vMac into French. He also went much further than that and has started to translate the documentation. The current version of the French documentation may be found on his website at http://pages.videotron.com/plemieux/minivmac/. Gaël Coupé has assisted Pierre Lemieux in this work by proof reading.

In other news, I have recently become aware of Xmac by "Darcelf", a port of Mini vMac to the Microsoft Xbox. I'm not providing a link to it here, because as far as I can tell after some hasty research, downloading the compiled program would not be strictly legal in most countries. (The Xbox is sold below cost, with Microsoft trying to profit from licensing developers, and therefore Microsoft tries to prevent unlicensed software, I think.) It should be completely legal to download the source code, and legal to compile it if one happens to be a registered Xbox developer.

January 2, 2006 I seem to be receiving email as normal at my regular account, so I've revised the Feedback page to say that sending email is fine, since it is clear that many people prefer it, but using the SourceForge Trackers and Forums is still preferable.

I'm now using Gmail to send email while travelling, thanks to an invitation from Dmitri Popov. And also thank you to one other person who sent an invitation (identified only by email address, which I won't list here).

December 6, 2005 I'm travelling again, and so again using Yahoo to send email. Unfortunately it seems that some ISPs blacklist Yahoo, so I can't reply to some people. (Hi John!) Also I seem to be having problems receiving email at my regular account. A few days ago their status page mentioned being "under a continuing DDOS attack". Because of this, and past problems with email, I now want to recommend that people use the SourceForge Trackers and Forums if at all possible. I've tried to revise the Feedback page to make this easier.

I've added a new Glitches Forum for reporting irreproducible problems that might, or might not, have been due to bugs in Mini vMac. It's listed on the Feedback page.

November 22, 2005 version 2.7.1 officially released. (There is no change from the beta.) Mini vMac now has more advanced control of speed, superseding the previous 'limit speed' option. Other highlights are an experimental compile time option for sound in the Linux version (thanks to Stephan Kochen), and that the Windows version is up to 40 percent faster by simply using a better c compiler.

Here are the rest of the release notes, copied from the beta page:

I've lately had the opportunity to test Mini vMac on a 2.7GHz Power Mac G5. (While doing other work for the company Scientific Imaging. The use of this machine and other help made Mini vMac 2.7.0 possible.) Mini vMac 2.6.1 was not really usable on the G5, the moment it ran the fans would go wild. I've had previous reports of such problems (such as from Ryan Schmidt), but I couldn't fix it without a machine to test solutions on.

The first change is that when 'limit speed' is on, Mini vMac will no longer try to monopolize the processor. I hadn't done this before because Mini vMac needs time each and every 60th of a second for smooth emulation, especially of sound, and I wasn't sure that operating systems could slice up time that fine. But after a bit of experimentation it now seems to work adequately in Mac OS X, Windows, Linux, and even Mac OS 9. It can actually be smoother because some operating systems will penalize programs for trying to take all the processor time.

The next change is to replace the simple 'limit speed' toggle with a bigger range of choices: 1x, 2x, 4x, 8x, 16x, 32x, and "All out". The 'L' command of the Control Mode is replaced with an 'S' command, that leads to another screen with more options. (The 'Limit Speed' toggle is also removed from the menu bar, in Macintosh and Windows.) So you can choose how fast you want the emulated machine to run, and thereby what percentage of the processor to take. I had previously thought that perhaps Mini vMac could automatically try to detect when the emulated machine is idle and slow down if it is. But there is no right way of doing this, there could only be guesses that would often be wrong. And it turns out that even if this could be done correctly, I still wouldn't like the result on a Power Mac G5 (running OS X 10.4.2). Within less than a second of the processor usage reaching 100 percent, the fans speed up. I can't think of any way to automatically guess that the emulated machine is idle much faster than that. By making the speed control manual, the fans stay constant no matter what the emulated machine is doing. This isn't just a problem for Mini vMac, it is a problem for any software not carefully written with the issue in mind. (For example, dragging a scroll bar in Mozilla 1.7.8 turns on the fans.) Hopefully, future versions of Mac OS X will improve the fan control. I think running the fans a bit louder always would be preferable than to having them always changing.

Since Mini vMac no longer needs to monopolize the processor there is now an option to allow it keep running even when it is not the active window. This is toggled by the 'B' command of the Speed Control screen. So you can set some computation going in Mini vMac and then use other programs on your machine. You can even have two copies of Mini vMac running at once. (Note that this is probably not legal unless you own a real Macintosh for each virtual machine running at once.) You can set Mini vMac to run in the background with the speed set to "All out", but this isn't recommended, except on a dual processor machine (Mini vMac can only use one processor).

There is now a command to stop Mini vMac (when it's the active application), the 'S' command of the Speed Control screen. This can be convenient, such as to pause a game. The implementation isn't yet satisfactory. The emulation needs to keep partially running so the Control Mode will work, which can result in some spurious sound output. I'll try to fix this in a later version.

Mini vMac will by default start at 8x speed, fast enough to feel reasonably snappy, but not so fast as to stress modern machines (which can go up to 20x to 50x). The '/l' command line option of the Windows version, and the '-l' command line option of the X version, will still work, causing Mini vMac to start at 1x speed.

The minimum emulation speed is now 1x instead of 0.5x, to reduce possible compatibility issues and to simplify the code. If the real machine isn't fast enough to do 1x, the emulated machine will still think it is running at the normal number of instructions per time, but its sense of time will not match the real time.

The Control Mode help screen will now display the current speed setting, and in addition will also display the Full Screen, Magnify, and emulated Control Key option settings.

The implementation of limiting speed is different for each operating system, and the behavior may vary a bit between them. In OS X, the emulation will now continue running (but only at 1x) while dragging the Mini vMac window, selecting from a menu, or while a dialog is up. In OS 9, the emulation will stop at all of these times. In other operating systems, the emulation may stop at some these times. In Mac OS 9, which uses cooperative multitasking, Mini vMac will only run smoothly if all other running programs are very cooperative.

I had thought that modern compilers couldn't cope very well with an emulation loop. But it turns out that the compiler in the free "Microsoft Visual C++ Toolkit 2003" does pretty well, better than the very old Microsoft compiler that I previously used. This speeds up the Windows version by up to 40 percent. (The OS X version uses hand tweaked PPC assembly, originally based from the output of the MrC compiler.)

Mini vMac now includes the patch from Stephan Kochen that adds support for sound in the Linux version using ALSA. Unfortunately I haven't been able to test the merged version, since I haven't gotten sound to work at all in any version of Linux running in virtual PC. I did try installing one version of Linux (Ubuntu) on a real PC, where sound worked, but the very first call in Mini vMac that opens the audio device fails saying busy. Perhaps I didn't get the ALSA development files installed correctly. I made a number changes from the original patch to match Mini vMac formatting and error handling conventions, and to try to make it use non blocking, so I'm not sure if the current source would actually work at all on any machine. So I've not enabled it by default, it is a compile time option. [update: Stephan Kochen reports that it works for him. There was also one report of it not working.]

However, compiling with sound enabled in the Linux version involves more than just adding a line to the CNFGGLOB.h file. It needs an additional file header and library file. To deal with options like this I have added to the build system. There is now a collection of simple scripts, for various scripting languages, that take optional command line arguments and compile "setup.c" and use the result to compile Mini vMac. Unfortunately this isn't documented yet, so for 2.7.0 I've still generated the "projects" folder, which can be used as in the previous version. But for now I can say that to compile the Linux version with sound, open a terminal window and change the current directory to the 'source' folder. Then type 'bash build/bash MySoundEnabled' (and press return). When it finishes, there should now be a program called 'minivmac' in the 'output' folder, created within the 'source' folder. (Or you can use 'bash build/bash MySoundEnabled -keepmake', which will keep the make file, so that you can make changes and recompile.)

In the Mac OS X version, if you create a folder called "mnvm_dat" inside the "Contents" folder within the application bundle (control click on the application and choose "Show Package Contents"), then Mini vMac will look for the "vMac.ROM" file, and the disk1.dsk, disk2.dsk, etc files within the "mnvm_dat" folder. This allows you to make a self contained Mac OS X application that runs an application for the Mac Plus (especially when used with the AutoQuit software.)

In the Mac and Windows versions, the name of the Mini vMac window will be taken from the name of the application file, instead of just being "Mini vMac". So you can change the application name to change the window name, which also affects things like the Dock (OS X) or the Taskbar (Windows).

Mini vMac can now when launched automatically mount more than just three disks. It can also mount "disk4.dsk", "disk5.dsk", up to "disk9.dsk" (If Mini vMac is recompiled to support that many disk images. The default is 6, the maximum is 32).

The Windows version now supports "Shortcut" files (The Windows equivalent to Macintosh "Aliases".) The "vMac.ROM" and the "disk1.dsk", "disk2.dsk", etc files may be Shortcuts. It must be "vMac.ROM", not "Shortcut to vMac.ROM". Actually, the file is really named "vMac.ROM.lnk", but what you see is "vMac.ROM".

The Macintosh version now supports drag and drop of aliases. It is simply a bug that it didn't previously work.

The Macintosh OS X version now uses the recommended SetSystemUIMode to enter Full Screen mode when it is available (10.2 or later). The main noticeable difference is that Command-Tab is no longer intercepted by the operating system, but passed to the emulated machine. (The intended only way to exit Full Screen mode is to type "Control-F".)

The "About" command of the Control Mode ("A") no longer displays copyright holders, since the complete list is too long to fit here. It now only displays the maintainer name, immediately followed by the web page, where the complete list can be found (on the Credits page). Anyone maintaining a fork of Mini vMac (such as Fabio Concas) can change kMaintainerName and kStrHomePage in "setup.h".

Mini vMac now has some code for 68020 emulation as a compile time option. (The Mac Plus ROM supports the 68020, and vMac for Macintosh emulates a 68020 instead of a 68000.) Much of the implementation is adapted from the "UAE Amiga Emulator", mostly as found in the vMac source. The Mini vMac 68020 emulation works well enough to boot up with the emulated machine thinking it has a 68020, with the operating system and MacsBug working correctly, and most software that doesn't require a 68020 working normally. It is hard to test the 68020 emulation because most software that requires the 68020 also requires color quickdraw. The little software I've found that seems like it ought to work all crashes, so I'm pretty sure there are bugs in this 68020 emulation. The main reason for emulating a Mac Plus 68020 is as a stepping stone to emulating the Mac II. Having the Mac Plus 68020 working as well as it does so far will make it easier to write testing software to make a correct 68020 implementation.

This were some bugs in the VIA timer 1 emulation and the delayed task mechanism. Fixing these allows Mini vMac to pass the tests of Apple's MacCheck program when running faster than 1x (2.6.1 would pass only if 'Limit Speed' was on).

There was a bug in the PPC asm version of the 68000 emulator, where a routine wasn't preserving all registers it should. This doesn't seem to affect previous versions of Mini vMac, but it definitely affected the current version.

The 680x0 emulator emulated the Fline trap incorrectly. This doesn't previously seem to have had any effect, but it prevented MacsBug from working with the 68020 emulation.

The MoveS instruction has been removed from 68000 emulation, since it isn't a legal 68000 instruction. Also the implementation wasn't correct anyway. A possibly correct version is now in the 68020 emulation.

Mini vMac for OS 9 and earlier (PPC) will now work back to OS 8.1. It should work in earlier versions of Mac OS, but I haven't tested this yet. (Mini vMac for Macintosh 680x0 seems to work back to System 2, though it's not too thoroughly tested.)

October 10, 2005 The public beta of version 2.7.1 is available.

August 1, 2005 The first public beta of version 2.7.0 is available.

May 25, 2005 I'm getting back to Mini vMac development, after some weeks of travelling. Meanwhile, Stephan Kochen has implemented sound in the Linux version, using ALSA. His patch is available from the Patch Tracker. At his request, and also prompted by Michael Juneau, I've turned back on the SourceForge Trackers for Mini vMac. See the new Feedback page. Every other page on this web site now has a link to the Feedback page at the top.

I'd like to thank "gianluca69" for donating to Mini vMac development.

April 15, 2005 I've created PAD (Portable Application Description) files for the convenience of software news sites.

April 13, 2005 version 2.6.1 officially released. (There is no change from the beta.) Mini vMac now has a variation that emulates the Macintosh SE. Another highlight is that the window position is restored when leaving Full Screen mode.

The main benefit of emulating the Macintosh SE is that people who own a Macintosh SE can now use Mini vMac legally. (They can use "CopyRoms" to acquire a ROM image.) There is little observable difference from the emulation of the Macintosh Plus. The other motivation was to figure out the emulation of ADB for keyboard and mouse, since that will also be needed to emulate any later machine. There are a number of things that still need to be looked into for the Macintosh SE emulation, but it seems to work as is. Future versions may improve the accuracy of the emulation, as is usual for Mini vMac.

The Macintosh Plus emulation now has a more accurate emulation of the keyboard and of VIA timers, using a new mechanism for delayed tasks. There is little observable difference, except that Mini vMac can now pass the tests of Apple's MacCheck program, if 'Limit Speed' is turned on for the 'Clock/Interrupts' test.

When leaving Full Screen mode, Mini vMac now returns to previous window position and magnify state. And when Full Screen mode is re-entered, it remembers the magnify state from last time. This works on Macintosh, Windows, and X. However the last was probably a bad idea, as X window managers seem to think that window positions are none of the application's business. I was able to wrestle X into submission, but it will probably take revenge later with obscure compatibility problems.

The source code for the Pocket PC port by Fabio Concas is now merged in. The intent is to make it easier for him to update his port when there is a new version of Mini vMac. I cannot offer any support for this port myself, as I don't own a Pocket PC, and don't know how to program it.

The version for Macintosh OS X now uses native Carbon Events, and no longer uses GetKeys, which might not work reliably in some versions of OS X. I received one report of such trouble from John Siracusa. With that, and figuring out to remove default command key equivalents from the Mini vMac menu, the ugly 'Command-Q' and 'Command-H' menu item kludge is no longer needed.

The Caps Lock key now works in Windows XP in full screen mode. This was broken in 2.5.0.

The documentation now has a page for compile time options, such as which machine is emulated.

This version was intended to have faster drawing in OS X for Full Screen mode. However, at the last minute I discovered that on an older machine (a PowerMac G3), when combined with Magnify mode, it was much, much slower. So I've disabled the feature, though it is still available as a compile time option. The idea is to use OpenGL, which seems to be the only way to avoid the double buffering done by OS X. This made drawing much faster on my development machine (though still nowhere near the speed of the OS 9 version). Unfortunately, on the older G3, the magnify by 2 operation doesn't seem to have been optimized, making it unusably slow.

I'd like to thank Lil and Sherm Sundet for recently donating a Macintosh IIcx to Mini vMac development. Yes, I intend to extend Mini vMac to emulate some later machines with color, though this will take some time. I've added a page listing 680x0 Macintosh models, sorted by date, which is also roughly the order I might try to emulate them. I've also expanded the page listing places to buy a Macintosh Plus.

March 29, 2005 The public beta of version 2.6.1 is available, with 2 minor bug fixes.

March 16, 2005 The first public beta of version 2.6.0 is available.

January 14, 2005 I just got back a few hours ago, and found some neat news in my accumulated email. Fabio Concas has ported Mini vMac to Pocket PC - see "http://web.tiscali.it/moustar/ppc_index.html". I don't have a Pocket PC to try it with, but I can look at the screenshots.

December 23, 2004 A few more programs have been added to the list of Macintosh Plus software. The online documentation has a correction from Ryan Schmidt - the 'v' disk icon (for disk images that aren't 400K or 800K) shows up not just in System 7, but also in earlier systems. (I think this didn't work in some early development version of Mini vMac.)

I will be disconnected from the internet for about 3 weeks. I'll respond to any emails when I get back.

December 10, 2004 I've started a page to list places to buy a Macintosh Plus. (Mini vMac requires a ROM image file to run, and so can be legally used only by those who own a Macintosh Plus.) I've added a tip from Orion Sky Lawlor on how to transfer files into a Macintosh disk image in Linux to the Disk Images page.

December 2, 2004 Added a page with MD5 checksums. I've put back in the alternate download page [no longer available], please only use this if the main SourceForge downloads don't work. I've also added a little more detail to the Disk Images page.

December 1, 2004 Some refinements to the documentation and the rest of the web site. I've started a new page about working with Disk Images, thanks to a question from Chuck Iverson, and many previous indications that it's needed. It needs more work, especially needing more detail for Windows and Linux. I've tried to clarify what to do with '.sea' files in the Start page, thanks to a question from Roger Kenyon. I've put in a "What Next?" section at the end of that page. And there is now a separate page for each of the Mini vMac Extras.

November 24, 2004 version 2.5.0 officially released. (There is no change from the beta.) Some highlights are emulation of the extended Parameter RAM, assorted fixes, and more speed in the Macintosh version.

Mini vMac now emulates the extended Parameter RAM of the Mac Plus, thanks to code contributed by Philip Cummins. Previously only the 20 byte PRAM of the original Macintosh 128 was emulated. The larger 256 byte PRAM stores additional information such as the time zone, latitude, longitude, and the alert sound. So now the Map and Sound control panels will work. This information is not saved on quit. The Macintosh version will initialize the time zone, latitude, and longitude from the real machine's information. The Windows version only initializes the time zone. I have some code that can find the time zone for the X version, but I'm not sure how portable it is, so it is disabled.

The emulation of the SCC chip is improved a bit, so that booting with AppleTalk turned on won't hang, and printing to the imagewriter will successfully do nothing. The SCC code from the Windows version of vMac was used as a starting point, with permission from Weston Pawlowski. (But unlike vMac for Windows, Mini vMac only tries to emulate serial ports that aren't connected to anything.) Also, thanks to Philip Cummins for pointing out the Zilog documentation for the SCC chip.

A small change to the VIA timer 2 code seems to stop the tendency to hang playing sounds in System 7. It seems to work ok, even though it doesn't fix what is probably the real problem, that Mini vMac only resolves time to about a millisecond, while the real VIA timer has much higher resolution.

I've added a number of programs that now work because of this change to the currently available Software page, along with many other additions. Over 40 have been added, bringing the total to over 200.

The PowerPC assembly language is tweaked a bit more, making the Macintosh version about 20 to 40 percent faster.

The Restart command will now work in all system versions. It seems that, contrary to the impression given by the documentation, executing the 68000 RESET instruction doesn't change the memory overlay state. Or at least, empirically, that seems to work better.

Some subtle bugs involving word access to address registers have been fixed. The main known effect is that the game BachMan sounds different.

Bad accesses to disk images could previously cause data to be written past the end of the memory allocated for the emulated RAM, which in theory could cause Mini vMac to crash or worse. This has been fixed.

In the Macintosh version, the F1 and F2 keys are now mapped to emulated option and command keys, to match the Windows and X versions. This provides a way to type some key combinations that are intercepted by the OS of the real machine. For example F2-Shift-3 will take a screen shot in the emulated machine, whereas Command-Shift-3 takes a screen shot of the real Macintosh at the same time.

The interrupt button emulation is now more realistic. One consequence is that the interrupt button can be masked, if the processor's priority level is high enough.

Previously, in the Windows version, double clicking on a disk image in the open dialog would tend not to work, because the mouse button would still be down upon returning to Mini vMac, which prevents mounting. Mouse clicks are now handled differently, which solves this problem.

Previously, in the X version, quitting Mini vMac could be delayed if the window manager moves the window to the back when it is being closed (such as in Red Hat Linux 9). This is fixed.

Mini vMac now has a mechanism for reporting reaching a part of the emulation that hasn't been implemented, or at least never tested.

A version compiled for Macintosh 680x0 is now included. So that it can run inside Mini vMac, this version emulates a Macintosh Plus with only 2M of memory instead of 4M. This is more amusing than useful. Since it is so very slow, I've not tested it much.

November 15, 2004 The first public beta of version 2.5.0 is available.

September 18, 2004 The Mini vMac web pages are moving from "http://www.gryphel.com/c/minivmac" to "http://minivmac.sourceforge.net". For a short transition period, the same information is in both places, except for a new Screenshots page.

September 12, 2004 A few more programs have been added to the list of Macintosh Plus software. A new page makes it easy to find what's been added. Thanks to Simone Bettini for making his games available, along with a mini review of Mini vMac, and telling me about it.

For Macintosh OS 9 users, Sebastian Soyka reports that StuffIt Expander 7.0.3 will not unstuff "minivmac-2.4.1-mpwmppcs.bin.sit". (It can be unstuffed with the StuffIt Expander 6.0 that came with System 9.2.2; it was created with the version of DropStuff that came with System 9.2.2) I've repackaged it into "minivmac-2.4.1-mpwmppcs.bin.sit.zip", which should work with all versions of StuffIt Expander.

I forgot to mention earlier that the lower level mouse emulation in full screen mode of version 2.4.1 allows the game Apache Strike to work, according to Charles Srstka, Tom Slankard, and Gael Coupe. It's surprising how popular this game is.

September 8, 2004 version 2.4.1 released. Some highlights are a first attempt at supporting sound in the Windows version, a better square wave sound approximation, a somewhat lower level mouse emulation, and a few fixes for the X version.

Version 2.4.0 was released only to the beta testers: Charles Srstka, Eric Lundquist, Tom Slankard, Jonathan Pratt, and Malik Jayawardena. This was the first official beta test, and quite succesful in showing that my idea of restricting sound to the Full Screen mode was a bad one. Thank you, testers. If you would like to volunteer to beta test, contact me. This and other ways of aiding the development of Mini vMac are described on the Help page. Speaking of which, I'd like to thank John DAgostini for his donation.

The sound emulation in the Windows version will so far only work on machines that can play sound at 22255 samples per second, instead of a more standard value like 22050. This works fine on the few machines I've tried it on, but I don't have any sense of what percentage of machines support this, so I would be interested in hearing about this. As far as I can tell vMac for Windows just plays sound at 22050 samples per second, meaning all pitches are off, as well as the emulated machines sense of time. I could perhaps make Mini vMac do the same, if it detects that the machine doesn't support 22255 sample per second.

Square wave sounds are improved. They are still forced into the same 22255 samples per second as other sounds, but now a better approximation is used. This makes games like Lode Runner sound quite different.

The new version will now use a somewhat lower level mouse emulation, when in Full Screen mode. Instead of poking in the current mouse position into the emulated machines low memory, it pokes the mouse velocity into a different location. This allows programs such as Microsoft Flight Simulator (version 1.00) and the utility "Stepping Out" to work. The mouse hardware is still not emulated, but I think this would be slower, and I don't know of any programs that require it, so I may not plan to do this.

This new mouse emulation requires the ability to set the mouse location of the real machine. It has code that attempts to detect when this doesn't work, and then switches to the absolute position mouse emulation. However it can't detect the problem when running in Virtual PC with Pointer Integration turned on, where as far as Mini vMac can tell, setting the mouse position succeeds, but the next time the user moves the mouse Virtual PC ignores the set position. So to run Mini vMac in Virtual PC, you need to turn off Pointer Integration. It also can't detect the problem when using the Mac OS 9 version in the classic environment of OS X, where setting the mouse position causes the mouse to freeze for a moment. This was also a problem in the OS X version, until I found the trick to use in "SDL_QuartzWM.m" of the "Simple DirectMedia Layer", Copyright (C) 1997-2003 Sam Lantinga. (This problem affected previous versions of Mini vMac, and was especially noticeable in the game HeartQuest.)

Full Screen mode is now more different from the regular "in a window" mode. The new design idea is that when in the regular mode, Mini vMac should try to behave as much like a normal cooperative application as possible, while in Full Screen mode it will try to take over the entire machine as much as possible.

So now the Windows version will only try to take over the keyboard in Full Screen mode (preventing the os from intercepting the windows key and alt-tab). (This now works in Windows 95/98, in addition to Windows XP where it previously worked). The X version will now also try to grab the keyboard in Full Screen mode. I don't know how to grab the keyboard on the Macintosh.

The Mac OS 9 version will now only try to hog the machines time when in Full Screen mode. So in regular mode the menu bar clock will update properly. The Windows version will now set the programs priority to high when in full screen mode. I don't know yet how to increase the programs priority in Mac OS X or in X.

There is not supposed to be any way to leave Full Screen mode except for the 'F' command of the control Mode. However, sometimes there is no way to prevent the operating system from bringing up some other program (such as by using command-tab in Mac OS X). Mini vMac will now detect if it is no longer the active application, and turn off Full Screen mode.

The X version has some assorted fixes. The Caps Lock key now works. When toggling Full Screen mode, the control mode should no longer get stuck on (key events were being lost, such as the key up event for the control key). In Mandrake Linux 9.2, the Windows key can now be used as the emulated option key. The not quite hidden cursor problem may be solved with code adapted from X11_CreateNullCursor in context.x11.c in quakeforge 0.5.5, copyright Id Software, Inc. Zephaniah E. Hull, and Jeff Teunissen.

August 13, 2004 The online documentation has been updated to match the current development branch, or what can now just be called the current version. The "stable branch" is not useful at this time, since it is way behind on features, and there haven't been many problems with the development branch. So I've removed the stable branch from the download area. Instead, if you have problems with the current version, any previous version can be downloaded from SourceForge.

July 23, 2004 The Software for Macintosh Plus listing is much expanded.

July 11, 2004 version 2.3.1 released. It contains assorted fixes.

I'm back home, but I still can't do much work on Mini vMac yet, because there is other (paying) work that needs to be done. But anyway, I want to get these fixes out now:

Previous versions for Mac OS X would tend to lose the first keystroke. The operating system apparently pauses a while when getting the first key event, so that the key is already up after events are checked, when Mini vMac would check the keyboard state. The work around used in the new version is to check the keyboard state before checking for events.

Also in previous Mac OS X versions, full screen mode would not work quite right when the computer has multiple screens. It would only cover the main screen, so that you could accidentally move the mouse off the main screen, and a click would deactivate Mini vMac. It now covers all screens.

In previous versions for all operating systems, you could drag a disk image to the Mini vMac window, but if that window wasn't active, nothing at all would happen until the window was made active. This was especially bad because of a quirk of Macintosh Plus, that when it is first booted, if the mouse button is down, any disk inserted is immediately ejected. So if you launched Mini vMac, dragged a bootable disk image to the window, and then clicked on the window content to activate it again, the disk image would be ejected. In the new version, when a disk image is dragged on to the Mini vMac window, then Mini vMac is automatically activated.

The Mac OS X version is now more native, in that is using the macho format instead of the older CFM format. This might eventually allow a smoother and more efficient program, by allowing access to lower level abilities of Mac OS X. (But currently it is little if any faster, and somewhat larger.) The main work done to make this possible was to figure out a script to automatically translate the powerpc assembly language code into something that the gnu assembler understands.

(This one is really obscure.) In Mac OS X, as well as many window managers for X, it is possible to click on the close box of an inactive window, which can close the window without first activating it. In previous versions of Mini vMac, (when no disk image is mounted), nothing would happen when clicking on the close box of inactive window, but the window would immediately close when reactivated again. Now the window will close immediately. (If a disk image is mounted, when Mini vMac is in the back ground, a click in the close box will be ignored.)

The Windows version will now try to prevent the operating system from intercepting any key events, at least when running in Windows XP. (This doesn't work yet in Windows 95 or Windows 98.) So, for example, the key with the Windows symbol on it can be used as an 'option' key, instead of popping up the 'Start' menu.

The magnify mode in the Windows version may now be faster. Though it might depend on the exact hardware and operating system used.

The full screen mode and drag and drop features added in the last X version were developed and tested only in Red Hat Linux 7.1. I recently downloaded a number of different linux distributions (Thanks to the company Scientific Imaging for access to a T1 line), and there were serious problems with most of them. The biggest one was that Mini vMac could lose the focus when entering full screen mode, and stop responding to keyboard and mouse, with no way to leave full screen mode. The new X version is much improved (But not perfect. See the bug list).

Since nobody reported these bugs, I assume that there are not many users of the X version. To encourage people to use it, I am now providing a precompiled application for Linux (x86), not just the source code. It was compiled with Red Hat Linux 7.1, and seems to work on all the distributions I've tried.

To keep the number of files released manageable, I'm no longer providing compiled versions of the Mac 128k emulator. This option now requires you to compile it yourself. (The compile time options are not yet documented; this is on the to do list.)

For anyone who wants to compile from source, the 'source' directory should now be placed in the same directory as the 'project' directory, rather than within 'project'. The version of the source code formatted for old Mac OS (not OS X), is now a zip file containing an (uncompressed) stuffit archive (so I've used the file extension '.szp'). This is not standard, but I can create this format with automatic tools (which I don't have software to do for a normal stuffit archive).

April 12, 2004 I will be travelling, so there will be no updates to Mini vMac until late summer. I will still respond to email.

March 25, 2004 Added MnvMreg to the 'Extras' section of the Downloads. MnvMreg is a utility to install Mini vMac into the Microsoft Windows registry, so that double clicking on a disk image file with the extension '.dsk' will open it with Mini vMac, and so that such disk image files and also '.rom' files will be displayed with custom icons. Prior to version 1.0.0 of Mini vMac, every launch of the Mini vMac application would reinstall it in the registry. But since this could conflict with other applications that want to use the '.dsk' and '.rom' extensions, this feature was removed. MnvMreg brings this back as a 'use at your own risk' optional feature.

I haven't received any bug reports for 2.3.0, after a few hundred downloads and nearly a month, so there probably isn't anything horribly wrong with the major changes in the Windows and X versions.

February 28, 2004 version 2.3.0 released. It features improvements to the Windows and X versions, bringing them closer to the Macintosh version.

The Windows and X versions now implements Magnify mode, Full Screen mode, and Drag and Drop of disk images. As in the Macintosh version, Full Screen mode is entered by typing 'Control-F', and exitted by typing 'Control-F' again. Magnify mode is automatically activated if the screen is big enough. Magnify mode can also be separately toggled using 'Control-M'. Drag and Drop support means that dragging the icon of a disk image file onto the Mini vMac window causes the disk image to be mounted by Mini vMac. (But note that the emulation is paused when Mini vMac isn't active, so nothing will happen until you reactivate Mini vMac.)

Drag and Drop support in the X version means that you can now mount more disk images after the program has started running. This wasn't possible before in the X version. Thanks to Lars Kellogg-Stedman who pointed out to me a specification for a drag and drop protocol (at "http://www.newplanetsoftware.com/xdnd/").

For Macintosh users there is one new feature (which is also implemented in the Windows and X versions). Mini vMac will detect when the emulated program has tried to move the emulated mouse position, and adjust the real mouse position to match. (But only when in Full Screen mode). This makes games like Crystal Quest more playable. Other games that I know it affects are: HeartQuest, Slime Invaders, Arkenoid, and MacLanding. It turns out that this isn't enough to get games like Apache Strike to work, but maybe now I know enough to be able to implement lower level emulation of the mouse hardware in a future version.

To implement the above feature, I found out the official ways for a program to set the mouse position on a Macintosh. I've modified Mini vMac to use the official method for the Macintosh Plus to set the position of the emulated mouse. I don't observe any difference, but it possibly might affect some obscure software.

In the Windows version the right mouse button is now equivalent to the left mouse button. In the X version buttons 2 and 3 are now equivalent to button 1.

This version fixes a slight mistake in code that recognizes old disk copy 4.2 style disk images. It previously might have incorrectly decided an image was the old style, though I've never observed this to happen.

The Windows version fixes a bug where Mini vMac wouldn't work if its window was partly off the left edge of the screen.

Be warned that I wouldn't consider the Windows and X versions very well tested, since I've only used them in Virtual PC on my iBook. Please let me know if you find problems. Those who are less adventurous might want to wait a week or two before downloading it and then check the Bugs page. I'm not sending out announcements about this version, in an attempt to delay when most people will download it.

February 13, 2004 Added a page listing ways you can help the Mini vMac project.

February 8, 2004 Added a To Do page, listing possible future improvements, and some of the issues involved in implementing them.

February 5, 2004 Added SetFType to the 'Extras' section of the Downloads. It is a pair of utilities for Mac OS X and OS 9 that set the file type and creator of a disk image. "SetFType.dimg" makes the file belong to Disk Copy, which makes it possible to mount the disk image on the real machine (such as by double clicking on it). Mounting a disk image on the real machine allows you to transfer files to and from the emulated machine. "SetFType.MvIm" makes the file belong to Mini vMac, so that double clicking on the file will mount the disk image within the emulator.

January 28, 2004 I've begun a page with links to software that will run on a Macintosh Plus, and therefore will work within Mini vMac.

January 25, 2004 After looking at web access logs, I've changed this page to try to increase the chance that people, especially those who don't know english, will find what they're looking for.

January 24, 2004 version 2.2.0 released. To celebrate the 20th anniversary of the Macintosh, Mini vMac now has a variation that emulates the original Macintosh 128K. The Macintosh Plus emulation of Mini vMac can run almost all of the oldest Macintosh software, but some of the very earliest systems versions and applications won't work with it. Most of these will now work in the Macintosh 128K emulation.

The choice of emulating the Macintosh 128K or the Macintosh Plus (with 4M of memory) is made at compile time. Additional choices available at compile time are the Macintosh 512K, the Macintosh 512Ke, and the Macintosh Plus with 1M, 2M, or 2.5M of memory.

The Macintosh 128K has a different ROM than the Macintosh Plus, and so needs a different ROM image file to be emulated. Mini vMac expects a ROM image file called 'Mac128K.ROM'. Some programs to acquire the ROM image of the Macintosh Plus, such as CopyROM for vMac, won't work on the Macintosh 128K. So I've made a new program, 'CopyRoms', that works on the Macintosh 128K, 512K, 512Ke, Plus, and maybe some other machines. See the 'Extras' section of the Download area.

A Macintosh 512K has the same ROM as the 128K, and the Macintosh 512Ke has the same ROM as the Macintosh Plus. So you can, for example, get the ROM from the 512K and use it to emulate the 128K. Which is what I've done, since I don't have a Macintosh 128K. What the 128K emulation of Mini vMac is actually emulating is a Macintosh 512K with less memory, which as far as I know is exactly what the 128K is.

Be warned that it is tricky to acquire a ROM image from a Macintosh 128K, because it is difficult to transfer files between it and a modern machine, more difficult even than it is with the Macintosh Plus, because it doesn't support SCSI, and because it doesn't support hfs format disks, only mfs, which isn't supported by modern machines at all. It helps to have another old Macintosh, somewhat less old, which can use 400K mfs floppies, and also has hardware, such as ethernet, which can communicate with more modern machines.

The lack of hfs support also makes it more difficult to uses the emulation, since disk images useable by the Macintosh 128K are not mountable by modern systems. It helps to also have the Macintosh Plus emulation, which can work with the mfs disk images, and also with hfs disk images that can be mounted with modern systems.

The Macintosh 128K emulation by default only supports mounting 2 disk images instead of 6. This is because the replacement disk driver is trying to match the size of a data structure used by the real disk driver, and on the Macintosh 128K this structure is smaller than on the Macintosh Plus. You can at compile time choose to support more disk images, which makes this data structure larger, at some slight decrease in authenticity.

I'd like to thank Philip Cummins for advice on the Macintosh 128K emulation and CopyRoms.

There are a few changes in this version of Mini vMac that also affect the normal Mac Plus emulation. The erase disk command of the Finder will now work on any size disk image, not just the 400K and 800K sizes supported by the previous version. This makes it easy to create disk images - you can mount any random file of the desired size in Mini vMac, getting the unreadable disk message, and choose to initialize it.

The cursor is no longer hidden when the Mini vMac window is collapsed in OS 9, or minimized in OS X. But this won't solve the problem with expose in Panther reported by Simone Manganelli. A fix will probably have to wait until I have the chance to use Panther myself.

The 'A' command of the Mini vMac control mode will now display, along with the other version information, what machine is being emulated.

Mini vMac will now verify the checksum of the ROM on startup. There is code in the ROM to check this on boot, but since Mini vMac patches the ROM to replace the disk driver, it also patches the ROM to disable the checksum verification. Now Mini vMac does the check itself, before patching the ROM, and gives a warning message if the checksum is incorrect. Since no harm can be done no matter what is in the ROM, this is only a warning, and Mini vMac will keep running.

Besides CopyRoms, there are some other new or updated extras in the Download area.

blanks-0.2.0.zip includes additional blank disk images - a 400K hfs image, and 800K and 1400K mfs images.

There is new version of AutoQuit. It should now be safe to use in other emulators, and on real machines. It will shut down the machine, and won't try to quit the Mini vMac program if it figures out that it isn't running in Mini vMac. It also won't try to quit Mini vMac if the shift key is held down. The previous version only worked back to system 2, the new version should work on all earlier systems. It will work but is not recommended for system 7 or later, or when using MultiFinder, because it doesn't give other running applications the chance to quit properly. The source code for AutoQuit has been moved out of the Mini vMac source code, and is instead included in the AutoQuit archive.

There is a new program, 'DAOpener', that just opens the first Desk Accessory. It is intended to be used with AutoQuit. AutoQuit is used to assist in 'wrapping' an application so that you can use it much as would a native application for your machine. DAOpener allows you to wrap a Desk Accessory within an application, which can then be wrapped using AutoQuit, so that you can use it much as you would a native application.

December 19, 2003 version 2.1.1 released. Has a few bug fixes.

Fixes a bug so that the Time Manager will work, which allows programs such as Macman and later versions of Hypercard to work. In all previous versions, something in the hardware called the 'Timer 2 interrupt' was not emulated, because it would result in crashes on startup of some system versions, such as 6.0.8. This appears to be due to a bug in these system versions when there is no timer task installed. So the fix is to make the replacement disk driver create a timer task like the real disk driver does, and then the Timer 2 interrupt can be emulated. The Timer 2 interrupt is needed for the Time Manager.

Also fixes a bug in the Macintosh versions (since 2.0.0), in checking for interrupts while setting the status register. I had made a mistake tweaking the PowerPC assembly language. One reproducible problem which this fixes was that Lunar Phantom would tend to hang while playing sounds if Limit Speed was on.

This version doesn't begin playing sound until after the other initializations have finished, which should help prevent choppiness of the Mac Plus startup sound (in the Macintosh versions).

December 6, 2003 version 2.1.0 released. Some highlights are sound emulation in the Macintosh version, better time keeping, and visual feedback for control key shortcuts.

At the request of Richard Bannister (and many other people), the sound code from the Macintosh version of vMac has been adapted to Macintosh version of Mini vMac. Getting sound to work properly in Mini vMac on all machines and system versions is a bit of a problem, but the current version seems to work on a number of people's machines (thank you to everyone who tested it). If it doesn't work on your Macintosh, email me, and include details about what machine you are using (including MHz) and what operating system. Sound emulation is always on in the current version. Since it slows down the emulation a little, in a future version I may provide a way to disable it.

Time keeping has been improved in a number of ways. It turns out the TickCount of a Macintosh increments about 60.15 times a second, not 60 like I always had thought. So code that generated the one second interrupt every sixty ticks was incorrect, and in previous Macintosh versions the clock would drift a bit over time. In previous Windows and X versions, it incremented the TickCount 60 times a second, which was slightly inaccurate, but probably made no noticeable difference (so long as sound emulation isn't implemented). In the new version TickCount is incremented about 60.15 times per second for Windows and X. In all versions now, the second interrupt is generated by looking at the clock of the real machine, and the emulated hardware clock is updated from the real machine's clock. A consequence of that last item is that the emulated clock is now correct even after resuming emulation, where previous versions would lose time when paused, such as by switching to another program.

A fix to the emulation of the real time clock makes it possible now to set the current time of the emulated machine (such as by using the control panel or the alarm clock desk accessory). This doesn't change the time of the real machine.

The new version is more careful about trying to maintain the tick interrupt at the correct frequency on average, so that sound will play smoothly. It enforces a minimum number of instruction executed per tick, and if it notices that the emulation is lagging, it will try to sacrifice the smoothness of video. This applies to all versions, even though sound is only implemented in the Macintosh version for now. It generally makes the emulation more useable on slow machines, or operating systems with lousy video performance (such as OS X).

There is now visual feedback for control key shortcuts. Whenever the control key is pressed, information is displayed on top of the emulated screen. All the functions of the emulator can be controlled by control key shortcuts, which are platform independent, and have the advantage of being available in full screen mode when menus are hidden. Only the most basic commands have been left in the menus. Commands like Interrupt and Reset have been removed from the menu, because they are dangerous and not normally used, and so it is better to hide them a little. Instead of platform specific dialogs, the confirmation messages for interrupt and reset are displayed on the emulated screen, and you need to type 'y' or 'n' (while continuing to hold down the control key). This is a bit more convenient than a dialog to operate for advanced users, and other users shouldn't need these commands.

The X version now implements control key shortcuts (in 2.0.0 they were only implemented for Macintosh and Windows). Together with the control key visual feedback, this makes the X version much more useable (since it lacks the menus and dialogs of the other versions). The old function key shortcuts have been removed. The X version now implements a way to find the size of disk image files that hopefully is reasonably portable. This allows programs like Disk First Aid to work. The X version now supports a command line option '-l' that turns on the 'Limit Speed' option, matching the Windows version.

November 6, 2003 version 2.0.0 released, the first public release of the unstable branch. Some highlights are support of locked disk images, keyboard shortcuts to control the emulator, and full screen mode.

Previous version of Mini vMac couldn't use a locked disk image. Now if you lock a disk image, you can mount it in Mini vMac and it shows up as a locked disk. This allows you to use a disk image and be certain the image file won't be modified. You can also share a single locked image file among multiple running copies of the emulator.

Previously Mini vMac always pretended to be using 800k disks, which caused some incompatibilities when the disk images weren't 800k. Now Mini vMac will only pretend to have an 800k disk if the disk image is exactly 800k. If it is exactly 400k, it will pretend to have a single sided disk (in a double sided drive). If it is any other size, it will pretend to have something more like a hard disk, though not exactly. This allows programs such as Disk First Aid to work correctly. Erase disk now works on 400k and 800k disks. [Note: These improvements don't quite work yet in the X version, because I'm not sure of a portable way to get the size of the image file].

The new Mini vMac disk driver also defines a disk icon, for disks that aren't 400k or 800k, which shows up in System 7, rather than a generic document icon as was seen before. And it supports up to 6 disk images instead of 3. (It can support to 32 disk images with a simple change and recompile, with some slight memory and time overhead. I'm not exactly sure what the overhead is, so I set the limit conservatively to 6). And finally the test for whether a disk image is of the old disk copy 4.2 style is hopefully more accurate, allowing some images to mount that wouldn't before.

The Macintosh and Windows versions of the emulator can now be controlled with with control key short cuts. For example, 'Control-O' to open a disk image file. The available shortcuts are displayed in the menus. (The original Mac Plus keyboard didn't have a control key. However, the Mac Plus could cope correctly with a control key if the keyboard had one. So I've provided a way to press the control key of the emulated machine. 'Control-K' presses the emulated control key, and 'Control-K' again releases it. One weird application is to allow using a 68k version of the emulator running nested inside Mini vMac).

Since the control key is now otherwise used, in the Windows version the alt key is used for the emulated command key, and the application key is used for the emulated option key. In addition the F1 key can also be used for the emulated option key, and the F2 key can also be used for the emulated command key.

The Macintosh version now has a Magnify option, which double the size of the emulated screen. The can be easier to read, since modern screens often have smaller pixels than in the original Mac Plus.

Also in the Macintosh version is a Full Screen mode. This mode is entered by typing 'Control-F', and exitted by typing 'Control-F' again. In full screen mode, the menubar and other programs are hidden. Also, you can't click outside of the emulated screen, which is useful for games such as Dark Castle. The Magnify option is turned on automatically if your screen has high enough resolution (1024 pixels across or greater).

The Macintosh version now includes an assembly language version of the core emulation of the 68k processor. I started from the best compiler output, and then started tweaking. This mainly proves the hard way that hand optimization of PowerPC assembly isn't really worth it. However it is about 50% faster than the best compiler version, and further improvements are possible, so I guess I'll keep it. And also most compilers do rather worse than the best. So a more significant benefit is that putting the critical code in assembly language should allow anyone to compile the code and get similar performance. Another issue is that the best compiler seems to optimize almost randomly. Minor cosmetic changes could drastically reduce performance when the compiler changed its mind about something for no comprehensible reason. This tended to inhibit changing the code at all.

The Windows version now supports a command line switch '/l' that turns on the 'Limit Speed' option, at the request of Stephen Wenzler.

October 2, 2003 version 1.0.0 released. This is 1.0 not because there is any great change from 0.1.7, but because there isn't. It indicates this is now a stable branch, with no further changes except for bug fixes. I might some time fork off an unstable branch, to try out a few ideas, but the 1.0.x branch will continue to be maintained.

This release adds a small kludge to the carbon version for Mac OS X, so that Commmand-Q and Command-H will be passed on to the emulator, rather than intercepted by the operating system. This is accomplished by adding fake menu items. I'd be interested if any one knows of a cleaner way to do this.

The Windows version no longer registers itself in the Windows registry, to avoid the possibility of causing problems for other programs that want to use the '.dsk' and '.rom' extensions. The versions for the X Window System and for Mac OS 9 and earlier are nearly unchanged.

This biggest change is to adopt the build method from Gryphel, which might make it easier to build Mini vMac from the source code. It also supports more development environments. (By the way, people who are interested in Mini vMac as an example of how to write an emulator might also be interested in Gryphel as an illustration of how to implement a graphical user interface. Though it might be more interesting when it is more finished.)

July 17, 2002 version 0.1.7 released. It fixes a bug noticed when a program doing floating point computations gave wrong answers. The problem was more general though. (Specifically, that moving to and from the status register shouldn't set the condition codes like most other move operations. It happened because the CPU emulation of Mini vMac descended from a disassembler, where the distinction doesn't matter.)

This version has a new feature where disk image files named 'disk1.dsk', 'disk2.dsk', and 'disk3.dsk' will, if present in the folder containing Mini vMac, be opened when Mini vMac is launched. In the Mac versions, these files can be aliases to the real image disk image files. Also the 'vMac.ROM' file can now be an alias file in the Mac version.

The big new feature is an 'autoquit' capability. It assists in 'wrapping' an application for the Mac Plus, so that you can use it more as you would an ordinary application for your machine. Actually this was already in Mini vMac, but it wasn't publicly accessible.

The format of the documentation has changed slightly, and the 'About' page now starts with a nice quote.

January 19, 2002 version 0.1.6 released. It has a lower level emulation of the keyboard. This provides better compatibility (allowing debuggers such as Macsbug and TMON to work), and allows all the Mac special characters to be typed in the Windows and X versions.

The 'Share Time' command is gone. It had only applied to the Mac classic version, and was mainly provided in case the default 'hog time' caused problems. Since there hasn't been any problems that I know of, there is no need for the option.

The Mac version now supports 'drag and drop', that is, dragging a disk image file from the Finder onto the Mini vMac window causes the disk image to be opened. (Note that if you switch to the Finder the emulation will pause, and not resume until you switch back to Mini vMac.)

There are now somewhat more detailed instructions for building the Windows version, at the request of Dan FitzGerald.

August 10, 2001 version 0.1.5 released for Macintosh. A small change in 0.1.4 caused problems on an iBook running OS 9.1 (but not on the G3 running OS 8.6 that I developed it on), so I've changed it again. There are no changes in the Windows or X versions.

August 2, 2001 version 0.1.4 released. There is now an initial port for the X Window System. (Thanks to Allan Egleston, for asking when there'd be a port. (And of course thanks to Michael Hanni for the X port of vMac, upon which it's based.)) So far, it's only been used on SuSE Linux 7.0 for PowerPC, and will likely take a bit of fiddling to compile on any particular machine. Please let me know the details of what is needed.

The keyboard support is improved in the Windows version. I had made a couple mistakes in code for the low memory keyboard map. This had broken shift clicking, the key caps desk accessory, and my favorite game, Continuum. Another change in the Windows version is that the Control key is now used to emulate the Command Key, and the Alt key is used to emulate the Option Key.

Mini vMac no longer saves a preference file. It wasn't saving anything too useful, and removing it makes the code a bit simpler. And it is the simplest fix for the problem where a corrupted parameter ram setting could prevent the emulated mac from booting.

(Other than not saving a preference file, the Macintosh version hasn't changed much.)

May 29, 2001 version 0.1.3 released. Fixes MPW build script. Also the default sound level is now set to zero, since Mini vMac doesn't emulate sound. The main effect is that the menu bar will flash when a program calls SysBeep, instead of nothing happening at all.

There is a now an initial Carbon version for Mac OS X, but I wouldn't recommend using it yet. The non Carbon version works faster and better both in OS 9 and in Mac OS X.

March 27, 2001 version 0.1.2 released. Fixes problem where emulated machine would hang if key pressed at startup before any disk was inserted. The same fix (checking the event mask before posting keyboard events) also improves compatibility with some programs.

Mini vMac can now read old style disk image files (which have an 84 bytes header), by using some code from the Windows version of vMac. It also uses some code from Windows vMac for an emulation of SCSI (with no SCSI devices attached), so that system software will think its running on a Mac Plus, instead of a 512ke.

Also new is a bigger and more informative 'about' box, and numerous source code cleanups.

March 14, 2001 version 0.1.1 released. Now runs on Microsoft Windows in addition to Mac OS. Also fixes a problem in posting keyboard events to the emulated machine.

February 28, 2001 version 0.1.0 released, the first public release of Mini vMac.

www.gryphel.com/c/news/oldnews - feedback