[Apple] Mini vMac 3.4.1

[3] @ Piątek, 9 Września 2016 00:08CET

[Apple] Mini vMac 3.4.1

Autor Mini vMac'a, emulatora klasycznych komputerów Apple z procesorem motoroli, produkowanym w okresie '84 – '96 (Macintosh Plus, Macintosh 128K, 512K, 512Ke, SE, Classic i SE FDHD) opublikował kolejną już wersję swojego programu.

Mini vMac 3.4.1

New features in default compile

  • None Yet.

Changed behavior in default compile

  • Changed URL displayed in about screen to "http://www.gryphel.com/c/minivmac/".
  • 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.

Bug fixes in default compile

  • 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.
  • Mini vMac on Microsoft Windows passed an invalid Window Style to CreateWindowEx (when not in full screen mode). When compiled with certain development tools this could result in the window being the wrong size, and other odd behavior. Before finding and fixing this, I also made Mini vMac more robust in adjusting for window border sizes by using AdjustWindowRectEx and MapWindowPoints, rather than various results from GetSystemMetrics. (Thanks to the anonymous user who reported this issue.)
  • 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.

New features not in default compile

  • 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).
  • A new build system option “-sss” selects the output Sound Sample Size.
  • A new build system option “-cbt” selects the initial value of Caret Blink Time (Rate of Insertion Point Blinking) in the Parameter RAM.
  • A new build system option “-dct” selects the initial value of Double Click Time in the Parameter RAM.
  • A new build system option “-mnb” selects the initial value of Menu Blinks in the Parameter RAM.
  • A new build system option “-kyt” selects the initial value of Keyboard Repeat Threshold in the Parameter RAM.
  • A new build system option “-kyr” selects the initial value of Keyboard Repeat Rate in the Parameter RAM.
  • A new build system option “-svl” selects the initial value of the Sound Volume in the Parameter RAM.

Changed behavior not in default compile

  • None Yet.

Bug fixes not in default compile

  • Sound in the Macintosh II emulation is much improved. The build system now enables it by default.
  • The Windows version wouldn't compile with magnification disabled (-mf 1) and screen depth (-depth) of thousands, millions, or 4 colors.
  • 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 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.

Build System

  • The build system now supports Xcode 6.3.2 (with “-ev 6320”), and also Xcode 6.4 Beta (“-ev 6400”), Xcode 6.2 (“-ev 6200”), and Xcode 4.6.3 (“-ev 4630”). Though not tested, other versions of Xcode in between should also work, by constructing the “-ev” option in the same way.
  • The build system now supports Microsoft Visual Studio 2013 (with “-ev 12000”), and also Microsoft Visual Studio 2012 (“-ev 11000”), and Microsoft Visual Studio 2015 RC (“-ev 14000”).
  • Added build system option “-api sd2” to use 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.
  • 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.
  • 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 as described above.
  • The Build System has a new “Import” command in the File menu, which has equivalent function to dropping a file on the application icon as described above.
  • 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.
  • The Build System now has a progress indicator at the bottom of the window. It can display information about what is going on. Clicking on the progress indicator 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.
  • 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".
  • 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.
  • 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.
  • 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.
» [Apple] Mini vMac 3.3.3

Mini vMac 3.3.3 19.12.2013

New features in default compile

More operating systems are officially supported by Mini vMac:

  • FreeBSD on x86-32 (Using “-t fbsd” in the build system) 
  • FreeBSD on x86-64 (“-t fb64”) 
  • OpenBSD on x86-32 (“-t obsd”) 
  • OpenBSD on x86-64 (“-t ob64”) 
  • NetBSD on x86-32 (“-t nbsd”) 
  • NetBSD on x86-64 (“-t nb64”) 
  • Dragonfly BSD on x86-32 (“-t dbsd”) 
  • Dragonfly BSD on x86-64 (“-t db64”) 
  • OpenIndiana on x86-32 (“-t oind”) 
  • OpenIndiana on x86-64 (“-t oi64”) 
  • Linux on ARM (“-t larm”) 
  • Linux on SPARC (“-t lspr”) 
  • Minix 3.2 ("-t minx")

These ports adapt the same X Window code as the Linux port, and should have the same functionality, except currently not sound for some. The x86-64 versions are currently slower, for lack of assembly language tweaking, and should not be used if the x86-32 versions will work.

  • The X versions can now play sound using the Open Sound System (OSS) API. (Usually using compatible implementations on each operating system, rather than the official OSS itself.) Sound is now enabled by default on FreeBSD and NetBSD. Sound compiles without problems (using “-sound 1”) 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. It is also possible to use the OSS API on Linux, using the new “-snd-api” build system option.
  • The X versions now will try to look in the folder contain the application for the ROM image, like the Macintosh and Windows version do. (And also for disk1.dsk and so on files.) If the application directory can not be determined, the current directory is used as before. This is implemented for Linux, FreeBSD, NetBSD, Dragonfly BSD, and OpenIndiana, but not OpenBSD and Minix.
  • The X versions now have a new command line option “-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.
  • The X versions now have a new command line option “-n [app_name]”, in which [app_name] is used instead of the application name for the title of the Mini vMac window.
  • The X versions now supports a central ROM folder like the Macintosh 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 application directory. (And the -r command line option will override both.)

Changed behavior in default compile

  • Drawing the emulated screen to the real screen is more efficient. When the color depth is 4 bits or less, rather than converting each pixel, there is a table with 256 entries for converting one byte at a time. It is also more careful about only converting pixels in the rectangle bounding the changed area, rather than the entire screen.
  • The Linux version dynamically loads the ALSA library to play sound, so that Mini vMac will still run, without sound, even if ALSA is not installed. (This technique was seen in SDL.) So by default the Linux version is now compiled with sound, matching the Mac and Windows versions.
  • 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 X versions now use advisory locking to refuse to open for writing a disk image that has been opened for writing by another copy of Mini vMac. Previously, the X versions of Mini vMac could open an already opened disk image, likely corrupting the image. If Mini vMac can only open a disk image read only, such as because the user has locked the file, then the advisory lock is not used, and multiple copies of Mini vMac can use it.
  • The X versions now try to use the application name to set the title of its window, like the Macintosh and Windows versions have. (If the application name can not be determined, “Mini vMac” is used as before.) This is found at the same time as the application directory, and is implemented for the same operating systems.
  • Command line arguments are now scanned before looking for disk1.dsk and so on files. This is necessary for the new “-d” option to work, and has the side effect that if disk images are specified on the command line, they will be opened first. If there are images on the command line, Mini vMac will now not bother to look for disk1.dsk at all.
  • The “-l” (or “/l” on Windows) command line option is removed. The “-speed z” option to the build system should be used instead. The command line option was from before the build system existed, and the decision made to favor build time options over run time options.

Bug fixes in default compile

  • 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 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.
  • In the Linux version, using ALSA to play sound, snd_pcm_start was called before putting any sound samples in the ALSA buffer. This could cause stuttering at the beginning, or according to one report, prevent sound from working at all. Mini vMac now waits until its private buffer is full, then transfers as much as will fit into the ALSA buffer, and then starts sound playing.
  • When the Linux version is compiled for ARM, it includes a check that the result of snd_pcm_avail_update looks reasonable, and if not calls snd_pcm_status_get_avail instead. This works around what appears to be a bug in Raspbian for the Raspberry Pi.
  • The emulated clock was not properly initialized, and was only correct after the first “second” interrupt.
  • 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.
  • In unlikely circumstances, in Full Screen Mode, autoscroll may not scroll to show the last row of pixels at the bottom or the last column of pixels on the right.
  • 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.)
  • 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 results.
  • 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. Does anyone care? (Windows Mobile was discontinued and replaced by Windows Phone.) This port was starting to interfere with maintaining the main Windows version, and the choice was to remove it entirely or make it maintainable.

New features not in default compile

  • The new build system option “-lt” enables Mike Fort's LocalTalk emulation. 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. 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.
  • A new build system option “-lang pol” selects a Polish translation of the user interface by Przemysław Buczkowski.
  • The X versions have initial support for color (for Mac II emulation). 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. The option “-mf 1” disables magnification (removing the Control-M command). The magnification factor must be an integer.

Changed behavior not in default compile

  • The default color depth for Mac II emulation is “-depth 3” instead of “-depth 0”.
  • For Macintosh II emulation, AutoSlow is now disabled by default “-as 0”. AutoSlow may need some further tuning to work well with Mac II emulation.
  • In the X versions, the results of fwrite and fread on disk images are now checked for errors, which stops compiler warnings in recent Ubuntu.

Bug fixes not in default compile

  • Fixed a bug in the DIVS.L instruction reported by “AP”. (A 68020 instruction used in Mac II emulation.)
  • Fixed the BFFFO instruction, which was completely broken, as reported by “AP”. (Another 68020 instruction used in Mac II emulation.)
  • Bit field operations on a register now use rotate rather than shift. The selected bits can be non contiguous, as pointed out by “AP”, and confirmed by the documentation. (Bit operations fields were added in the 68020.)
  • Bit field operations on memory now try to only operate on as many bytes as needed. Previously it always operated on 5 bytes, which could have undesirable effects if operating on a memory mapped device, as pointed out by “AP”.
  • The “MoveS.L <ea>, Dn” instruction mixed up the order of shifting and masking, and so was completely broken, as reported by “AP”.
  • 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.
  • Fixed “-min-extn” build option in the Linux version.

Build System

  • Added build system option “-api cco” to use Apple's Cocoa API for OS X rather than the deprecated Carbon API. But the Cocoa port of Mini vMac is not yet considered quite ready to be officially supported, and so the Carbon version is still used.
  • Added build system option “-api sdl” to use the Simple DirectMedia Layer 1.2 API. This was added as a stepping stone to the Cocoa port – by combining the source code for SDL with the source code for an SDL port of Mini vMac, and then removing everything not needed, and then a lot of cleaning up until an initial native Cocoa port emerged. However the SDL port can be used as is to port to other platforms supported by SDL. But this is not (yet) officially supported.
  • Added build system option “-t mx64” for Apple's X11 implementation on x86-64. (Previously x86-32 and PowerPC were supported.)
  • Added build system option “-t cygw” for Cygwin/X for Microsoft Windows. Cygwin can also be used to compile the regular Microsoft Windows version with “-t wx86 -e cyg”.
  • Added build system option “-t irix” for IRIX by Silicon Graphics, Inc., thanks to John Perkins.
  • MinGW can be used to compile Mini vMac with build system option “-t wx86 -e mgw”. Since Bloodshed Dev-C++ is based on MinGW, “-t wx86 -e dvc -cl” would previously give similar results.
  • 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.
  • The 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 build system now suppresses warning messages that were generated when compiling the Macintosh II emulation with Microsoft Visual C++, Thanks to a report from William Grana.
Do ściągnięcia
Dodatkowe informacje
Inne treści związane z tematem
[Apple] Octalyzer [Apple] Octalyzer;
Kiedy australijczycy biorą się za coś, wiedz, że może być różnie. Tak jest i w wypadku Octalyzera – dość specyficznego emulatora Apple ][/E. Gdyż oprócz samego udawacza, aplikacja posiada własne środowisko wzorowane na latach osiemdziesiątych ...
[Apple IIe] AppleWin 1.26.6.1.1 [Apple IIe] AppleWin 1.26.6.1.1;
Nowa wersja AppleWin, emulator rodziny komputerów APPLE II. (][, ][e, ][+) .
[Apple IIe] AppleWin 1.26.6.0 [Apple IIe] AppleWin 1.26.6.0;
Nowa wersja AppleWin, emulator rodziny komputerów APPLE II. (][, ][e, ][+) .
[Apple IIe] AppleWin 1.26.6 [Apple IIe] AppleWin 1.26.6;
Nowa wersja AppleWin, emulator rodziny komputerów APPLE II. (][, ][e, ][+) .
[Apple IIe] AppleWin 1.26.5 [Apple IIe] AppleWin 1.26.5 ;
Nowa wersja AppleWin, emulator rodziny komputerów APPLE II. (][, ][e, ][+) .