has moved to the Gryphel Project front page
(Follow the Gryphel Project on Twitter to be notified of the latest news. )
March 11, 2018
Today’s Mini vMac Development source snapshot fixes a bug in emulating the trace flag of the CPU. (Thanks to Tara Keeling for causing its discovery.) It seems that in months of testing of Mini vMac 3.5, I never used Macsbug. Stepping through code (with Command-S or Command-T) doesn’t work properly. An optimization to the main cpu emulation loop isn’t valid when the trace flag gets set. I found a way to fix it which doesn’t change the optimized main loop, but just the code before and after. But it can change the timing of other kinds of interrupts by one instruction, potentially causing subtle differences in behavior anywhere. So I don’t plan to put this fix in stable Mini vMac 3.5, it needs more extensive testing.
I’ve added a blinking busy indicator to the status bar in GSgWrite. This is partly to reassure the user that it is working, but mostly it is to tell the AutoSlow feature of Mini vMac that it is working. So that documentation doesn’t need to say to turn off AutoSlow. (Other tools will be updated later to include this code.)
On further consideration, I’ve decided to backtrack and say that GSgWrite, SigCheck, SigWrite, and MakeKeys are still in Alpha, not in Beta, because of not being satisfied with the format for public and secret keys. They are currently using a format that is sort of compatible with PGP, but not actually what PGP would ever produce. For multiple reasons, I’m thinking it would be better to define a GRY format for keys, and then have one set of tools that only deal with GRY format keys (and work with GRY format signatures), and also have another set that uses the PGP semi compatible format that is currently used (and work only with PGP format signatures). I have defined the GRY keys format, and have code that implements them. Tools using this code will come soon.
March 4, 2018
SigCheck, SigWrite, GSgWrite, and MakeKeys are updated again, to fix an issue with the keyboard shortcut for the Host Copy command not working in System 6 and before. They have also been made generally more robust in System 6 and earlier, in protecting against desk accessories doing odd things. Also, they now work on a Mac 128K.
MakeRand has been updated to use the current editing code used in the other tools.
And finally, in today’s Mini vMac Development source snapshot, the build system is updated to use the same current editing window code. This includes the Cut/Copy/Paste commands that use the Host Clipboard, a working Undo command, and some other improvements.
February 25, 2018
There are new versions of SigCheck, SigWrite, GSgWrite, and MakeKeys, which are now declared to be in Beta (instead of Alpha).
The error reporting is a bit better, aborting with command-period can now work, and the user interface is now generally responsive when the programs are busy.
If you are checking a lot of signed messages with the same public key, you can put the key in a file named "pub_key.txt" in the same folder as the SigCheck application, and it will use that instead of asking for it.
Similarly, if you sign a lot of messages with the same secret key, you put the key in a file named "sec_key.txt" in the same folder as the SigWrite or GSgWrite applications, and it will use that instead of asking for it.
February 18, 2018
GSgWrite is a new tool for writing digital signatures that is very similar to SigWrite, except that it uses a different signature format. SigCheck has been updated to handle this new format. (Also SigWrite has been updated to include recent improvements in the text editing window code from SigCheck.)
The main difference in GSgWrite from SigWrite is that when a message containing a public key, or even a nested signed message, is signed with GSgWrite, the signed message contains the exact same text without modification. The PGP format created by SigWrite is designed to be read in one pass from beginning to end, so some kinds of text could cause confusion and have to be modified. The “GRY” format created by GSgWrite is designed to be scanned backwards from the end to find the end of the message body.
This makes the GRY format incompatible with the PGP format. And since it is incompatible anyway, some further changes were made.
First, the GRY format is a bit more compact. For a 1024 bit key, the body of the GRY signature is always exactly 3 lines of 64 characters each. Second, the GRY format format attempts to mitigate known weaknesses in the md5 checksum by including a second md5 checksum, of the same data with the bytes in reverse order. Even if someone finds a practical way to generate a file with a given md5 checksum, finding a file that also has the second checksum right is likely to be more difficult. (The size of the signature depends on the size of the key, not on the size of the digest. A larger digest is fine as long as it is smaller than the key.) Also, CRC-24 checksums for both orders are included in the digest, since code for CRC-24 is already there (used for protecting the signature body against accidental corruption).
February 11, 2018
Today’s SigCheck 0.4.0 now has a working Undo command, since I was in the area of the editing code. Again, this will later be added to all the other Mini vMac extras which share this code for an editing window.
Also in this version, it finds the end of the message that is signed by scanning backwards from the end of the text. Which would allow most anything to be in the signed message without modification, such as a public key or a nested signed message. But this would be incompatible with MacPGP, so I will define another signed message format to allow this, in the near future.
Thanks to Justin Williams, Rienk Koolstra, Marcin Rusinowski, Leo E Tognella, Jonathan Heiman, and Grafico Freelancer for sponsoring about one month of web hosting for the Gryphel project and 6 days of health insurance.
February 4, 2018
Today’s SigCheck 0.3.0, when run in Mini vMac, adds commands to the Edit menu that operate with the clipboard of the real computer instead of the emulated Mac. They have keyboard shortcuts that use the Option key. So Command-Option-V will paste the clipboard of the real computer into SigCheck. This simplifies using SigCheck, as ClipIn is not needed.
This feature will later be added to the other digital signature tools, and also the Mini vMac build system, and also other Mini vMac extras, which all share code for an editing window.
January 28, 2018
The Mini vMac Variations Service now signs the md5 checksum and other information for generated variations. (Automated signing was the reason for the lengthy excursion into digital signatures.)
The Variations Service has its own new signing key, with its own new page: Gryphel Key 2. There is also a new page for the main Gryphel Project Key, at Gryphel Key 1. This page also has links to copies of key placed elsewhere on the web, to help verify that it is correct.
January 21, 2018
MakeRand is a new tool for making random hexadecimal data, to be used with MakeKeys. So the digital signature tools (also including SigWrite) should now be usable. (SigCheck was already usable, for checking signed messages found on this website.) But these tools are still under development.
January 14, 2018
SigWrite is a new tool for writing digital signatures that can be verified with SigCheck (which has been updated). MakeKeys is a new tool for making secret and public keys to be used with SigWrite and SigCheck. These tools are regular Macintosh applications, unlike last week’s MPW tools to do the same thing. These tools are still under development and may have different behavior when finished.
One missing piece is a tool to generate truly random hex data to be used as input to MakeKeys. I'll adapt more code from MacPGP, which looks at the timing of key presses, to make such a tool soon.
January 7, 2018
There are new versions of SigWrtTl and MkKeysTl, two MPW tools which are still under development. The source code is being cleaned up to match previous work on SigCheck and SigChkTl, which in the process has served as code review, finding a number of things to fix.
December 31, 2017
SigWrtTl and MkKeysTl are two new MPW tools. They are still under development. Regular Macintosh applications to do the same thing should follow. SigWrtTl writes digital signatures that can be verified with SigCheck, SigChkTl, or MacPGP. MkKeysTl makes secret and public keys to be used with SigWrtTl and the verifying tools.
Also to come is a tool for making a file a random bytes for using with MkKeysTl. I decided to split random byte generation from MkKeysTl so as to make MkKeysTl much easier to test.
December 24, 2017
Last week’s SigCheck alpha is only the first of a planned trio. The second is a tool to sign a message, and the third to create a private/public key pair. Hopefully the next two should go faster from already being familiar with the MacPGP source. Also, as I remove unneeded code from MacPGP, I’m leaving code for both signing and key generation in as long as possible, rather than going through this process from scratch three times.
SigCheck can’t be finished until the other two utilities are done, because in some circumstances I want to use a slightly different format for signed messages than MacPGP does. In particular, when the signed message contains a public key. MacPGP allows reading several signed messages in a single file, and it reads the file linearly, so to reliably find the end of a signed message, some sequences of characters are not allowed in the body. So a public key gets modified a bit. SigCheck assumes there is only a single signed message, and could be changed to scan backwards from the end, so anything can be allowed in the body, such as an unmodified public key. For a balance of simplicity and compatibility, I think my signing tool will usually write MacPGP format, but if that would require modifying the body, it would use a different format, so the body remains unmodified.
December 17, 2017
SigCheck is a new tool for checking the signed checksums on this website. It is still under development, but seems to work. (It is regular Macintosh application, unlike last week’s SigChkTl MPW tool.)
December 10, 2017
SigChkTl is a new command line tool for Macintosh Programmer’s Workshop for checking the signed checksums on this website. It is still under development. A regular Macintosh application to do the same thing should follow.
December 3, 2017
After two weeks studying MacPGP source, digital signing looks relatively simple. I now have a much smaller amount of code that given a signed message and a public key in ascii armored format, will check the signature. I just have to clean it up to make a Macintosh program that can be used to check all the many signed checksums on this website.
(I think that these days it would actually be legal to distribute MacPGP here, but it would be necessary to fill out a form to notify the government, which I’d rather not deal with. Making a utility that only deals with digital signatures, rather than general encryption, I think avoids this issue. Also, a simple utility ought to be easier to use.)
November 26, 2017
I’ve increased the limit to 25 for the maximum number of requests per day to the Mini vMac Variations Service. This is just to make sure that no one who is using the service reasonably needs to worry about the limit.
The download page for a sponsored variation now displays the number of remaining requests available for the day. This limit is actually per build server, but this distinction doesn’t usually matter, since usually only a single build server is active, except for brief maintenance periods.
Mostly this week I have been looking at the source code for MacPGP. The Gryphel Project website has lots of signed checksums, but doesn’t provide a way to check the signatures. So I’m looking into whether it is possible to create a simple utility to do this kind of check.
Thanks to Johan Klassen and Chris Hanson for sponsoring over a month of web hosting for the Gryphel project.
November 19, 2017
With yet more optimizations, the turnaround time for the Mini vMac Variations Service is now usually down to 30 seconds (from one minute last week).
Thanks to Gianluca Abbiati, Malte Meyer, and Luis Hernandez for sponsoring over 3 months of web hosting for the Gryphel project.
November 12, 2017
With assorted optimizations, the turnaround time for the Mini vMac Variations Service is now usually down to one minute (from two minutes last week, and hours before last week).
November 5, 2017
I have set up an old Macintosh (Intel) to be dedicated to compiling variations for the Mini vMac Variations Service. This speeds up turnaround from hours to minutes. (At least when it is running. The scripts are designed to halt on first error, so that when I check on the machine later, it is easier to tell what happened, and try to make sure it doesn't happen again. So reliability should increase over time.)
The Variations Service has been reworked to allow more than one machine to do compiles. Eventually this might be useful in meeting larger demands than one machine can handle. But the much more immediate use is to make maintenance simpler. I can set my main computer to compiling variations while doing maintenance on the old Macintosh, so there is no interruption in service.
Supporting more than one machine doing compiles at the same time has consequences. Both machines trying to update a single list of the latest compiled variations would be messy, so that list has gone away. Instead, when a variation is requested, a new web page is made for it (which says that the variation is being compiled), and when the variation is compiled, the web page is replaced with a new version that has a download link and md5 checksum. Both machines can write such pages at the same time, since they are writing to different pages.
October 29, 2017
I’m back from travel. After considering feedback, I have implemented a new way to use the Mini vMac Variations Service. With the increased automation in the build system to reduce the cost of making variations, I can now offer as many variations as you can reasonably want for a year for a single donation of ten dollars or more. Where reasonable is defined as up to ten per day, every day. I personally regularly use about five variations total, so hopefully this should be much more than enough.
When you make a donation, you will receive a Sponsor Code to use in the form for the Variations Service.
With a Sponsor Code, you can skip the Demo version, so this is faster than the previous method of sponsoring a single variation. And not having to making a donation for each variation of course speeds and simplifies things. (Sponsoring a single variation will likely go away in the near future.)
I will retroactively send out Sponsor Codes to at least the people who have donated ten dollars or more in the last year.
Speaking of which, thanks to Chris Hanson for sponsoring over a month of web hosting for the Gryphel project.
October 22, 2017
I’ve been doing some travelling this week. But before that, I figured out a few ways to further automate the Variations Service, which could eventually allow more frequent batches, and consequently faster turn around.
October 15, 2017
Today’s Development source snapshot adds the Czech translation by Anonymous. (This required adding support for 11 new characters.)
I’ve updated the program strings on the localization pages to more exactly match the Mini vMac source code, which included work on scripts that convert between HTML and Mini vMac’s representation of international characters. I also created a primitive script to automatically convert received feedback from the web form with international characters into plain ascii HTML format, which led to finding a few mistakes I had made processing the Czech translation previously.
October 8, 2017
Today’s Development source snapshot is the start of the 3.6 branch. It has the Catalan translation by ArduinoXino. (This required adding support for a new character, ‘·’. The new Czech translation requires more new characters, and so will come later.) The one other change is to make the URL in the Mini vMac about message be the main Gryphel Project page, rather than the Mini vMac page, mostly since it is shorter, in case anyone tries to type in it from here.
The page hosting the game Glider by John Calhoun now includes the source code.
Thanks to W Brian Barnes for sponsoring a week of web hosting, and two variations, for the Gryphel project.
October 1, 2017
A Czech translation for the Mini vMac user interface has been anonymously contributed.
Thanks to G.S. Brenac for sponsoring over 3 days of web hosting, and a variation, for the Gryphel project.
September 24, 2017
ArduinoXino has contributed a Catalan translation for the Mini vMac user interface.
A page has been added to the software for Mini vMac collection with a link to Apple’s Thread Manager, which is needed by other software like MacBalsa.
September 17, 2017
Some more software is now hosted by the Gryphel Project: BinHex and Unpit.
September 10, 2017
Some more software is now hosted by the Gryphel Project: 3D-Edit (by request), MockPackage, and PackIt.
August 20, 2017
Today’s Mini vMac 3.5.8 updates the stable version to fix a problem on PowerPC OS X, and also fixes an issue affecting the Variation Service. Mini vMac 3.5.8 on platforms other than PowerPC OS X (‘mach’), and x86-32 OS X (‘imch’), should be identical to Mini vMac 3.5.7, except for the version string and modification date.
It was reported that “Mini vMac 3.5.7 wont run on PPC G3 systems”. It turns out that the GCC flag “-mmacosx-version-min” should be specified for all files compiled, not just the platform dependent code. It affects things like the required CPU. Making this change happens to have no effect on Mini vMac for x86-64 OS X, there is some effect for x86-32 OS X, and the largest effect is for PowerPC.
August 13, 2017
Mini vMac 3.5.7 is now officially released. That is, it is now declared to be the stable version, with no change made to the source code or compiled applications. It is available from the main Mini vMac Download page. The Changes file lists what has changed since Mini vMac 3.4.1. The 3.5 branch began June 27, 2016, entered beta April 2, 2017, and 3.5.7 was created July 9, 2017.
August 6, 2017
The Mini vMac 3.5.7 beta download page now offers Macintosh 128K emulation (the original Macintosh), in addition to the Macintosh Plus standard variation and a Macintosh II variation.
July 30, 2017
There are new pages for links to software for Mini vMac, using a format more consistent with hosted software, for: DYOH Architecture, DYOH Landscape, Sprout!, and MacMinix.
So now finally every program has its own page in the Software pages. (This has been a long project.) Most of these pages host a copy of the program, so in the index pages the “(hosted)” has been removed, it can be assumed a program is hosted if not marked with “(link)”. The about section in the main page has been updated to reflect that most programs are now hosted.
Thanks to Andrew Y. for sponsoring over 3 days of web hosting, and a variation, for the Gryphel project.
July 23, 2017
There are new pages for links to software for Mini vMac, using a format more consistent with hosted software, for: DateView, Eudora, UserLand Frontier, MacFlow, and Apple DocViewer. Some more software is now hosted by the Gryphel Project instead of only linked to: XLISP-STAT.
July 16, 2017
The Mini vMac 3.5.7 beta download page now offers Macintosh II emulation, in addition to the Macintosh Plus standard variation. This page and the download Mini vMac 3.4.1 page have been reorganized a bit.
I’ve added notes for using Mini vMac in recent versions of OS X.
There are new pages for links to software for Mini vMac, using a format more consistent with hosted software, for: Hypercard Player, Dali Clock, and InTouch.
Thanks to Brian Stevens for sponsoring over a week of web hosting for the Gryphel project.
July 9, 2017
Today’s Mini vMac 3.5.7 beta has a few bug fixes.
In the Cocoa port, when importing the text clipboard, if there were any characters that could not be translated (because they are not in MacRoman), nothing would be translated. Now, such characters will translate to “?”.
After an “Abnormal Situation” is dismissed, it neglected to clear the 4 digit code, with the result that the code could be displayed when other messages are displayed, such as for the “About Mini vMac” command. The code is now cleared.
In the Macintosh II emulation, an “Abnormal Situation” report seen when using the Restart command of the Finder has been removed, since this actually seems to work fine now.
In the Cocoa port, some more problems are fixed in the fix in Mini vMac 3.5.5, for incorrect cursor position while dragging the Mini vMac window. After the a dialog window, such as for open disk image, the mouse position would not be updated until the mouse moved. So Mini vMac now checks the mouse position after dialogs. A harder problem is the mouse position would not be updated after using the menubar, or window controls such as the close box (clicking and dragging off the control, so the window isn’t closed, and the mouse is moved). Mini vMac isn’t notified about these clicks. So instead now whenever Mini vMac notices that it hasn’t been given time to run for long enough, it will check the mouse position, which usually will take care of these cases. Perhaps it would have been simpler to find some way of getting the correct mouse position while dragging the Mini vMac window. But it is nicer, and ought to be more efficient, to rely on events for mouse position when possible, rather than constantly asking the OS where the mouse is.
The recent report about odd behavior on a Windows 10 tablet may now be understood, with no fix needed.
There are new pages for links to software for Mini vMac, using a format more consistent with hosted software, for: The Fool’s Errand, At the Carnival, 3 in Three, Disk First Aid, Disk Copy, TrueType™, Compact Pro, Acta, and MORE.
Thanks to Shitara Zenya for sponsoring over 3 days of web hosting, and a variation, for the Gryphel project. (Which also led to finding the Cocoa clipboard import issue.)
July 2, 2017
The Beta Variations Service now allows arbitrary screen sizes. Besides the menu choices, there is also a text field where you can instead type whatever size you like. (When the form is submitted, if this field is not empty, it is checked whether it is valid).
One of the two Abnormal Situation reports I mentioned last week turns out to be more or less reproducible. It is also reproducible in Mini vMac 3.4.1. It may be that all that is going on is that some Mac software can be a little buggy, and access address space it isn’t supposed to. So I’ve been thinking that there is no evidence of any situation where Mini vMac 3.5.6 is worse than Mini vMac 3.4.1, after months of testing, and it is time to leave beta.
But now there is odd report from a Windows 10 tablet user to look into first.
Some more software is now hosted by the Gryphel Project instead of only linked to: SgInfo.
June 25, 2017
Some more software is now hosted by the Gryphel Project instead of only linked to: LEE and Glider Design!. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: CRLF.
Three weeks of using Mini vMac 3.5.6, with the new enhanced Abnormal Situation reports, have yielded two reports. These two reports suggest the problem is not a new call to report an Abnormal Situation for what is actually a normal situation, but instead that something is randomly accessing memory. So I think the next step is to write (optional) debugging code to catch unusual accesses to memory, to greatly increase the percent of the address space that generates an abnormal situation report, hopefully making the reports much more frequent.
Thanks to William Winter for sponsoring over 2 weeks of web hosting for the Gryphel project.
June 18, 2017
Some more software is now hosted by the Gryphel Project instead of only linked to: MacShell, MicroArchitecture Simulator, and PDP-8/E Simulator.
I’ve finally obtained OS X 10.12 (Sierra), and verified the reported (twice) problem with the new Path Randomization “feature”. The operating system can copy the application somewhere else before executing it. So Mini vMac won’t see files that are placed in the same folder, like the ROM image. One workaround I’ve seen mentioned doesn’t seem to work, at least in 10.12.5 - moving Mini vMac to a different folder doesn’t turn off Path Randomization. One workaround that does seem to work is to run the command “xattr -c <path to archive>” in the Terminal to clear extended attributes on the downloaded Mini vMac archive before expanding it.
June 11, 2017
The Mini vMac Variations Service has changed again. A donation of two dollars or more to the Gryphel Project is now required. Perhaps this might encourage some people to use it, who previously didn't want to impose. For other people, the Beta Variations Service is still free. Actually, the main reason for the change is to encourage more people to test the Beta.
For the stable Variations Service, a Demonstration version is free. A Demo version is identical to the regular version, except that the word “Demo” floats across the emulated screen. (Code for this has been in Mini vMac for a while now.) If the Demo looks suitable, you can then sponsor that variation, with a donation of two dollors or more, and I'll produce the non Demo version. (A donation of exactly two dollars is fine and appreciated. The marginal cost of producing an additional variation is small.) Once sponsored, that variation is available to everyone, under the GPL license.
Some more software is now hosted by the Gryphel Project instead of only linked to: Sparrowhawk, Crossword Solver, Snow, and Markov. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: Cruciverbalist, PlayFreeLotto, and CuliDataBase.
June 4, 2017
Today’s Mini vMac 3.5.6 beta fixes an issue in the Cocoa port and fixes a design flaw in “Abnormal Situation” reports.
Also, in other recent news, Tara Keeling has updated her Nintendo 3DS port of Mini vMac. It is announced in this GBAtemp.net post. It now supports Macintosh II emulation, with color.
The fix in Mini vMac 3.5.5, Cocoa port, for incorrect cursor position while dragging the Mini vMac window caused another problem. If you switched to Mini vMac using command-tab, the mouse position wasn’t updated until the mouse is moved. This is fixed by fetching the current mouse position when Mini vMac is activated, rather than only rely on mouse movement events. (Before 3.5.5, the Cocoa port would frequently fetch the mouse position, which was giving incorrect results during dragging the Mini vMac window.)
If Mini vMac reports an “Abnormal Situation”, it now also displays a 4 digit hexadecimal number. The original idea was that if something unexpected happens, you should first figure out how to reproduce the problem. Then the same thing can be done on a copy of Mini vMac with debugging stuff enabled. But this idea doesn’t work out so well if the problem can’t be reproduced, and seems to happen randomly and rarely. Which is what has happened. Over a few weeks I saw a couple Abnormal Situation reports in the beta that I couldn’t reproduce. Mini vMac worked fine afterwards, so I suspect that the report was not needed, it is just a situation that is rare but valid. I just need to find out which report, out of couple hundred, to remove. So I enabled debug logging and continued to use Mini vMac for weeks. And so far it has worked perfectly, unfortunately. Maybe I just haven’t used it enough.
So now in today’s version the regular non debug Mini vMac will display a number when reporting an Abnormal Situation, which doesn’t take much additional code. So if anyone runs across this issue, you can tell me this 4 digit hexadecimal number, and I will know exactly which report to remove.
(By the way, an explanation for all these “Abnormal Situation” reports: When trying to emulate some aspect of Macintosh hardware, my current strategy is not to try to figure it all out and then implement the entire emulation as best I can. Because if I did that, inevitably there would be a mistake somewhere, and when that causes some software to malfunction, I won’t have any clue of where to look for the mistake. Instead I would start with a place holder Abnormal Situation report. Then I find some Macintosh software that reaches that report, and look at that area of its code, and try to figure out what it is trying to do. Then I try to implement just enough emulation for it to work correctly, and give an Abnormal Situation report for code that does something else. If the Macintosh software still doesn't work, the problem is probably in the code I just wrote. If it does work, then I next try find some other Macintosh software that hits one of the new Abnormal Situation reports. And iterate. The result is code that is usually correct for what it does, and will tell you exactly where to look when it reaches something that hasn’t been implemented yet.)
Some more software is now hosted by the Gryphel Project instead of only linked to: SndConverter Pro, SndCataloguer, SndCollector, Simple Card, and Gene. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: FIT2EPS and EZIndex.
May 28, 2017
Testing proceeds on the Mini vMac 3.5.5 beta.
Some more software is now hosted by the Gryphel Project instead of only linked to: SignatureQuote, Swapper, kb8to7 and kb7to8, ChunkJoiner, Encryptinator, and Checksum. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: Find In Files, TextToMac, Alex’s Encrypt, and Verifile.
May 21, 2017
Some more software is now hosted by the Gryphel Project instead of only linked to: MacBALSA.
Testing proceeds on the Mini vMac 3.5.5 beta. But actually, this week I have been traveling. There should be more work on Mini vMac next week.
May 14, 2017
Testing proceeds on the Mini vMac 3.5.5 beta.
Some more software is now hosted by the Gryphel Project instead of only linked to: LOANCALC, HTML Pro, MacSOUP, xLogicCircuits, xComputer, xTuringMachine, xModels 2D and 3D, and xSortLab. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: EveryHour and TextToHTML.
(Adding hosted software is a way for me test Mini vMac.)
I have noticed an issue in the Cocoa version that I haven’t found a fix for. Unlike in the Carbon version, the window bottom corners are rounded. Which slightly messed up the screenshots I’ve been making. It seems there used to be an undocumented way in Cocoa to make the bottom corners square “[window setBottomCornerRounded: NO]”, but it doesn't work anymore. For my purposes, a work around is to make screenshots in full screen mode, which actually works better.
May 7, 2017
Today’s Mini vMac 3.5.5 beta has three bug fixes.
After emulating an ADD instruction, if the value of the X flag was needed later, but in between there was another instruction that set the other flags not including the X flag, the lazy evaluation of the X flag was incorrect. This broke signing with MacPGP. While fixing this, I put in some debugging code to allow disabling lazy flag evaluation, so one can see if this code is responsible for an observed bug.
In the Cocoa port, when dragging the Mini vMac window around by its title bar, the emulated cursor position was incorrect. (The emulation continues running during the drag in this port.)
In the Cocoa port, if the mouse is moved over the dock, the cursor is made visible by the operating system, but if the mouse was then moved directly back into the Mini vMac window (and there was nothing in between), the system cursor was not made invisible again, so the system cursor and the cursor of the emulated Macintosh were drawn on top of each other.
Some more software is now hosted by the Gryphel Project instead of only linked to: Glk Hugo, Billionth Birthday, The TimeKeeper, iTime, and NETime. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: Coffee Timer.
April 30, 2017
Today’s Mini vMac 3.5.4 beta has two bug fixes.
The emulation of the CMPI instruction was considering pc relative addressing to be illegal, when it is actually fine (though odd). As reported by Adam, this broke Dynamix adventure games. This was in Macintosh II emulation, but the bug was also present in the default Macintosh Plus emulation.
In the the Cocoa port, when import and exporting the text clipboard, Mini vMac was not translating the end of line format.
Some more software is now hosted by the Gryphel Project instead of only linked to: Inform, MaxZip, MaxTADS, Glulxe, and IFDropFile.
Thanks to Are Hansen for sponsoring over 2 weeks of web hosting for the Gryphel project.
April 23, 2017
Today’s Mini vMac 3.5.3 beta may fix a bug in the Windows version where the Mini vMac window is resizable. This bug was added in 3.4 when fixing a call to CreateWindowEx to stop using an invalid window style. The fix is now fixed by not including WS_THICKFRAME in the style.
Also, two calls to display “Abnormal Situation” are removed after discovering they were called in normal situations.
Some more software is now hosted by the Gryphel Project instead of only linked to: Zippy-Type, Big Al FileLock, and GameMaker. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: TextChanger and Drop•BB.
Thanks to Chris Paterson for sponsoring almost 2 months of web hosting for the Gryphel project.
April 16, 2017
Today’s Mini vMac 3.5.2 beta may fix a bug found by Tara Keeling in the Macintosh II emulation, where if the emulation was running slow enough (such as 1x speed), and there is a “disk1.disk” and “disk2.disk”, then the second disk image won’t get mounted. There is code to delay mounting the second disk one second after the first disk, which is good enough for Macintosh Plus emulation, but apparently not for the Macintosh II. So I’ve increased the delay to four seconds, but also now when a kDriveStatus call is made to the replacement disk driver, the delay is reduced (to about a fifteenth second). The emulated computer appears to be ready for a new disk after this call. (Not reducing the delay to zero is just being conservative.)
So even for the default Macintosh Plus emulation, when inserting multiple disks there is now usually much less delay.
This version also fixes an issue with the Cocoa port, when Mini vMac is launched by dragging a disk onto the application icon, but there is also a disk1.dsk image, it now matches the behavior of other ports in mounting the dragged image after disk1.dsk instead of before.
It also fixes an issue in the build system where “SCRNHACK.h” could be included in the generated source code when it isn't needed.
Debug information logging (“-log 1”) is now implemented in the classic Mac port. And logging code has been added to the replacement disk driver in “SONYEMDV.c”.
Some more software is now hosted by the Gryphel Project instead of only linked to: QuickLearner and Soundex. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: Mini App Pack.
April 9, 2017
Another game is now hosted by the Gryphel Project: Dungeon of Doom.
Testing proceeds on the Mini vMac 3.5.1 beta.
April 2, 2017
Today’s Mini vMac 3.5.1 is the first beta of the 3.5.x branch. The Changes page lists differences from current stable 3.4.1 version. (The only change in the source code from the last Development snapshot is the version number.)
March 26, 2017
The latest Mini vMac Development source snapshot has a few minor fixes, mostly of compiler warnings. In preparation for moving to beta, this week I tested it with more development environments, then tested production compiles with each option individually, then recompiled the last couple hundred variation requests.
March 19, 2017
The latest Mini vMac Development source snapshot fixes one final known issue with the Cocoa port, and has a number of minor fixes for various development environments.
When Mini vMac becomes the active application, all emulated key are usually considered to be up, even if the actual keys are still being held down. But there is an exception for modifier keys held down on drag and drop (after which Mini vMac makes itself the active application), so that holding down command and option can be used to rebuild the desktop files of emulated disks. This exception worked in Carbon, but not previously in Cocoa. I’ve now figured out how to get the modifier keys, by using [NSEvent modifierFlags]. This only work in OS X 10.6 and later, so Mini vMac checks that this method is available before using it. With this fix, as far as I know the Cocoa port is now as good as the Carbon port. So I can use the somewhat faster 64 bit version, which only is possible with Cocoa.
I’ve been testing with various development environments supported by Mini vMac, and made minor fixes for them. There is still more testing I want to do before moving the 3.5 development branch to beta. But no changes other than bug fixes are expected to be made.
March 12, 2017
The latest Mini vMac Development source snapshot adds support for Visual Studio 2017 (with “-ev 15000”) and has been tested with Apple Xcode 7.3.1 (“-ev 7310”) and 8.2.1 (“-ev 8210”). Basically only version information seems to have changed in the file formats.
The emulation of the Move to SR instruction now checks for Privilege Violation, and emulation of the Move from SR instruction now checks for Privilege Violation on 68020 (it is not a Privilege Violation on 68000). The build system should now correctly include all icon files with the “-all-src 1” option. And compiling the Windows CE version with “-e mvc” should work again.
Various compiler warnings and other small issues were also fixed. I expect to move the 3.5 development branch to beta soon, after further testing.
Thanks to Christopher Tar for sponsoring over a half month of web hosting for the Gryphel project.
March 5, 2017
In the latest Mini vMac Development source snapshot, for x86-32 versions, Mac II emulation is now even closer in performance to the Macintosh Plus emulation. Previously Mini vMac 3.5 used a non-standard stack alignment for Macintosh Plus emulation on x86-32, when compiled with GCC 4.7.4 (with the “-e mvc” option), which results in smaller and faster code. However, for OS X, any calls to external libraries could crash, and such calls can be generated by the compiler itself. For Macintosh II emulation, such a call is generated for 64 bit division, so previously the non standard alignment was not used. Now instead Mini vMac contains its own (not particularly good) implementation of 64 bit division, used for CPU architectures which don't directly provide it and the compiler would generate a library call. So the non-standard stack alignment can be used. To make it easy to detect if the compiler generates any other problematic calls, on OS X Mini vMac is now linked without the compiler libraries (for GCC 4.7.4).
Compiling with GCC 4.7.4 previously generated warning messages about “aliasing”. A C compiler is allowed to assume that two pointers of different types don't point to the same memory location. But this assumption could break Mini vMac. So now for GCC 4.7.4 the option “-fno-strict-aliasing” is used to prevent this assumption, which appears to make no significant difference in speed. But for other compilers, Mini vMac will now try to work correctly even with this assumption (basically by taking out optimizations for big/little endian), which will slow it down a bit.
Also in this version, a bug is fixed in the Cocoa port, where it would draw incorrectly in full screen mode if the emulated screen is larger than real screen.
Also fixed is a bug in lazy evaluation of condition flags for the Tst instruction and similar.
February 26, 2017
In the latest Mini vMac Development source snapshot, the emulation of the coprocessor instructions (F line instructions) is reworked to not use the opcode, but instead only use the entry for the opcode in the OpDispatch table. So now the main emulation loop doesn’t need to save the opcode for Mac II emulation, helping to make it perform exactly as fast as Macintosh Plus emulation.
February 19, 2017
In the latest Mini vMac Development source snapshot, the emulation of the 68020 instructions is updated to not use the opcode, but instead only use the entry for the opcode in the OpDispatch table (as the 68000 instructions already do). The next step will be to do the same for F line instructions such as FPU calls. Then the only use of the opcode will be for that lookup, and so the opcode won’t need to be saved, in the most speed critical part of the program. This will help make the Mac II emulation perform exactly as fast as the Macintosh Plus emulation (where the opcode is already not saved).
Thanks to ClockWise for sponsoring over a day of health insurance costs for time I spend on the Gryphel project.
February 12, 2017
The latest Mini vMac Development source snapshot uses the “global register variable” feature of GCC 4.7.4 for the PowerPC and ARM versions (in addition to the x86-64 version added last week). Besides the 3 registers used for x86-64, the PowerPC and ARM versions also use a register to point to the 680x0 emulation variable record (as was done in the old PowerPC assembly language in Mini vMac 3.4.1).
The make file generated by the build system for GCC 4.7.4 (with the “-e mvc” option) now splits compiling C files into two parts, from C to assembly, and then from assembly to object file. Previously the assembly would be generated and then deleted by the single gcc compile command. So now the assembly is left around, making it easier to keep a close eye on what the compiler is doing.
Which helped to notice a major inefficiency in the ARM version, due to an alignment issue in the most speed critical part of the emulation. Fixing this doubled the speed. This problem didn't affect 3.4.1, but all the other optimizations make 3.5 about fify percent faster than 3.4.1 on ARM.
February 5, 2017
In the latest Mini vMac Development source snapshot I've experimented with the “global register variable” feature of GCC 4.7.4, in the x86-64 version of Mini vMac, to make better use of the 8 extra registers (as compared to x86-32). The compiler doesn't seem to generate very good code for this feature, but the result is still faster then when not using it. The x86-64 version of Mini vMac 3.5 is now 10 to 20 percent faster than the assembly language of Mini vMac 3.4.1 for x86-32 (there was no x86-64 assembly language).
January 29, 2017
The latest Mini vMac Development source snapshot has further work on the CPU emulation. The result of the ‘>>’ operator in the C language on signed values is implementation defined, so it can not always be directly used for the 680x0 ASR instruction. But in GCC 4.7.4, it is defined to do sign extension, so it can be used, and so now will be used for “-e mvc”. Also in today’s version, for both ASR and ASL, lazy evaluation of the condition code register is used.
And a bug is fixed in the built in disassembler (“-dis” option). For the shift instructions L and R were reversed (such as for ASR and ASL).
January 22, 2017
The latest Mini vMac Development source snapshot merges in a Brazilian Portuguese translation of the user interface by Mauricio.
This week I mostly have been looking into whether the Retro68 cross compiler could be used for the classic Mac ports of Mini vMac, but concluded probably not.
January 15, 2017
The latest Mini vMac Development source snapshot adds support for 3 more GCC 4.7.4 cross compilers I’ve built, targeting OpenIndiana on x86-32 and x86-64, and also Windows CE for ARM (using the CeGCC project). Also, the Mini vMac 3.5 Alpha Variations Service is updated to use them.
GCC 4.7.4 does not seem to support OpenBSD or Dragonfly BSD. And some random hacking on both didn't succeed in making a working Mini vMac. I may stop producing official Mini vMac binaries for these two for now. There has been little demand for them.
January 8, 2017
The latest Mini vMac Development source snapshot adds support for 5 more GCC 4.7.4 cross compilers I’ve built, targeting FreeBSD and NetBSD on x86-32 and x86-64, and also OS X for PowerPC. Also, the Mini vMac 3.5 Alpha Variations Service is updated to use them.
Code in the build system for using assembly language has been removed. (So options “-no-asm” and “-a” are gone.) Some other code in the build system, also not used now for Mini vMac, has been removed also. The icon files have been moved to the main source directory, and the “platform” directories are gone. There is a new build system option “-cfg 1”, only supported for “-e mvc”, that puts generated configuration files into a separate directory.
January 1, 2017
The latest Mini vMac Development source snapshot adds support for 5 more GCC 4.7.4 cross compilers I’ve built, targeting Linux on x86-32, x86-64, ARM, PowerPC, and Sparc. Also, the Mini vMac 3.5 Alpha Variations Service is updated to use them. Next I'll look at cross compilers for BSDs.
A problem in the Macintosh II emulation reported by Stephen Barbieri may be fixed in the development version. I think it was caused by the FPU emulation not coping with invalid inputs.
December 25, 2016
This week I have updated my scripts for the Mini vMac 3.5 Alpha Variations Service to use my new GCC 4.7.4 compilers for the OS X and Windows versions, for x86-32 and x86-64.
Mini vMac 3.5 uses C language only, and is a bit faster than the x86-32 assembly code of 3.4.1. It is much faster (like double) for variations where the assembly language code wasn’t used, like for Macintosh II emulation.
Also, the Alpha Variations Service now supports the x86-64 version for OS X (which uses the Cocoa API instead of Carbon). It is already a bit faster than the x86-32 version, and I think further improvement is possible.
Thanks to Stephen Barbieri and Anonymous for Christmas presents for the Gryphel project, sponsoring about 9 months of web hosting.
December 18, 2016
In the latest Mini vMac Development source snapshot, the build system has a new Development Environment option, Mini vMac C (“-e mvc”), which is really just a particular version of GCC and supporting projects, compiled into a set of cross compilers, that will eventually be used for official binaries. The advantage of using a single compiler version is in getting consistent performance across different operating systems. Also it easier to tweak C code to get good performance for a single compiler, than to try to make code that is optimum for all C compilers. The C code for the CPU emulation on x86-32 using GCC 4.7.4 is now about as fast as the old hard to maintain and limited hand tweaked assembly language code.
Previously I had compiled from GCC 4.7.4 native compilers for OS X (x86-32 and x86-64). This week I followed the instructions for MinGW-w64, which worked perfectly to build cross compilers and supporting files for Window (x86-32 and x86-64). Next I can look into building cross compilers targeting Linux.
Some more software is now hosted by the Gryphel Project instead of only linked to: Manual Maker.
December 11, 2016
In the latest Mini vMac Development source snapshot, the build system is updated to produce more optimized compiles for Windows x86-32, Linux x86-32 and Linux x86-64, for the specific compiler versions I use. (As was previously done for OS X x86-32.) There is also some further fixes and tweaks to the CPU emulation code.
But it is unsatisfactory for Mini vMac to operate at different speeds on different operating systems because of using different C compilers (unlike in Mini vMac 3.4.1, where the same assembly language code is used). A possible solution is to use the same compiler, by making gcc cross-compilers. This may be easier said than done.
Some more software is now hosted by the Gryphel Project instead of only linked to: Manual Maker.
December 4, 2016
In the latest Mini vMac Development source snapshot, the build system is updated to allow compiling a version emulating a Macintosh Plus on OS X Intel (using C code for the CPU emulation) that is about as fast as in Mini vMac 3.4 (which has hand tuned assembly for CPU emulation), or compiling a version emulating a Macintosh II about as fast, whereas Mini vMac 3.4 is much slower emulating the Macintosh II (since there is no hand tuned assembly for the 68020 CPU). The build system only generates the special compiler options for the specific compiler version I use (and use for the Variations Service), since verifying that they work and work well for all possible versions of gcc would be extremely time consuming. For other compiler versions, with only the more generic options, it will work, but may not be quite as fast.
But most of the work this week was in further refinements of lazy evaluation of the condition code register, and in numerous other tweaks to improve the code generated by the compiler.
November 27, 2016
The latest Mini vMac Development source snapshot continues work on the C language version of CPU emulation.
With further refinement, the code using lazy evaluation of the condition code register is of similar speed on x86 to the code using immediate evaluation. So I have removed the immediate evaluation code, because I think lazy evaluation is a better match for the C language.
November 20, 2016
In the latest Mini vMac Development source snapshot, I've experimented with seeing how much faster I could make the C language version of the CPU emulation if I didn't worry about keeping the assembly language versions compatible.
The first particular change that made the assembly language incompatible was to the disp_table array set up by M68KITAB.c, merging the Address Mode and Argument Kind fields. So instead of the CPU emulation having one switch for decoding addresses, and a second switch for getting or setting, there is a single switch that decodes and gets, or decodes and sets. Making the code less compact, but faster. (That’s the basic idea, there are a few complications.)
The C version is now nearly as fast as the x86 assembly (with a particular compiler and compiler options). Of course the same changes could be made to both assembly language versions making them faster yet, but that would take a very long time. Instead I've removed the assembly language to allow faster progress.
So now Mini vMac is a bit slower on x86-32 and PowerPC, but on the other hand, it should be faster elsewhere. And the Macintosh II emulation should be faster. (The assembly language was for 68000 only.)
Some more software is now hosted by the Gryphel Project instead of only linked to: Address Notebook and eDoc.
Thanks to Donovan Preston for sponsoring over 2 months of web hosting for the Gryphel project.
November 13, 2016
The latest Mini vMac Development source snapshot has a new build option to not grab the keyboard in Full Screen Mode.
Normally, when in Full Screen Mode, Mini vMac will try to “grab” the keyboard, preventing the operating system from intercepting keys. So in the Windows version, the ‘windows’ key can be used as an ‘option’ key, instead of popping up the “Start” menu. And in the OS X version, Command-Tab won't switch away from Mini vMac. This is also implemented in the X version. There is a new build option, -gkf 0”, that disables grabbing the keyboard, allowing the operating system to intercept keys when Mini vMac is in Full Screen Mode. This was requested by a maintainer for “Rocket Launcher”.
Mostly, this week I was contemplating C compilers. On further testing, the GCC 4.7.4 C compiler I compiled last week produces a significantly slower Mini vMac than the much older version I having been using, and I haven't found any way to improve it. One particular problem is that it seems to be more conservative about “-mpreferred-stack-boundary=2”. So with the best compiler tried so far, at best the C language version is about two thirds as fast as the assembly language version, which I don't find satisfactory.
November 6, 2016
In the latest Mini vMac Development source snapshot, the C language version of 680x0 emulation is roughly 10 percent faster, at least with the old GCC compiler I develop with (from an old Xcode). Changing the command line arguments can get a bit faster yet. (The changed arguments are not yet in the Mini vMac build system.)
The motivation was that, last week as I was setting up to make changes to the PowerPC assembly language to match changes previously made to the C language and X86 language version of the 680x0 emulation, I had doubts whether it was good idea. Assembly language programming is fun, but slow. Keeping 3 versions of the 680x0 emulation in sync slows progress by more than a factor of 3. Eventually adding versions for ARM and x86-64 would make things worse. And adding support to the assembly language for 68020 for faster Mac II emulation doesn’t seem feasible.
The assembly language versions are barely twice as fast as the C version in Mini vMac 3.4.1. Perhaps with some further tweaking and using a more recent compiler, the C language version could be made almost as fast, and the assembly language could be removed, allowing faster progress.
Last week’s experiment with lazy flag evaluation wasn’t very successful, but this week an assortment of tweaks has made a significant difference. The main one is to use tables of function pointers rather than switch statements in a number of places. Another was to fiddle with the flag evaluation code. (Also there is now a more careful distinction between 0/1 and boolean variables. Previously Mini vMac wouldn’t work correctly if a compiler didn’t represent "true" as 1. I don’t know if it works now, I haven’t encountered such a compiler, but now it might.)
Also this week, I managed to compile GCC 4.7.4 (the final version implemented in C rather than C++) in OS X, using the GCC compiler in X code 4.1. It doesn’t immediately seem to result in a faster Mini vMac, but it has some additional options that could be useful. More interesting is the possibility of compiling cross-compilers.
A motivation for the assembly language was that anyone can compile Mini vMac with whatever compiler and get nearly identical performance, as the cpu emulation is the same. But with the Variations Service, I consider this less important now. I mostly only need to worry about the performance of the compilers that I use. This is further simplified if I mostly use one compiler, which can be compiled for many different targets, as GCC can. It is still important that Mini vMac can be compiled with any C compiler, the result just may not be as fast.
Some more software is now hosted by the Gryphel Project instead of only linked to: Network Calender and HappyPlusClock. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: Birthdays and Such and EZCalendar.
October 30, 2016
The latest Mini vMac Development source snapshot has an experiment in “lazy evaluation” of the condition code register in the emulation of the 680x0. It can be enabled by setting HaveLazyFlags to 1 in “EM68KGEN.c” So far it doesn’t seem to demonstrate the hoped for benefits, but there is more to try.
Some more software is now hosted by the Gryphel Project instead of only linked to: Big Al Address Book. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: HQXer and PopAddress.
October 23, 2016
The latest Mini vMac Development source snapshot has a couple bug fixes in the x86 assembly language version of the CPU emulation, which makes it work properly with testing code that scrambles the mapping between emulated memory. So the new more careful boundary checking code may be working as intended. Next up is making the same changes to the PowerPC assembly language version of the CPU emulation.
I was traveling again this week, limiting time for Mini vMac. No further significant travel is planned until May.
Some more software is now hosted by the Gryphel Project instead of only linked to: yEnc TZ, MacLHA, and StUU. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: MacUnRAR.
October 16, 2016
The latest Mini vMac Development source snapshot finishes work improving instruction fetching in the x86 assembly language version of the CPU emulation, to match previous work in the C language version.
Then I wondered if this more careful code works as intended, so I wrote some testing code that scrambles the mapping between emulated memory (for RAM and ROM) and real memory, splitting it into two sets of interleaved blocks (in effect toggling one bit of the address). Which exercises all the new boundary checking code. With a number of bug fixes, using the C language implementation of the CPU, it all worked. But with the x86 assembly language version it doesn't, yet. There is more debugging to do.
A problem reported by Tim in the Cocoa version in OS X 10.11 may be fixed, where entering Full Screen mode didn’t work.
Some more software is now hosted by the Gryphel Project instead of only linked to: DoBinHex DropTool, DeBinHex DropTool, DeHQX, MacBinary II+, and Decode Apple File.
October 2, 2016
(No news is expected next week due to travel. Work should resume the week after.)
In the latest Mini vMac Development source snapshot I’m about half way through improving instruction fetching in the x86 assembly language version of the CPU emulation, to match previous work in the C language version (described two weeks ago). This first half has the most time critical parts, and so far there is no noticeable loss of speed, as accuracy and safety is improved. (There is no known corrrectly functioning software where this greater accuracy matters. But I would prefer that Mini vMac never crashes no matter what.)
Some more software is now hosted by the Gryphel Project where the original web pages have disappeared: ZipIt, CPT2SIT, and NoComment.
September 25, 2016
This past week I’ve worked on the website, making it more Mobile-Friendly, all several hundred pages of it.
The simpler part of this was to include on every page the magic
<meta name="viewport" content="width=device-width, initial-scale=1">
which makes mobile web browsers do what they should have done in the first place. But since many web pages aren’t designed for small screens, mobile broswers do some hacks to make such pages usable, and need to be told such hacks aren’t needed.
The bigger task to was remove any remaining multi column layout, getting rid of all the newfangled <table> tags (added to html mid 1990’s). Besides more Mobile-Friendly, it should also work better on the old web browsers that run on a Macintosh Plus, which also has a relatively small screen.
Some more software is now hosted by the Gryphel Project instead of only linked to: ClipStation, Fix Icons, MacTar, and MacGZip. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: Clipboard Master and Coffee Break Lite. This one has a web page, but not with the old Mac version: PopChar Lite.
September 18, 2016
The latest Mini vMac Development source snapshot improves instruction fetching. A badly behaved program can cause Mini vMac to crash, attempting to fetch an emulated instruction from random memory, which memory protection on a modern computer prevents. Since this is only a bad read, I don’t think any further harm is possible besides crashing Mini vMac. Most kinds of memory access emulated by Mini vMac have for a quite while have been designed to always be accurate and safe. But for speed, fetching the next instruction would simply increment a pointer to where the instruction is in real memory, and relative branches would just offset this pointer. Only for certain long branches would Mini vMac work out from scratch where the instruction is in real memory. This is good enough for all known correctly working software. But it is in theory possible to write code so that the pointer to the next instruction gets set to arbitrary memory that the operating system may not allow Mini vMac to access, resulting in a crash. And not just in theory, I have seen this happen in programs running in Mini vMac that were malfunctioning.
This bug is fixed by keeping low and high limits for the instruction pointer, and checking against them as the pointer is changed. When fetching the next instruction, it only needs to check against the high limit. And the increment and check is done after the current instruction is fetched, and so it could be done in parallel with other things. A modern computer can do several things at once as long as they don’t interfere with each other. So it shouldn’t affect speed too much.
Actually, at first it slowed things down a lot. But then I figured out it was because the compiler I use for development messed up with the C inline directive. I figured out how to get the compiler to inline if and only if I tell it to, which gained back all speed lost, and a little bit more. So now the build system defined macros MayNotInline or MayInline are used for every function in Mini vMac.
The ability to turn off USE_POINTER and FastRelativeJump for greater accuracy is removed from the source code, since they are now always accurate and safe.
These changes have only been made in the C implementation of CPU emulation so far. The PowerPC and x86 assembly languages versions are to be fixed next.
The same thing has been done to the assembly language source as previously was done API, sound, and language sources. They have been given unique names and moved to the main source folder. (Which has been renamed from “c_src” to “src” since it is no longer just C.) Also, instead of the build system transforming the PowerPC code for MPW, there are two PowerPC versions, and some scripts (in the new file “trans”) to help keep them in sync. The idea being moved to is that the build system only generates configuration files, and the source folder is the source, basically the same in the source archive and when being compiled.
The motivation for working on the CPU emulation is that I would like to make assembly language versions for ARM and X86-64, but there are issues, such as today’s safe instruction fetching, that would be a lot easier to deal with first, before there are more versions to keep in sysnc.
Some more software is now hosted by the Gryphel Project instead of only linked to: Folder Icon Cleaner, PrefsCleaner, ClearRes, and Alias Crony. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: PowerPCheck, StripPPC, and DoDelete.
September 11, 2016
The latest Mini vMac Development source snapshot has some further work on the SDL 2.0 port. Like other ports, there are now separate magnify states for when in full screen mode and when not. And when first entering full screen mode, the magnify state is set automatically depending on the screen size. A new feature only in the SDL port so far is that using the scroll wheel of the mouse acts as if arrow keys are pressed, giving roughly the expected behavior of a scroll wheel.
MiniUnZp has been updated to add a reasonable ‘SIZE’ resource so that it can operate with non trivial archives. Also it will now translate the Unicode file names written by OS X into the MacRoman character set. MiniUnZp is still extremely preliminary, but I find it useful.
Some more software is now hosted by the Gryphel Project instead of only linked to: QDvorak, Super Comments, Snapshotter, FCB Inspector, and Disk Charmer. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: MediaSizer and AppDisk.
Thanks to Donovan Preston for sponsoring over 3 months of web hosting for the Gryphel project.
In related news, John Sharp has been using Mini vMac to help with Bare-metal Macintosh Programming. One thing to be aware of is that Mini vMac in general does not attempt to be a complete emulation of the Macintosh hardware, but only emulates the parts of it that are used by Macintosh software. Often, but not always, it will give warning when the software attempts something that hasn't been implemented. But even with this limitation, it seems that Mini vMac is of some use for this project.
September 4, 2016
The latest Mini vMac Development source snapshot has some further work on the SDL 2.0 port. Like most other ports, it can now use the ROM image at a central location, looking in a folder named “mnvm_rom” in the folder that SDL_GetPrefPath returns. What SDL_GetPrefPath returns depends on the platform, on OS X it returns “~/Library/Application Support/gryphel/minivmac”. (Not that SDL for OS X really matters for Mini vMac, since a native port already exists. All the work with SDL is to help port Mini vMac to new platforms.)
Also added to the SDL 2.0 port is the option to let SDL handle scaling (for drawing in Magnify Mode), rather than code in Mini vMac. So whichever version works better can be chosen when using the SDL port to make a more native port of Mini vMac for a particular platform.
Recently I had allowed the Macintosh II emulation to boot in color, since it seemed to work now. But now I found that this may not work for color depths of thousands or millions, and so disabled it again in those cases. This only affects booting, soon after the color mode is changed to the value saved on disk.
The Mini vMac build system has been updated to match source shared with the Mini vMac extras. One (obscure) bug fixed by this is where the Export command would not overwrite an existing file (after the Standard Put File dialog asks if you want to replace it).
There is a new version of ExportFl. The URL is updated, and source shared with other Mini vMac extras, fixing one bug, it should now not crash in other emulators such as SheepShaver (though it still won't do anything useful)
On the page about MPW tools for Mini vMac, I've added example scripts for using SetHTC and CatHTC to Copy/Paste the host clipboard.
Some more software is now hosted by the Gryphel Project instead of only linked to: Joliet Volume Access and Alias Dragon. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: Disk Rejuvenator, Better Edit Keys, and KeySwapper.
August 28, 2016
Tara Keeling has created a Nintendo 3DS port of Mini vMac. It was announced in this GBAtemp.net post. There is an article in Mac Rumors about it.
Mini vMac 3.4.1 is now officially released (with no change from the final beta, as usual). The Changes file lists what has changed since Mini vMac 3.3.3. I’ve been using the OS X version extensively the last couple months without problem.
Today’s Mini vMac Development source snapshot has some further work on the SDL 2.0 port. It can optionally use the SDL_RWops for file operations instead of C library routines. It will now ignore command line arguments starting with “-psn”, which on OS X allows it to be launched by double clicking without getting an error message. (Previously it had to be launched with the command line on OS X.) Also in the OS X version, in the “Info.plist” file it uses the key “SDL_FILESYSTEM_BASE_DIR_TYPE” with value “parent”, so that Mini vMac will looking for the ROM image and other files in the folder containing Mini vMac, like in most other ports.
There is a new version of ImportFl, that fixes a bug where where it would not overwrite an existing file (after the Standard Put File dialog asks if you want to replace it). And the URL in the about dialog has been updated. Also, source shared with other Mini vMac extras has been updated, fixing a couple other bugs: ImportFl should now not crash in other emulators such as SheepShaver (though it still won't do anything useful), and it can save to MFS volumes, when the computer supports HFS (previously it had the wrong test, and would support MFS only on computers that didn't support HFS).
For anyone using Macintosh Programmer’s Workshop, I’ve made public some MPW tools for Mini vMac (that I’ve been using for a long time, and have now updated and cleaned up a bit).
Some more software is now hosted by the Gryphel Project instead of only linked to: Text Capture FKEY, DiskTracker, DiskTop, and FaberFinder. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: AppSizer, and Custom Launcher,
August 21, 2016
Today’s Mini vMac Development source snapshot can use a ROM image for Steve Chamberlin’s Mac ROM-inator (which replaces the ROM of a real Macintosh Plus or Macintosh 128K with a megabyte of flash memory, and is a descendant of earlier work by Rob Braun).
Two new options make this possible. “-rsz” allows you to set the size that Mini vMac expects the ROM image to be. (The build system will normally select the correct ROM Size for the Macintosh model you have chosen to emulate.) And the option “-chr 0” prevents Mini vMac from checking the ROM checksum. The first 4 bytes of a Macintosh ROM contain a checksum of the remaining bytes, and there is code in the ROM to check the checksum on boot. Mini vMac patches the ROM image, so it disables this checking code. Mini vMac does the check itself before patching the ROM. It also checks that the 4 byte checksum matches one of the known ROM images for the model you have chosen to emulate. This option disables these checks.
Another new option could be useful with a Mac ROM-inator image. “-drc 0” prevents Mini vMac from disabling code in ROM that checks the ROM checksum on boot. If you are using a ROM image with Mini vMac that is already patched, this check may already be patched out. In that case Mini vMac doesn't need to, and probably shouldn't, to avoid interference in case a different method of patching out is used.
The new option “-drt 0” prevents Mini vMac from disabling code in ROM that tests proper operation of RAM at boot. Mini vMac normally patches the ROM to disable this test, to speed up booting. For greater realism, you can leave this test in.
Some other existing options could also be useful for testing a Mac ROM-inator image with greater realism: “-speed z -ta 2 -sony-sum 1 -sony-tag 1”.
Even if you are not using a Mac ROM-inator image, you can still use one it’s features - replacing the “Happy Mac” icon displayed on boot when a disk is inserted. The new option “-ahm” patches the standard ROM with one of 15 replacements icons by Steve Chamberlin (used with permission).
Some more software is now hosted by the Gryphel Project instead of only linked to: FKeyDragger, FKEYRunApp Maker, Function Key Enabler, FKEY Display, FKEYZoom, Heap Size FKEY, and David's FKEYs. (The original web page for FKeyDragger has disappeared.)
August 14, 2016
Today’s Mini vMac Development source snapshot no longer gives an abnormal report upon booting the Macintosh II emulation with System 7.5.5. Recently I had added reports for unrecognized calls to the video driver, but hadn't tested it with System 7.5.5. The Basilisk II source code indicates what the calls are, but I haven't implemented them yet. I just make the driver return an error quietly, for these specific calls, which is valid to do (i.e. emulating an older display made before these calls were defined).
Also in the video driver, I put some error checking into the recent implementation of indexed SetEntries.
There are some further improvements to the SDL 2.0 port. It now uses it now uses the function SDL_GetBasePath for the directory to look for the ROM image, and the disk1.dsk, disk2.dsk, etc. images. It also now supports the same“-d” and “-r” command line options as the X ports. And there is the option to use SDL_Log for logging, instead of using C standard library file calls.
For convenience when developing Mini vMac, the build system now has an “-all-src 1” option to include all source files. The build system normally selects a subset the source files needed to compile the requested variation. All source files now have unique names, rather than have multiple files with the same name in different folders in the source archive, for choices of API, sound API, and language.
There is now ROM Formatting Information for both versions of the Macintosh 128 ROM and two versions of the Macintosh Plus ROM, which are now listed on a separate page from the main FDisasm page. This is made possible by recently developed techniques for keeping information for similar ROMs in synch.
Mini vMac is reported to work on a Pocket C.H.I.P. (which combines the $9 C.H.I.P computer with a mini touchscreen, keyboard, and batttery).
Jesús A. Álvarez (Zydeco) updated his iOS port of Mini vMac to the 3.4.1 beta (on June 28th).
I’ve added the “Vintage Apple Computers” and the Classic Mac Gaming subreddits to the list of Gryphel Related Forums.
Some more software is now hosted by the Gryphel Project instead of only linked to: ICtoPCexchange, Carpetbag, TTConverter, ViewFont, MacFont, FindFont, and Keyboard Switcher. (The original web page for ViewFont has disappeared.)
August 7, 2016
Today’s Mini vMac Development source snapshot merges in further changes by Matěj Hybler to use an even earlier ROM from the “Twiggy” prototype Macintosh.
The build option is -m Twig43”. (Near the end of the ROM is the string “ROM4.3T 07/04/83”.) Again, this is not an officially supported option, advanced users can compile this version if they want to try it.
And also in today’s version, the SDL 2.0 port now supports importing and exporting the host clipboard (using ClipIn and ClipOut), like most other ports. This includes code for converting between the MacRoman character set and the UTF-8 that SDL expects.
Some more software is now hosted by the Gryphel Project instead of only linked to: Internet Config, and Link GURL Handler. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: Where Is My Master, touch, Clipping Converter, FakeIt!, and ICtoAFS.
Thanks to Thomas Chan for sponsoring the Gryphel project, including web hosting.
July 31, 2016
Today’s Mini vMac Development source snapshot merges in changes by Matěj Hybler to support the ROM from the “Twiggy” Macintosh. This is a Macintosh prototype that has a Twiggy floppy drive (used in the original Lisa computer), instead of the Sony drive that the Macintosh 128K ended up shipping with. Except for the disk driver, the ROMs are nearly identical, except most everything is shifted to somewhat different addresses. Probably because the trap patching technique used in Macintosh System Software tends to depend on exact locations of routines in ROM, no System Software that shipped will run with the Twiggy ROM. There are two known disk images that will work with it, one with an early version of MacWrite and one with an early version of MacPaint. However these image don't currently work as is in the Twiggy Mac emulation. Matěj Hybler figured out a small patch to their boot block code to make them work, that disables some sort of check for the disk being bootable. This might be needed because the emulation is still using a replacement disk driver that is trying to imitate the data structures in memory used by the Sony disk driver, while the Twiggy disk driver has significantly different data structures. (With this patch, these two disk images will also work fine in the Macintosh 128K emulation.)
The build option is -m Twiggy”. (This is not an officially supported option, advanced users can compile this version if they want to try it.)
Formatting information for the Twiggy ROM has been added to the FDisasm page. In the process, I created a bunch of quick and dirty tools to make it easier to synch formatting information for multiple similar ROMs, which could make it possible to do things like provide formatting information for all 3 versions of the Macintosh Plus ROM.
Another change in Today’s snapshot is that in the Macintosh II emulation, when compiled with color (color depth not black and white), the initial value in the Parameter RAM is now set to boot in color. So the initial picture is in color. (Soon after, the color mode is changed to the value saved on disk.) This didn't use to work, which is why it was previously set to boot in black and white. It seems to work now, for reasons not investigated yet (probably one of various fixes to video emulation).
The latest version of FDisasm adds the ability to format jump table offsets as the difference between two symbolic labels (instead of only listing the numeric value). Mac Plus formatting information has been updated to take advantage.
Some more software is now hosted by the Gryphel Project instead of only linked to: Zoomie, MenuSnap, Replace, Text Editor Patches, OtherMenu, SieveAhl, Natural Order, Desktop Valet, Alias Assistant, and Save a BNDL. And some software is now hosted by the Gryphel Project where the original web pages have disappeared: Folder Jumper, QuickScrap, ScrapIt Pro, TypeSaver, TakeABreak, and AliasZoo.
July 10, 2016
In today's Mini vMac Development source snapshot, the video driver in the Macintosh II emulation now implements indexed SetEntries. This is used by the game Crystal Quest (which by the way requires color depth to be 16 colors). Also for non-indexed SetEntries, the driver now returns the no error code. (Apparently this error code is not usually paid attention to.) And also more abnormal reports and debug logging have been put in this code.
In other news, there is a new version of FDisasm that has initial support for FPU instructions, sufficient to correctly disassemble the Floating-Point Arithmetic Package (PACK 4) of the Macintosh II ROM (verified with the MPW Assembler). The disk image with the Mac II formatting information has also been updated.
Some more software is now hosted by the Gryphel Project instead of only linked to: Al's snd INIT, NudgeMouser, Startup Player, DragAnyWindow, NoDesktopCleanup, Shutdown Delay, MenuBall, and PowerClicks. (The original web pages for all except the first two have disappeared.)
June 27, 2016
Today’s Development source snapshot is the start of the 3.5 branch. It might fix graphics problems that have been reported in Linux. I suspect that passing single bit per pixel images to the operating system to draw is not reliable, in at least some versions of Linux, with at least some hardware. So now, for Linux and other X versions, Mini vMac will always pass 32 bit per pixel images to the operating system, even for black and white images. This could potentially be much less efficient, so there is a new compile time option to behave as before for black and white only emulation, “-ci 0”, which you can use if there wasn't any problem in Mini vMac 3.4 and earlier.
In other news, there is a new version of FDisasm that can correctly disassemble the Macintosh II ROM. (MPW Assembler gets back the original binary.) Except that the Floating-Point Arithmetic Package (PACK 4) is not disassembled because FPU instructions are not yet handled. The disk image with the Mac II formatting information has also been updated.
Some more software is now hosted by the Gryphel Project instead of only linked to: FileTyper, Odd Jobs, QuickPop, DarkSide of the Macintosh, BugOff, DeskPicture, and SoundMaster. (The original web pages for BugOff and DeskPicture have disappeared.)
OLD NEWS - Previous release notes