sexta-feira, 4 de dezembro de 2009

HCF - Halt and Catch Fire

Alguém no mundo da programação já ouviu falar nesse infame mnemônico Assembly?
Bom, pra quem nunca ouviu falar, vou contar a história.

"Halt and Catch Fire", significando "Pare e Pegue Fogo", conhecido pelo mnemônico em Assembly HCF, era uma instrução fictícia em código de máquina, que se dizia estar em desenvolvimento pela IBM para a utilização em seus computadores System/360, junto com muitas outras instruções engraçadas, como "Execute Operator", significando "Executar Operador".

Atualmente, HCF denota uma instrução em código de máquina que cause efeitos colaterais, que não tenha sido documentada, e que foi incluída no processador apenas para fins de teste. A antiga instrução "Halt and Catch Fire" e o mnemônico HCF foram adotados pelos programadores que descobriram nessas instruções uma forma engraçada de expressar que a execução não-intencional dessa instrução faz com que o sistema falhe ao executar as suas funções normais, embora aparentemente estejam "ocupados". A expressão "catch fire", significando "pegar fogo", não passa de uma metáfora.

Uma história apócrifa remonta aos anos 60, quando computadores usavam memória de núcleo magnético. Diz a lenda que para aumentar a velocidade da memória no próximo modelo, os engenheiros aumentaram as correntes de leitura/escrita nos fios que eram enrolados pelos núcleos. Isso até que funcionava bem quando o computador estava executando programas normais, já que os acessos eram espalhados por toda a extensão da memória. No entanto, a instrução HALT foi implementada como um "Jump to Self", significando mais ou menos, "Pule para Si Mesmo". Isso significava que a mesma posição de memória era repetidamente acessada, e os fios esquentavam tanto que começavam a emitir fumaça - daí "Halt and Catch Fire"... Será?

HCF na vida real



O microprocessador Motorola 6800 foi o primeiro a ter uma reconnhecida instrução HCF. A origem da instrução HCF do 6800 (código 0xDD ou 0xD9) veio de um artigo escrito por Gerry Wheeler (1952-2006) na edição de dezembro de 1977 da revista BYTE sobre instruções não-documentadas. A instrução faz com que o processador entre em um modo designado para testes de fabricação, no qual ele continuamente executa ciclos de leitura em endereços sucessivos da memória, sem executar nenhuma instrução que intervenha. Efetivamente, o bus de endereçamento se torna um contador, permitindo a operação de verificar rapidamente todas as linhas de endereçamento. Uma vez que o processador entra neste modo de testes, ele não mais responde a interrupções, de forma que sua operação normal só pode ser restaurada por um reset.

Microprocessadores com instruções HCF específicas

- Motorola 6502, e em geral as séries de processadores NMOS 650x e 651x;
- Motorola 6800;
- Motorola 6809;
- MIPS-X: processador suportado pela Agência de Projetos de Pesquisa Avançados de Defesa. O Manual do Programador descreve uma instrução HSC, ou "Halt and Spontaneously Combust", significando "Pare e Entre Espontaneamente em Combustão" na versão -NSA do processador.