Many early systems had no internal facilities for programming, and relied on a separate "host" system for this task. This programming was typically done in
assembly language, or sometimes in
C or
PL/M, and then cross-assembled or
cross-compiled on the host. Some single-board microcontrollers support a BASIC language system, allowing programs to be developed on the target hardware. Hosted development allows all the storage and peripherals of a desktop computer to be used, providing a more powerful development environment.
EPROM burning Early microcontrollers relied on
erasable programmable read-only memory (EPROM) devices to hold the application program. The
object code from a host system would be "burned" onto an
EPROM with an
EPROM programmer. This EPROM was then physically plugged into the board. As the EPROM would be removed and replaced many times during program development, it was common to provide a
ZIF socket to avoid wear or damage. Erasing an EPROM with a
UV eraser takes a considerable time, and so it was also common for a developer to have several EPROMs in circulation at any one time. Some microcontroller devices were available with on-board EPROM. These would also be programmed in a separate burner, then put into a socket on the target system. The use of EPROM sockets allowed field updates to the application program, either to fix errors or to provide updated features.
Keypad monitors When the single-board controller formed the entire development environment (typically in education), the board might also have included a simple
hexadecimal keypad, calculator-style LED display, and a "monitor" program set permanently in ROM. This monitor allowed
machine code programs to be entered directly through the keyboard and held in RAM. These programs were in machine code, not even in assembly language, and were often assembled by hand on paper before being inputted. It is arguable as to which process was more time-consuming and error prone: assembling by hand, or keying byte-by-byte. Single-board "keypad and calculator display" microcontrollers of this type were very similar to some low-end microcomputers of the time, such as the
KIM-1 or the
Microprofessor I. Some of these microprocessor "trainer" systems are still in production today, used as very low-cost introductions to microprocessors at the hardware programming level.
Hosted development When desktop personal computers appeared, initially
CP/M or
Apple II, then later the
IBM PC and compatibles, there was a shift to hosted development. Hardware was now cheaper and RAM capacity had expanded such that it was possible to download the program through the serial port and hold it in RAM. This massive reduction in the cycle time to test a new version of a program gave an equally large boost in development speed. This program memory was still
volatile and would be lost if power was lost.
Flash memory was not yet available at a viable price. As a completed controller project was usually required to be non-volatile, the final step in a project was often to burn it to an EPROM. == Single-chip microcontrollers ==