
Entusiastas conseguiram extrair e desmontar com sucesso o microcódigo do processador Intel 80386, que, devido à falta de documentação, era considerado uma 'caixa-preta'. A imagem binária do microcódigo foi recriada com o auxílio de IA a partir de fotografias de alta resolução do cristal, e a lógica de funcionamento foi analisada através do rastreamento das conexões no cristal. Gradualmente, foram determinados a estrutura das microinstruções (μ-ops), campos, ordem de execução e marcadores de fim de instruções. Os resultados do projeto foram publicados no GitHub como domínio público.
Foi descoberto que, no CPU 80386, cada instrução é totalmente executada através do microcódigo, enquanto nos processadores 8086 e modernos, parte das instruções é processada diretamente. Além disso, ao contrário dos processadores 8086, no 80386 o microcódigo não implementa algoritmos diretamente, mas principalmente configura aceleradores de hardware (multiplicador, divisor, deslocamento rápido, PTU (Protection Test Unit)).
Durante a pesquisa, também foi descoberta uma possível vulnerabilidade de segurança ao processar o bitmap de permissões de entrada/saída (IO permission bitmap): durante acessos de 4 bytes às portas, os bits de permissão eram verificados apenas para os primeiros 3 bytes, enquanto o acesso ao 4º byte não era verificado, o que teoricamente permitiria o acesso a registros de hardware que deveriam estar bloqueados.
Com base no microcódigo publicado foi desenvolvido um CPU aberto z386, implementado na linguagem SystemVerilog e funcionando com o uso de FPGA. Em vez de implementar cada instrução na forma de um RTL (wikipedia.org) (nível de transferência de registradores), no z386 foram implementadas estruturas de hardware controladas pelo microcódigo original. O desempenho da implementação preparada é comparável ao de um PC 386 rápido (~70MHz). Sob o controle do z386, foi possível iniciar com sucesso o DOS 6/7, DOS/4GW, DOS/32A e jogos como Doom e Cannon Fodder.
Fonte: linux.org.ru
