2 puntos por GN⁺ 2024-05-13 | 1 comentarios | Compartir por WhatsApp

Introducción a 6o6, que virtualiza una CPU 6502 con otra CPU 6502 (y lanzamiento de The Incredible KIMplement 1.0)

  • El autor lanzó oficialmente la versión 1.0 de "The Incredible KIMplement", uno de los proyectos de su lista de deseos en los que ha trabajado de forma intermitente durante 20 años
  • The Incredible KIMplement es un programa que emula la KIM-1 de MOS/Commodore, una computadora de placa única basada en 6502 con 1MHz y 1KB de memoria
    • Funciona en Commodore 64 y ofrece la función de soporte TTY de la KIM-1 y 16KB de RAM expandida
  • Más importante aún, implementó en una CPU 6502 una CPU NMOS 6502 completamente virtualizada llamada 6o6 (6502-on-6502)
    • Controla por completo la ejecución del código huésped y abstrae el acceso a memoria, por lo que también puede ejecutarse con memoria virtual
    • No solo pasa las pruebas funcionales, sino que también puede virtualizarse a sí misma varias veces

Motivación y diseño de la virtualización de 6502

  • Desde niño quería crear el "sistema operativo definitivo", pero la mayoría de sus intentos se quedaban en demos muy primitivas
  • Al conocer los sistemas multiusuario, se dio cuenta de que los usuarios podían ejecutar código problemático
    • Un sistema eficaz debe poder prevenir o responder a los problemas causados por el código
  • Debido a las limitaciones de la CPU 6502, es difícil resolver esto por completo solo con hardware
    • Decidió resolverlo por software
  • La máquina virtual 6o6 (VM) ejecuta el código huésped y abstrae por completo el acceso a memoria
    • El harness actúa como interfaz de la VM con la memoria y el hardware del huésped
    • El kernel ejecuta la VM y maneja las situaciones excepcionales
  • Al realizar las operaciones de la ALU directamente en la CPU 6502 anfitriona, asegura precisión y rendimiento
  • Optimizó el rendimiento con acceso a memoria en línea, Instruction Fusion y otras técnicas

Verificación y pruebas de 6o6

  • Verificó la precisión usando la suite de pruebas funcionales de Klaus Dormann
  • Midió el rendimiento con el emulador lib6502
    • Al aplicar acceso a memoria en línea e Instruction Fusion, redujo en 36.5% la cantidad de ejecuciones de instrucciones
  • Incluye 4 programas de demostración que funcionan en Commodore 64 y Apple IIe
    • Hello World
    • Virtualizarse a sí misma varias veces
    • Cambio entre 2 tareas independientes
    • Emulación de un espacio de direcciones de 64KB usando el cartucho geoRAM

Posibles usos de 6o6 e ideas de mejora adicional

  • Desarrollo de sistemas operativos personalizados
  • Entorno seguro para ejecutar código descargado
    • Como la ejecución dinámica de código en un cliente Gopher
  • Soporte de virtualización con hardware mínimo en sistemas NMOS 6502
  • Refactorización para que pueda ejecutarse desde ROM
  • Emulación de instrucciones de CMOS 65C02
  • Optimización adicional del código

Opinión de GN⁺

  • 6o6 parece una excelente solución de virtualización por software. En particular, parece útil en sistemas 6502 con recursos de hardware limitados.

  • La estructura modular de harness y kernel resulta impresionante. Parece que ayudará a asegurar compatibilidad con distintos tipos de hardware y mayor flexibilidad.

  • Las técnicas aplicadas para optimizar el rendimiento del emulador (acceso a memoria en línea, Instruction Fusion, etc.) son interesantes. Parecen ideas que también valdría la pena probar en otros proyectos de emuladores.

  • También impresiona la demostración en hardware real (Commodore 64, Apple II) y en cartuchos de expansión como geoRAM. Muestra bien la compatibilidad del software y su utilidad.

  • Al ser un proyecto tan bien logrado, parece que podría aportar a la comunidad relacionada mediante la publicación del código fuente. Generan expectativa sus próximas mejoras y casos de uso.

1 comentarios

 
GN⁺ 2024-05-13
Comentarios de Hacker News

Resumen:

  • El autor presentó la primera obra terminada de un proyecto de lista de cosas por hacer antes de morir en el que ha trabajado de forma intermitente durante 20 años. Parece una entrada de lista bastante impresionante.
  • Siempre resulta interesante llevar la arquitectura 6502, simple y limitada, de hace 50 años, a nuevos límites. El núcleo 6502 todavía se encuentra en algunos SoC orientados al mercado masivo de ultra bajo costo.
  • Le hizo revivir recuerdos de cuando aprendió ensamblador 6502 por primera vez. En ese entonces, un libro llamado "The Visual Computer" venía con un emulador en un disquete y le abrió mucho la mente. Encontró el PDF del libro, pero no está claro si el software del disquete aún existe.
  • Dice que el verdadero punto clave en el cuerpo de la publicación es cómo la Commodore 64 emula un sistema basado en 6502 muy diferente. A esto lo llama "6o6" o "6502-on-6502", y es una CPU NMOS 6502 de software completamente virtualizada que corre sobre una CPU 6502. Esto fue publicado como código abierto.
  • Se puede controlar por completo la ejecución del código huésped, atrapar opcodes no documentados y opcodes de bloqueo, y abstraer por completo todos los accesos a memoria, lo que permite remapeo de direcciones, bloqueo de lecturas/escrituras ilegales y ejecución completa con memoria virtual.
  • No solo pasa las pruebas funcionales, sino que está tan completo que puede virtualizarse a sí mismo virtualizando a otra instancia de sí mismo.
  • Es un trabajo asombroso no solo desde la perspectiva del 6502, sino desde cualquier perspectiva.
  • También le recordó el video "The Zilog Z80 has a Protected Mode", aunque cuando ese video se publicó en HN no hubo discusión.
  • Al leer el texto, se emocionó hasta sentir escalofríos. Siente que tendrá que releerlo una y otra vez.