home *** CD-ROM | disk | FTP | other *** search
-
- July 1987
-
- The History and Technology
- of TSR Terminate and Stay Resident software
-
- by
- Steve Gibson
- InfoWorld TechTalk Columnist and
- President of Gibson Research Corp.
-
-
- HISTORY BEGINS
- ----------------------------------------------------------------
- Once upon a time a Big Blue company named IBM decided that it
- wanted to make personal computers too. For reasons known only
- to the Gods of Boca Raton Florida, IBM decided to use the 8088
- microcomputer from Intel rather than Motorola's vastly "cleaner"
- 68000 (as is used in Apple's macintosh). Viewed in retrospect,
- this has turned out to be a ridiculously expensive, i.e. WRONG,
- decision. But anyway... IBM journeyed to the West to get its
- software for this new machine.
-
- IBM first visited the company who was then the acknowledged king
- of operating systems, Digital Research, Inc. DRI had developed
- CP/M, the defacto standard operating system for the very popular
- 8080 and Z80 microcomputer systems. IBM explained that it
- needed an operating system for the new 8088 microprocessor in
- their new, blue, personal computer and asked if DRI would please
- provide them with one. DRI said, quite truthfully, that they
- didn't have one. Big blue must have then asked if they would
- like to make one, to which DRI must have again said: "No
- thanks."
-
- IBM shrugged and headed North. . . . .
-
- Though IBM may have only planned to ask Microsoft for an 8088
- BASIC language interpreter for their new machine, they found
- themselves in Washington without an operating system. Microsoft
- said they would be pleased to provide IBM with both an 8088
- operating system and the BASIC language interpreter. IBM said
- "Thank you" and said they needed it very soon please.
-
- But Microsoft didn't have an 8088 operating system either, and
- being so very much smaller then than now, didn't have the
- resources to build one from scratch by IBM's deadline. So they
- found an even tinier company called Seattle Computer who had
- built a little unpretentious operating system for the 8088 and
- 8086 micros called 86-DOS. It was also known by some as QDOS.
- QDOS was said to stand for Quick and Dirty Operating System.
-
- So Microsoft, then able to meet IBM's 8088 machine timetable,
- delivered both an operating system (albeit one of unassuming
- parentage and questionable virtue) and a BASIC interpreter.
-
- Everything seemed fine until we all began really using the new
- operating system. We wanted additional and rather reasonable
- things from MS-DOS and PC-DOS. Things which had not been
- designed into 86-DOS, like printing in the background while the
- user was doing other things. Or supporting RS-232 serial
- printers, which required routing the printer data out through a
- serial port instead of the normal parallel printer port.
-
- To meet these reasonable demands Microsoft made a series of
- small changes and additions to the guts of MS-DOS which allowed
- extra "add-on" code to be "hung" onto the outside of MS-DOS and
- also provided for limited communication between DOS and the add-
- on code. Microsoft's idea was that these MS-DOS limitations
- would be "fixed" by writing some new DOS commands (in the above
- examples PRINT and MODE) which would make use of special
- undocumented aspects of their latest version operating system.
-
- The problem was that MS/PC-DOS, still really old 86-DOS (QDOS)
- in disguise, was never built to support multitasking. This
- means that it was never meant to serve more than a single master
- at a time. A command like PRINT, which can continue to operate
- even AFTER the user has begun doing something else, could very
- easily confuse it, since now there could be service requests
- coming into MS-DOS from two quite different places at once.
-
- Since this began making the entire operating system rather
- fragile and weird, Microsoft's grand plan was to retain all
- these special hooks and communications paths as a company
- secret. They figured that as long as they were the only ones to
- use these new MS-DOS secrets things wouldn't get out of hand.
-
- But Microsoft must have gravely underestimated the cleverness
- and determination of the development community. When the MODE
- command proudly stated: "Resident portion installed" developer's
- eyebrows shot up! RESIDENT portion? Hmmmmmm. And if the PRINT
- command could access the disk for file printing when we were
- messing around with a spreadsheet, why couldn't we build a
- little resident notepad or two, too?
-
- But EVEN after these new resident goodies began appearing in
- increasing numbers, Microsoft refused to "disclose" anything
- whatsoever. They said they "couldn't" document these things or
- they'd be forced to make all FUTURE versions of the operating
- system support them in upwardly compatible fashion. Since these
- were awkward "kludge" solutions to the real need for a true
- multitasking operating system, Microsoft's delicate condition
- can be readily understood.
-
- However, developers sensing massive market opportunities were
- not to be stopped. Debugging software which allowed programmers
- to peer inside the still working machine sold like wildfire.
- Using these debuggers (like PERISCOPE, my personal favorite),
- developers probed into the very heart of Microsoft's own PRINT
- and MODE commands, unscrambling and deciphering the undocumented
- secrets of their operation. Using the same secrets Microsoft's
- own developers had used, they learned how to give their OWN
- programs similar capabilities.
-
- In an old episode of Star Trek, Mr. Spock said, after capturing
- the Romulan's cloaking device, "...military secrets are the most
- fleeting of all, Commander." This applies equally well to
- technological secrets in general, and as we've seen, to Resident
- Software in particular!
-
- It's unfortunate that Microsoft did not have time back then in
- the beginning to build their own DOS from scratch. They might
- have done it right. But we're stuck with what we have today,
- and making the most of it is certainly our best strategy.
-
- It remains unfortunate, though certainly understandable, that
- Microsoft isn't willing to disclose the details of MS-DOS's
- resident software hooks and techniques. This policy keeps such
- knowledge quite secret, since even the third-party developers
- are reluctant to disclose their own hard-won "insider's"
- knowledge and proprietary techniques for forcing reliable
- multitasking behavior from good ol' single tasking DOS. It's
- quite interesting to speculate that perhaps today even Microsoft
- does not KNOW how to write MS-DOS multitasking applications as
- well and robustly as several of the larger commercial resident
- software publishers! The tricks required to make DOS multitask
- are real nasty stomach-turners.
-
- So... what are these tricks and techniques? How DO resident
- programs "pop up over" applications at the simple press of a
- "hot key"?
-
-
-
- THE TECHNOLOGY OF RESIDENT SOFTWARE
- ---------------------------------------------------------------
-
- Since we've now know how we got to wherever it is we are, let's
- answer the those questions posed above....
-
- Two things are required for the functioning of TSR technology:
- First, the TSR program needs to somehow "hang around" well after
- any other program has started to run. Secondly, it has to
- "know" what's going on in the system to be able to jump in and
- help out when called upon for action. It also needs some way of
- re-assuming control of the machine when the time comes for it to
- take action.
-
- The requirement of continuing RAM residency is satisfied by a
- service provided by the operating system from which TSR's get
- their name: Terminate and Stay Resident (TSR).
-
- The main operating RAM memory of an IBM compatible PC is a
- contiguous block beginning at address zero (called the bottom of
- RAM memory) and extending "upward" for a maximum of 640K bytes
- (called the top of memory). Note that 640K is actually 655,360
- bytes since "Ks" in computerdom are really 1024 bytes, not 1000.
- Since the very bottom of this large contiguous block of RAM is
- reserved for system housekeeping purposes, DOS is "booted" by
- copying it from disk into RAM just "above" this low-RAM region.
-
- Once DOS has been loaded, all the space "above" it, to the top
- of RAM, is available for application program loading and use.
- We'll call this location just above DOS the LOAD POINT for
- application software. So, when a program is started, it is
- copied from disk into RAM starting at this LOAD POINT,
- continuing upward until the entire program has been loaded. The
- memory available, and allocated, to the program for its own data
- storage and manipulation extends from the end of itself to the
- physical top of the RAM memory.
-
- Most standard programs word processors, spreadsheets, or
- databases have "control" of the computer until the user tells
- the program to terminate. After performing whatever cleanup and
- file saving might be required, the program simply informs DOS
- that it is all finished by saying the equivalent of "I'm all
- finished now, terminate me please".
-
- Responding to this "Terminate" request from a program, DOS
- simply "forgets" all about the program and whatever data it
- might have had in RAM. It displays the command line prompt and
- awaits another command. The next program to run is loaded at
- the same LOAD POINT as before, thus overwriting whatever
- terminated program was just running, and implicitly making the
- same amount of memory available to this next program.
-
- Now consider the special case of the RESIDENT PROGRAM...
-
- It begins innocently, just like any other application program,
- when its name is typed at the DOS prompt. DOS copies it from
- disk into the user's RAM memory starting at the same LOAD POINT
- as any prior application software, implicitly leaving the rest
- of RAM memory for the program's own use until done, then hands
- control of the computer system over to this program.
-
- Now things start getting interesting!
-
- The resident program will generally say hello to the user
- announcing its intention to hang around for the duration. Then
- it does a few "non-standard things" to the system. These are
- the very things MICROSOFT wanted to keep all to itself. These
- special "things" keep the program from being ex-communicated
- from system activities after it terminates. Then, rather than
- simply saying "terminate me" to DOS, it says: "I'm xxx bytes
- long. Now terminate me but DON'T OVERWRITE ME." Which is to
- say: Terminate me, but let me Stay Resident.
-
- Upon receiving this request, DOS takes control from the program,
- moves the software LOAD POINT UPWARD by those xxx bytes, and
- only THEN returns the DOS prompt to the user. Since the LOAD
- POINT has been moved up by "xxx" bytes, all subsequent programs
- will be loaded AFTER the programs which ASKED to remain
- resident, thus leaving it undisturbed in the system's memory!
-
- Additionally, since it's the resident program which tells DOS
- how big it is, it is able to declare itself to be ANY LENGTH IT
- CHOOSES! This is how programs like SideKick, which are only 39K
- bytes long while on the disk, can have a 50K notepad file and
- take up 89K bytes while in RAM! It effectively LIES to DOS
- about how big it is, so DOS obligingly leaves it space for
- itself and for however much working memory it wants! This is
- the way resident programs are able to eat up so much of our main
- RAM memory! When this process is repeated many time (as is
- frequently the case) a resident program "stack" is created in
- main RAM memory.
-
- So, we've now seen how programs are able to remain in memory
- after being "officially" terminated. The final question is:
- How are these "terminated" programs able to remain "aware" of
- the activities around them?... and how are they able to regain
- control of the computer whenever they see fit to do so? In
- other words, how can a notepad or other utility "pop up" ?? To
- answer these last questions let's step back for a moment,
- reviewing a bit about how computer's are controlled:
-
- A computer's actions are directed by its reading of instructions
- which are stored in its main memory. These instructions may be
- temporary, as in the case of programs loaded from disk into RAM,
- or permanent, as in the case of instructions permanently wired
- into ROM chips. In either case, each instruction has a unique
- address which is just the number of the byte it occupies in the
- machine's memory.
-
- We cause the computer to perform a given task by having it read
- a series of instructions which detail the task. In a sense we
- CALL upon those instructions whenever we need to exert their
- intended function. Such a "CALLED" instruction sequence
- generally has a clever instruction called RETURN which is able
- to send the computer back to wherever it was called from!
-
- This notion of FUNCTIONS which are being performed by
- instruction sequences called upon in memory, and which will
- return to us when finished, is very powerful. IBM compatible
- computers come equipped with a BIOS ROM which contains a host of
- very useful general purpose functions which return control to
- their caller as soon as they have performed their designated
- duty. This is EXACTLY what that often mentioned BIOS ROM is all
- about! B.I.O.S. stands for "Basic Input Output System", and
- consists of a collection of standard functions for reading and
- writing to the system keyboard, screen, mass storage, and many
- other standard devices.
-
- Naturally, we must know the exact address of these "functional"
- services in order to CALL them into service. By convention, the
- starting address of every built-in function in the IBM PC is
- located in a predefined table of addresses located at the very
- start of the computer's RAM memory. Every function is numbered
- simply by the location of its address in this table. This means
- that in order to call for any built-in IBM PC function we only
- need to know its standard function number - from this we're able
- to calculate the location in the table where that function's
- starting address can be found.
-
- There's even a clever computer instruction which lets you
- directly call upon a function whose ADDRESS is stored at a
- specific location in this table. So in effect you can simply
- ask the computer to call "standard function number 7". In
- response to this function request the computer will look into
- the 7th slot in the table for the address of function number 7,
- and go there directly, returning to you when the function has
- been performed. In computer lingo, a place which contains the
- address of something else is a POINTER or a VECTOR.
-
- Even the electrical hardware of the computer is able to call
- upon these standard functions. In fact many of the standard
- functions in the ROM BIOS are designed to operate hand-in-hand
- with the PC's hardware. For example, every time a keyboard key
- is either pressed or released the standard function number 9,
- whose address is naturally in location 9 of the Address Table,
- is called upon by the hardware. This function is called EVEN IF
- THE SOFTWARE WAS BUSY DOING SOMETHING ELSE AT THE TIME!
-
- This ability of the hardware to INTERRUPT whatever the software
- might be doing at the time is called a "hardware interrupt".
- Essentially the keyboard hardware says to the processor:
-
- "Hey there CPU, hold on a second, remember where you are and
- what you are doing, now go perform the function whose address is
- in slot number 9, and when that function returns to you, go back
- to whatever is was you were doing when I bugged you just like
- nothing ever happened."
-
- This is EXACTLY how we are able to type ahead of our computers.
- Even if our spreadsheet is lost in thought recalculating our tax
- refund, we're able to type ahead of it! Each depression and
- release of a key steals a fraction of a moment, a slice of time,
- away from the spreadsheet's recalc. The function invoked by the
- keyboard's hardware interrupt places the key into a type-ahead
- buffer ... which the spreadsheet will read from as soon as its
- good and ready ... then returns control to the recalc as if
- nothing at all had happened.
-
- Now imagine what would happen if some program (like our resident
- one) were to point the POINTER stored in the 9th table location
- to somewhere else, such as to ITSELF, prior to issuing the
- Terminate and Stay Resident (TSR) request to DOS!
-
- THEN the hardware interrupt occurring at every keyboard action
- would turn control over to THIS TSR'd RESIDENT PROGRAM instead
- of to the normal built-in keyboard handling function! If the
- resident program wasn't "interested" in that particular keyboard
- action or keystroke, it could simply pass control along to the
- place where the POINTER HAD BEEN POINTING BEFORE just as if it
- hadn't been evesdropping at all! However, if the key action
- happened to be THIS resident program's assigned "HOT KEY", it
- could retain control of the system as long as it wished, before
- passing it along as if nothing at all had happened!
-
- That's all there is to it!
-
- As we've seen, the clever application of these various tricks
- and techniques can significantly expand the power and
- flexibility of MS-DOS and PC-DOS based personal computers.
-
- There are those who feel that resident software is a makeshift
- temporary solution which is not long for this world. They say
- that TSR programs will be eliminated by the presence of full
- multitasking operating systems. This author could not disagree
- more. I believe TSR programs will be here for the duration as
- necessary and viable add-ons to otherwise incomplete solutions.
-
- So there you have it. The history and technology of TSR
- Resident Software in a nutshell. I hope this gives you a better
- feel for what's going on under the hood of your machine!
-
- Thanks for listening ... and REMEMBER, if you would like to
- receive notification of other free information, software, and
- our future TSR and utility products, simply pickup the phone or
- drop us a note or a card. We'd be pleased to keep you up to
- date.
-
- Steve Gibson.
- <<< END OF FILE >>>
-