Virtualizando um 6502 sobre um 6502 com o 6o6
(oldvcr.blogspot.com)Introdução ao 6o6, que virtualiza uma CPU 6502 com outra CPU 6502 (e lançamento do The Incredible KIMplement 1.0)
- O autor lançou oficialmente a versão 1.0 do "The Incredible KIMplement", um dos projetos da sua lista de desejos em que vinha trabalhando de forma intermitente há 20 anos
- The Incredible KIMplement é um programa que emula o KIM-1, um computador single-board baseado no MOS/Commodore KIM-1 com 6502, 1MHz e 1KB de memória
- Roda no Commodore 64 e oferece suporte a TTY do KIM-1 e 16KB de RAM expandida
- Mais importante ainda, ele implementou em uma CPU 6502 uma CPU NMOS 6502 totalmente virtualizada chamada 6o6 (6502-on-6502)
- Controla completamente a execução do código convidado e abstrai o acesso à memória, permitindo execução até mesmo em memória virtual
- Além de passar nos testes funcionais, também consegue virtualizar a si mesmo várias vezes
Motivação e arquitetura da virtualização do 6502
- Na infância, o autor queria criar um "sistema operacional definitivo", mas a maioria das tentativas ficou no nível de demos primitivas
- Ao entrar em contato com sistemas multiusuário, percebeu que usuários podem executar código com problemas
- Um sistema eficaz precisa ser capaz de impedir ou lidar com problemas causados pelo código
- Por causa das limitações da CPU 6502, era difícil resolver isso perfeitamente apenas com hardware
- Então ele decidiu resolver isso por software
- A máquina virtual (VM) 6o6 executa o código convidado e abstrai completamente o acesso à memória
- O harness atua como interface da VM com a memória e o hardware do convidado
- O kernel executa a VM e trata situações de exceção
- As operações da ALU são executadas diretamente pela CPU 6502 hospedeira para garantir precisão e desempenho
- O desempenho foi otimizado com acesso inline à memória, Instruction Fusion e outras técnicas
Validação e testes do 6o6
- A precisão foi verificada com a suíte de testes funcionais de Klaus Dormann
- O desempenho foi medido com o emulador lib6502
- Com acesso inline à memória e Instruction Fusion, o número de instruções executadas foi reduzido em 36,5%
- Inclui quatro programas de demonstração que rodam no Commodore 64 e no Apple IIe
- Hello World
- Virtualizar a si mesmo várias vezes
- Alternância entre duas tarefas independentes
- Emulação de espaço de endereçamento de 64KB usando o cartucho geoRAM
Possíveis aplicações do 6o6 e ideias para melhorias adicionais
- Desenvolvimento de sistemas operacionais personalizados
- Ambiente seguro para execução de código baixado
- Como execução dinâmica de código em um cliente Gopher
- Suporte à virtualização em sistemas NMOS 6502 com hardware mínimo
- Refatoração para permitir execução a partir de ROM
- Emulação das instruções do CMOS 65C02
- Otimizações adicionais de código
Opinião do GN⁺
-
O 6o6 parece ser uma excelente solução de virtualização por software. Deve ser especialmente útil em sistemas 6502 com recursos de hardware limitados.
-
A estrutura modular de harness e kernel é impressionante. Parece ajudar bastante no suporte a diferentes hardwares e na obtenção de flexibilidade.
-
As técnicas aplicadas para otimizar o desempenho do emulador, como acesso inline à memória e Instruction Fusion, são interessantes. Parecem ideias que também valeria a pena aplicar em outros projetos de emuladores.
-
Também impressiona a demonstração em hardware real (Commodore 64, Apple II) e em cartuchos de expansão como o geoRAM. Isso mostra bem a compatibilidade e a utilidade prática do software.
-
Como é um projeto bastante bem acabado, a publicação do código-fonte pode contribuir com a comunidade relacionada. Fica a expectativa por futuras melhorias e casos de uso.
1 comentários
Comentário no Hacker News
Resumo: