The in-circuit debugger utilizes special logic placed on the chip during manufacture. This extra logic allows the ICD to communicate with the microcontroller. It can halt the executing program, and allowing memory and CPU status interrogation. It allows single-stepping through the code, resulting in many ICE-like functions – only cheaper. For the ICD to operate, it uses some memory in the application, and reserves a few pins to communicate and control the target.