After years of searching for some reasonably widespread DOS application which used the CP/M-style CALL 5 interface and coming up with absolutely nothing, Jeff Parsons of pcjs.org found one: None other than Microsoft Word, specifically the spell checker in the DOS-based versions of MS Word 2.x and 3.x. These versions were sold roughly from 1985 to 1987.
What’s significant is that Word 2.x/3.x was obviously Microsoft’s own product, and was sold and supported during the years when OS/2 was in development (and OS/2 needed to manipulate the A20 line) and high memory (HMA, managed by HIMEM.SYS) was on the drawing board. Much like EXEPACK, Microsoft Word 2.0 for DOS actually post-dates the IBM PC/AT with its A20 gate circuitry. It is highly probable that no one at Microsoft even realized the dependency of the MS Word 2.x/3.x spell checker on the A20 gate until years later.
The spell checker was licensed from a 3rd party, Software Heaven, Inc. Besides the actual spell checker (SPELL.COM), there were several other utilities for anagram pattern searching (ANAGRAM.COM), word lookup (LOOKUP.COM), automatic correction (PROOF.COM), word counting (WC.COM), word search (WORDFIND.COM), and word frequency analyzer (WORDFREQ.COM). All these utilities used CALL 5. The utilities bear a 1981, 1982, and 1984 copyright, suggesting that some of the code was likely written in the very early days of the IBM PC.
It is worth mentioning that unlike EXEPACK, the spell checker used CALL 5 the whole time it was running (for input and output), not just during initialization. It was not enough to just disable the A20 gate for the first N calls. On the other hand, the CALL 5 interface works just fine with the A20 gate enabled as long as the appropriate code is copied from linear address C0h to linear address 1000C0h.
And now a trivia question: What does the CALL 5 use in MS Word have in common with the ground-breaking Dungeon Master video game? The answer is Wayne Holder, the founder and owner of Software Heaven (makers of Word Spell) and FTL Games (makers of Dungeon Master).
That’s quite a find. It’s interesting that these programs also use INT 21h for a few things (in particular to handle subdirectories) but the old CP/M CALL 5 interface wasn’t replaced with INT 21h.
Yes, it’s a mix of INT 21h and CALL 5 usage. Maybe they just figured “don’t fix what ain’t broken” and saw no reason to change the perfectly functioning CALL 5 code.
Does it appear to be programmed with assembler or with a compiler?
I’d say definitely assembler, but using a common library for all the spell checker utilities.
FYI, I’ve provided a little context about the discovery, along with a PCjs debugger you can use to examine SPELL.COM. Enjoy!
Thanks for the write-up! If only one could instantly remember everything one knew at one point or another. I know it would save me gobs of time.
One thing occurred to me… it does not seem to have been widely known at the time (’87) that the CALL 5 interface is actually easy to get working with A20 enabled, just by copying the far jump to address 1000C0h linear. EXEPACK and MS Pascal cannot be fooled so easily… but I think OS/2 also ate up enough low memory that EXEPACK et al. were never an issue.
You couldn’t just copy the far jump to 1000C0h because even in 1987 something could be using it such as VDISK. Certainly once the XMS spec appeared in 1988, programs couldn’t just blindly write to the HMA without first checking whether it was already in use or not.
I wonder if MS OS/2 2.0 development is what led to EXEPACK being fixed.
I’ve kind of found another programing that has a call 5, though not sure how poplar it was. The game Starflight, and probably the equal, has a call 5 (or rather the forth interpreter it’s running on does). While it’s actually in the engine, I’m not sure it actually gets used as the game part of the game uses int 21h, but then again the game also uses FCBs so you never know.
Do you have any idea what that Forth interpreter was? Presumably not something developed exclusively for the Starflight game?