What has changed in Mini vMac 37.00, compared to Mini vMac 36.04. This only lists changes that affect behavior, and so doesn't include cleanups of the source code.
not in default compile:
New features in default compile
* None Yet.
Changed behavior in default compile
* Mini vMac will now check if a disk image that is being mounted looks like a Macintosh disk image format (HFS or MFS), and if not decline to mount it, showing an error message. This helps prevent accidentally corrupting other files, especially when using ImportFl.
But there are some other disk image formats that you might want to mount, such as Fat16 and ISO (which can be used by the emulated Macintosh with additional software). Or, you may be trying to create your own new disk image and want the emulated Macintosh to initialize it. In these cases you can use a version of Mini vMac compiled with the new “-ndp 0” option to turn off this protection.
If a Branch option prior to 37 is chosen for compatibility with an earlier version, the default is “-npd 0”, and you can use “-npd 1” to turn on this protection.
* The emulation of VIA timer 2, used for playing sound, has been modified when running at greater than 1x speed. There is no correct behavior in this case, it is just a matter of picking what has the best compatibility with the greatest number of programs. This change fixes a reported issue with HyperCard, as well as playing alert sounds in the Sound control panel, and the "Try Scale With Sound" command of ResEdit. However it also no longer passes the Clock/Interrupt Test of MacCheck. Which seems a good trade off, unless further issues are found. (A program to test hardware *should* notice that something is strange when run at greater than 1x speed.) The specific change made is that timer 2 now continues to run during extra cycles only for the duration of a short timer interval, rather than continuing to run in this case until the end of the extra cycles. (Normally, the timer is paused for the extra cycles.)
Bug fixes in default compile
* None Yet.
New features not in default compile
* A consequence of the merge of SDL 1.2 and SDL 2.0 code is that the “-d” and “-n” command line arguments now work for SDL 1.2 too.
Changed behavior not in default compile
* The new “-lto” option provides alternative transport for LocalTalk emulation. In addition to Mike Fort’s original code for LocalTalk over BPF (Berkeley Packet Filter), there is new code from Rob Mitchelmore for LocalTalk over UPD (User Datagram Protocol), that does not require setup or administrative privileges. The new UPD option is now the default for branch 37. If a prior “-br” (Branch) option is chosen for compatibility with an earlier version, the default is BPF.
* In response to this report, AutoSlow is now enabled by default for Macintosh II emulation, matching the default for emulation other Macintosh models. To try to make this work properly, for Macintosh II emulation it now waits 60 ticks rather 34 ticks for AutoSlow to activate.
Bug fixes not in default compile
* The emulation of the BFINS instruction in the Macintosh II incorrectly handled condition codes, causing an issue with the game “Dungeon Master 2”. The N and Z flags should be set from the new value, instead of the old value, unlike the BFSET, BFCLR, and BFCHG bitfield instructions. Thanks to Christophe for this fix, adapted from the same fix in WinUAE. (Some of the CPU emulation code of Mini vMac descends from UAE.)
* When compiled with a recent version XCode, like 11.4.1, Mini vMac for OS X would not draw correctly on a retina display. It now calls “setWantsBestResolutionOpenGLSurface:NO” when available. A comment found in SDL 2.0.12 explains: “Note: as of the macOS 10.15 SDK, this defaults to YES instead of NO when the NSHighResolutionCapable boolean is set in Info.plist”. This problem occurred because the NSHighResolutionCapable key was added in July 2018 to make the window frame look better on retina screens.
* When compiled with a recent version XCode, like 11.4.1, Mini vMac for OS X would do a lot of excess drawing. Every time lockFocus/unlockFocus was called to draw to the window, a call to drawRect got triggered for the entire window. Research indicates that lockFocus/unlockFocus are deprecated, you are never supposed to draw outside of drawRect, and only notify the OS what needs to be drawn. So I tried that, using setNeedsDisplayInRect. No matter what rectangle is passed, drawRect still draws the entire window. It is hard to believe macOS is really that broken. Probably there is something else about what Mini vMac is doing to make the operating system unhappy. But I don’t know what. Before giving up for now, I tried simply removing the lockFocus/unlockFocus, and that seems to work fine. It doesn’t seem correct, but the main thing it is supposed to do is set the drawing context, and Mini vMac is already calling makeCurrentContext with the OpenGL context. So I’ve left it like that for now.
* The built in disassembler (enabled with “-dis 1”) incorrectly handled the BCHG/BCLR/BSET/BTST instructions. Thanks to Ryan for this fix.
* If Mini vMac for some reason is attempting to display a new message overlay on every tick (the kind that says “Type C to continue”), the message would never appear.
* All of the options for the configuration tool that could be defined in “setup/CONFIGUR.i” have been removed and replaced with developer options to the configuration tool. This includes: Maintainer Name, Home Page, Development Environment, Development Environment Version, Use Command Line, Scripting Language, Print File List, Print Variation Name, and Print Variation Options.
* In response to suggestions by Tara Keeling for making it easier to port Mini vMac, the source code for the SDL 1.2 and SDL 2.0 ports are merged into one file. Then SDL has been made the "reference implementation", containing comments that apply to all the ports. From Mini vMac version 2.8.0 up to (but not including) version 3.2.0, there was a “gen” (generic) reference port intended to provide a skeleton for porting to new platforms. But since it wasn’t normally used, it tended to get out of date, and so was removed. Instead the comments were move to classic Macintosh port, chosen as being neutral between modern platforms. But these days, SDL is a much more practical starting point for porting. After you get it working with SDL, if you want a more native port, you can merge the source of SDL and Mini vMac, and then step by step clean it up, until almost nothing of SDL remains. The Cocoa port was made way, with no prior knowledge of Cocoa or Objective-C. This technique takes a while but is straightforward.
The SDL port has been further modified so that if it is compiled without including the SDL headers, it will not use SDL, only standard C libraries. Just as the “gen” port used to. This minimal port actually functions, even without screen, keyboard, or mouse emulation. If you prepare a disk with AutoQuit and CopyROMS, it will run and quit, saving a ROM image. Which tests that most of Mini vMac functions, and now you just need to implement the platform specific parts. Which is an alternative approach for target platforms where SDL is not available, or for people familiar with their target platform who don’t want to fuss with SDL.
If you find Mini vMac useful, please consider helping the Gryphel Project, of which it is a part.
Back up to - Changes in Mini vMac versions