Halt and Catch Fire

From Wikipedia, the free encyclopedia
Jump to: navigation, search

Halt and Catch Fire, known by the mnemonic HCF, refers to several computer machine code instructions that cause the CPU to cease meaningful operation. The expression "catch fire" is intended as a joke; the CPU does not literally catch fire, but it does stop functioning. It is also occasionally referred to as "SDI" for "Self Destruct Immediate".

In early CPUs[edit]

The HCF instruction was originally a fictitious instruction, said to be under development at IBM for use in their System/360 computers, along with many other amusing instructions like "Execute Programmer".

One apocryphal story about the HCF instruction goes back to the late 1960s, when computers used magnetic core memory. The story goes that in order to speed up the core memory on their next model the engineers increased the read/write currents in the very fine wires that were threaded through the cores. This worked fine when the computer was executing normal programs, since memory accesses were spread throughout memory. However, the HALT instruction was implemented as a "Jump to self". This meant that the same core memory location was repeatedly accessed, and the very fine wires became so hot that they started to smoke — hence the instruction was labeled "Halt and Catch Fire".[1]

In modern CPUs[edit]

CPU designers sometimes incorporate one or more undocumented machine code instructions for testing purposes. These instructions are not intended to be executed during real-world operation of the CPU and when they are actually executed by a program, they often have unusual side-effects.

The old "Halt and Catch Fire" instruction and HCF mnemonic are sometimes appropriated by users who discover these instructions as a humorous way of expressing that the unintended execution of such an instruction causes the system to fail to perform its normal functions.

Motorola 6800[edit]

The Motorola 6800 microprocessor was the first for which an HCF opcode became widely known. The 6800 HCF opcode is 0xDD, and came from an article written by Gerry Wheeler in the December 1977 issue of BYTE magazine on undocumented opcodes.[2][3]

The opcode makes the processor enter a mode in which it continuously performs memory read cycles from successive addresses, with no intervening instruction fetches. The address bus effectively becomes a counter, allowing the operation of all address lines to be quickly verified. Once the processor has entered this mode, it is not responsive to interrupts, so normal operation can only be restored by a reset. It has been claimed that in some configurations, a 6800 CPU could actually cause the address lines to literally burn when placed in this mode.[4] However, it is likely that the term "catch fire" is intended more as a metaphor for the unresponsive behavior of the CPU when placed in this state; there are no known examples of erratic behavior.

The HCF opcode is believed to be the first built-in self-test feature on a Motorola microprocessor.[5]

The opcode is also present on the 6809.[6]

See also[edit]

References[edit]

  1. ^ http://catless.ncl.ac.uk/Risks/5.6.html#subj2.4 | RISKS Digest: Hardware vs Software Battles (from Usenet)
  2. ^ Wheeler, Gerry (December 1977). "Undocumented M6800 Instructions". BYTE 2 (12): 46–47. 
  3. ^ Banks, Walter. "Mailing list entry". 
  4. ^ "The Jargon File, v 3.1.0". 15 October 1994. Retrieved 2010-07-08. 
  5. ^ Daniels, R. Gary; Bruce, William (April 1985). "Built-In Self-Test Trends in Motorola Microprocessors". IEEE Design & Test 2 (2): pp. 64–71. doi:10.1109/MDT.1985.294865.  "HACOF thus became the first intentional built-in self-test feature on a Motorola microprocessor."
  6. ^ https://student.brighton.ac.uk/burks/pcinfo/hardware/cpu.htm