Having a programming language is usually not enough to develop a
    program for a microcontroller.  Some way of debugging your program is
    needed.  I am only too painfully aware of this fact.

8.1) Simulators

    A simulator runs your microcontroller program on a host machine (such
    as your PC).  You can step through the code to see exactly what is
    happening as the program runs.  Contents of registers or variables
    can be altered to change the way the program runs.  Eliminates (or at
    least delays) the erase/burn/program EPROM cycle common in
    microcontroller program development.  You can work out ideas or learn
    about microcontrollers by experimenting with small code fragments and
    watching on the screen what happens.  A simulator can't support real
    interrupts or devices, and usually runs much slower than the real
    device the program is intended for.

    Some manufacturers have a cross between a software simulator and the
    hardware emulator - a hardware simulator.  This is a piece of
    equipment that plugs into your target, and the pins will toggle and
    react like they should - just MUCH slower.  Cost of a device like
    this is only about $100.  Two such boards by National Semiconductor
    and Philips are detailed in section 6.2.

8.2) Resident Debuggers

    A resident debugger runs your program on the microcontroller itself,
    while showing the progress on your host machine (such as a PC).  Has
    many of the same advantages as simulator above, with the additional
    benefit of seeing how the program runs on the real target machine.  A
    resident debugger needs to "steal" some resources from the target
    machine, including: a communications port to communicate with the
    host, an interrupt to handle single stepping, and a certain amount of
    memory for the resident part (on the target) of the debugger.

8.3) Emulators

    If you've got the money, this is the equipment you want to develop
    your system with (yeah, that's right, a preposition at the end of a
    sentence!).  A [usually] expensive piece of hardware that even for
    the cheaper versions will run you at least $700.  An emulator is a
    sophisticated device that pretends that it is the microprocessor
    itself, while at the same time capturing information.  It provides
    full and total control over your target, while at the same time not
    requiring any resources from the target.  The emulator can either be
    a stand alone device with its own display, or it can be interface to
    a PC.

8.4) Good Stereo System

    This is the most important tool for the microcontroller developer, or
    for any computer system developer for that matter.  Don't expect to
    get anywhere unless you have the proper music playing in the
    background(?) at the proper volume.  I find that I do my best work
    with the Rolling Stones (especially Goats Head Soup) or Clapton
    (especially early stuff like Cream - Disraeli Gears is a killer
    album!).  The volume must be set to cause excrutiating pain to be
    most effective.  Trust me on this ;-).

    Tom Mornini of Parallax reports:  "Johnny Cash also has a certain
    effectiveness, as well as the Beatles, Aerosmith, and Rush!  60's
    rock and British invasion bands in particular seem to have a
    particularly productive effect."

    This would be an interesting topic for an in-depth study.
    Particularly intriguing, is if certain types of music work better
    with specific [families of] processors.  Another question in need of
    study would be if it's really true that the smaller the chip (in
    bits), the louder the music needs to be.