2 pontos por GN⁺ 2024-05-13 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2024-05-13
Comentário no Hacker News

Resumo:

  • O autor apresentou a primeira obra concluída de um projeto de lista de desejos em que vinha trabalhando de forma intermitente por 20 anos. Parece ser uma lista de desejos bastante impressionante.
  • É sempre interessante expandir a arquitetura 6502, simples e limitada, de 50 anos atrás, para novos limites. O núcleo 6502 ainda pode ser encontrado em alguns SoCs voltados ao mercado de massa de ultra baixo custo.
  • Trouxe de volta memórias de quando o autor aprendeu assembly 6502 pela primeira vez. Na época, um livro chamado "The Visual Computer" vinha com um emulador em disquete e proporcionou uma grande descoberta. O PDF do livro foi encontrado, mas não se sabe se o software do disquete ainda existe.
  • O verdadeiro ponto central no corpo da postagem é como o Commodore 64 emula um sistema baseado em 6502 muito diferente. Isso é chamado de "6o6" ou "6502-on-6502" e é uma CPU NMOS 6502 de software, totalmente virtualizada, executada sobre uma CPU 6502. Isso foi disponibilizado como open source.
  • É possível controlar completamente a execução do código convidado, interceptar opcodes não documentados e opcodes jam, além de abstrair totalmente todos os acessos à memória, permitindo remapeamento de endereços, bloqueio de leituras/escritas ilegais e execução completa com memória virtual.
  • Além de passar nos testes funcionais, está suficientemente maduro a ponto de virtualizar a si próprio, que por sua vez virtualiza a si próprio.
  • É um trabalho surpreendente não apenas do ponto de vista do 6502, mas sob qualquer perspectiva.
  • Também lembrou o vídeo "The Zilog Z80 has a Protected Mode", embora não tenha havido discussão quando esse vídeo foi postado no HN.
  • Ler o texto foi tão impactante que deu arrepios. Parece ser daqueles textos que precisam ser relidos várias vezes.