What has changed in Mini vMac 3.2.3, compared to Mini vMac 3.1.3. This only lists changes that affect behavior, and so doesn't include cleanups of the source code.
New features in default compile
* 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, and even that didn't work quite right.)
* "AutoSlow": Mini vMac will automatically shift down to 1x speed if there is no activity for a while. This helps to preserve the battery on portable computers.
If the user types, or clicks or moves the mouse, or the emulated computer draws to the screen, or reads or writes to an emulated disk, that counts as activity that prevents AutoSlow.
AutoSlow takes effect after either 0.5 seconds of emulated computer time, or 16 seconds worth of emulated instructions executed (usually about 2 seconds at the default 8x speed), which ever is longer.
It is possible that some software will not draw anything to the screen for longer than that while doing real work, so the AutoSlow feature can be disabled with Control-S-W. Also, the compile time option '-as 0' causes Mini vMac to start with AutoSlow disabled.
A blinking insertion point will not prevent AutoSlow. This required improving the code for detecting how much of the emulated screen was changed. This makes Mini vMac more efficient in general, since transfering images to the real screen tends to be expensive. 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, that doesn't prevent AutoSlow.
Changed behavior in default compile
* Have begun making tweaked assembly version of 68000 emulation for Intel x86 computers (starting from assembly language generated by gcc). This makes Mini vMac faster, as well as giving more consistent results when Mini vMac is compiled with different development environments. (Had previously only made tweaked assembly language for PowerPC computers.)
* 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.
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.
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.
The most accurate option is still not completely accurate. Completely accurate timing would be exceedingly difficult. For example, 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.
* 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.
The new utility CnvtDC42 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.
* 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.
* 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.
* The power button can now be used in the OS X version when in full screen mode, to put the (real) computer to sleep.
* 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 computer is being emulated. That can be inferred from the variation number.
Bug fixes in default compile
* In OS X, changing the screen configuration, such as switching between using the internal screen of a MacBook Air and an external screen, would tend to make Mini vMac stop drawing.
* In OS X, if the screen configuration changes when in full screen mode, Mini vMac will turn off full screen mode, instead of just leaving the emulator window at a size that is now wrong.
* In OS X, may now have a viable work around for misbehavior of the operating system calls to hide and show the cursor. The most easily reproducible such situation was when the computer went to sleep and then wakes up, the real cursor would end up visible.
* In OS X, the operating system can sometimes bring up a dialog, such as for force quit (upon command-option-escape), and Mini vMac wouldn't notice, leaving the real cursor hidden, making the dialog hard to use.
New features not in default compile
* The build system option, "-emm 0", disables 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 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.
* The build system option "-log" enables improved logging infrastructure for debugging in Mini vMac. 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.) 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.
* The build system option "-dis" enables a disassembler built 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. Requires the "-log" option. 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.
* The 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.)
Changed behavior not in default compile
* None Yet.
Bug fixes not in default compile
* Improved FPU emulation, originally written for Mini vMac by Ross Martin. This code was modified to use SoftFloat, by John Hauser (as found used in the Bochs emulator), plus some extensions to SoftFloat by Stanislav Shwartsman (also found in Bochs). Though using SoftFloat is slower than using native floating point, it ensures consistent results on different computers, and makes it easier to compile with different development environments. There's still a lot of work to do on the FPU emulation, but it already allows much more software for the Mac II to run without crashing.
* 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.
* The Macintosh II emulation supports more than 1M of video ram in 24 bit addressing. (One noticable effect is that allows identify displays button in monitors control panel to work.)
* The build system and the extras are easier to compile with different Macintosh 680x0 C compilers.
* The 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").
* 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 build system option, "-t lx64", to target for 64 bit Linux. And there is a new option, "-t wx64", to target for 64 bit Windows. Both would currently be slower than the 32 bit versions, because those versions now have some assembly language tweaking.