Microprocessor and IC programmers, compilers and debuggers are programs that translate high-level language codes into assembly (machine) code, or track and correct errors (bugs) in program code. Many different types of microprocessor and IC programmers, compilers and debuggers are available. Major suppliers include Microsoft, Borland, and Intel. Most microprocessor manufacturers provide in-circuit emulators for their products. Others providers include application companies that develop customizable microprocessor compiler and microprocessor debugger solutions. Developers use microprocessor and IC programmers, compilers and debuggers to build the machine language components that assemble bit patterns, or the linked bits necessary to deliver binary instructions directly to the microprocessor. Because the high-level programming languages used to create software applications are not capable of communicating directly with computer microprocessors, data is transmitted through sequenced bits of data controlled by fixed functions within transistor gates. Microprocessor and IC programmers, compilers and debuggers are capable of a process called linking, since bitwise operations aren't normally confined to those functions within applications. Most microprocessor and IC programmers, compilers and debuggers require related bitwise operations to be contained within libraries. Like library calls within high-level programming languages, a microprocessor compiler must have the ability to link to those libraries that are typically contained within an operating system (OS). One example are the *.dll (dynamic link Library) files in Microsoft Windows. Writing embedded systems applications also requires developers to use microprocessor debuggers. Most chips are equipped with diagnostic plugs that microprocessor engineers and programmers can use to detect and repair errors in their hardware and software. Microprocessor and IC programmers, compilers and debuggers are critical to producing sound computing circuitry since there is typically no way to code embedded systems to record actual functions or display the results. One example of a microprocessor debugger is the in-circuit emulator. An emulator can run programs on a "virtual" microprocessor to produce input/output and memory allocation hardware functions based on the actual microprocessor specifications and programs. It can also send commands to stop, start, or interrupt programs at given points to see the impact of sudden loss in processing power.