Ahh, the fond memories. MASM 6.11d (yes, 'd') was the first really stable and usable version of the MASM 6 family. A major upgrade, it added strong/weak externals (the foundation of Phoenix's TrustedCore build system), support for C-style calling convetions, stack variables and several high level constructs, such as .while, .if, .repeat and invoke. It was also a quirky beast whose macro language could drive the most stable engineer to tears trying to figure out when to use %.
Subsequent versions of MASM went on to add support for later processors (6.12 - 6.15), but they also added a strange incompatibility with the way strong/weaks and PUBLICs interacted which made it unusable. Sadly, as of February 2000, it was no longer available as a commercial product. Desperate BIOS engineers pled with Microsoft customer service people to send them just one more copy. Wiser birds found that you could buy "Assembly Language For Intel-Based Computers" by Kip R. Irvine, but only the 3rd edition. The 5th edition comes with MASM 8.
Fortunately, TrustedCore moved on to MASM 8 last year. But that led to a different problem: finding a linker that worked under 64-bit Windows. Despite using the new MASM 8, we still needed a linker that spoke 16-bit OMF. The old MASM 6.11 linker worked fine but (a) can't buy it either and (b) it was a 16-bit EXE that didn't run under 64-bit Windows. Fortunately, it turned out that the last linker shipped with 16-bit Visual C++ (1.52) was a 32-bit EXE (pheww!) and it almost worked. Turns out that, just before ship, Microsoft added a few bits which threw off the compatibility with older 16-bit linkers. With the help of a few Microsoft engineers, we located a version that fit the bill.
So, MASM is dead. Long live MASM...
Tim



"Fortunately, it turned out that the last linker shipped with 16-bit Visual C++ (1.52) was a 32-bit EXE (pheww!) and it almost work."
In fact, the reason it can run under DOS in the first place is because it used the Phar Lap TNT DOS extender, and that reminded me of something else, unfortunately the original post that had the link got filtered as spam.
Posted by: Yuhong Bao | October 13, 2008 at 10:16 PM
"Fortunately, it turned out that the last linker shipped with 16-bit Visual C++ (1.52) was a 32-bit EXE (pheww!) and it almost work."
Yep, the reason it ran under DOS is that it used the Phar Lap TNT DOS extender.
BTW, I once wrote this:
http://groups.google.com/group/microsoft.public.vc/browse_frm/thread/21effc0148b27b29/67044de9f977d99e?lnk=st&q=visual+c%2B%2B+masm+fortran+powerstation#67044de9f977d99e
Posted by: Yuhong Bao | October 13, 2008 at 09:54 PM
"Fortunately, it turned out that the last linker shipped with 16-bit Visual C++ (1.52) was a 32-bit EXE (pheww!) and it almost work."
Yep, the reason it ran under DOS is that it used the Phar Lap TNT DOS extender.
BTW, I once wrote this:
http://groups.google.com/group/microsoft.public.vc/browse_frm/thread/21effc0148b27b29/67044de9f977d99e?lnk=st&q=visual+c%2B%2B+masm+fortran+powerstation#67044de9f977d99e
Posted by: Yuhong Bao | October 13, 2008 at 09:54 PM