Monitor is a piece of software within the target mcu (usually attached to the application program, but sometimes in a built-in ROM) which enables to perform the tasks which would otherwise be performed by emulator - examine and change registers (SFR) and memories (including uploading of program), single-step the program, set breakpoints, run at full speed. As it is based on software, usually it requires to "hook" on the reset vector and some of the interrupt vectors, uses up some program memory and needs also stack space and some internal and external RAM; and a "channel" how to communicate with PC, usually the UART.
To be able to place breakpoints and upload programs, it either needs a RAM which can be mapped as both MOVX and program memory, or a FLASH programmable in-application bytewise or almost bytewise. Single-stepping is usually accomplished using that feature of '51, which executes exactly one instruction if interrupt is pending after executing reti.

The advantage of this approach is its low cost, possibility to "hand-craft" the monitor according to the user's and debugged appications needs, relative platform independency both on the '51 and the PC, and (contrary to emulators (the traditional form) and simulators) it runs on the actual hardware used in production.

There are two styles of monitors around: the "full blown" type, which has the user interface built-in and needs only a terminal emulator to run (hence is PC-platform independent or even PC-independent, there are free or lowcost terminal emulators for virtually any desktop/laptop/palmtop platforms around). The second, "minimal core" type implements the GUI on the PC, leaving only a small piece of software within the target mcu.


Keil Mon51 and variants (incl. SoftICE)

TI/BB? (it's kind of a cross-over... isn't it?)