Virtualizar 6502 sobre 6502 con 6o6
(oldvcr.blogspot.com)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
Comentarios de Hacker News
Resumen: