Virtualisierung einer 6502 auf einer 6502 mit 6o6
(oldvcr.blogspot.com)Einführung in 6o6, das eine 6502-CPU auf einer 6502-CPU virtualisiert (und Release von The Incredible KIMplement 1.0)
- Der Autor hat Version 1.0 von „The Incredible KIMplement“ offiziell veröffentlicht, einem Bucket-List-Projekt, an dem er seit 20 Jahren mit Unterbrechungen gearbeitet hat
- The Incredible KIMplement ist ein Programm, das den MOS/Commodore KIM-1 emuliert, einen 6502-basierten Single-Board-Computer mit 1 MHz und 1 KB Speicher
- Es läuft auf dem Commodore 64 und bietet TTY-Unterstützung des KIM-1 sowie 16 KB erweiterten RAM
- Noch wichtiger ist, dass mit 6o6 (6502-on-6502) eine vollständig virtualisierte NMOS-6502-CPU auf einer 6502-CPU implementiert wurde
- Die Ausführung von Gast-Code wird vollständig kontrolliert und Speicherzugriffe werden abstrahiert, sodass die Ausführung auch im virtuellen Speicher möglich ist
- Es besteht nicht nur Funktionstests, sondern kann sich auch selbst mehrfach virtualisieren
Motivation und Design der 6502-Virtualisierung
- In der Kindheit wollte der Autor ein „ultimatives Betriebssystem“ bauen, doch die meisten Versuche blieben auf dem Niveau primitiver Demos
- Durch die Beschäftigung mit Mehrbenutzersystemen wurde klar, dass Benutzer fehlerhaften Code ausführen können
- Ein effektives System muss in der Lage sein, durch Code verursachte Probleme zu verhindern oder darauf zu reagieren
- Wegen der Grenzen der 6502-CPU ist das allein mit Hardware nur schwer vollständig zu lösen
- Deshalb wurde eine Lösung in Software gewählt
- Die virtuelle Maschine 6o6 (VM) führt Gast-Code aus und abstrahiert Speicherzugriffe vollständig
- Das Harness dient als Schnittstelle der VM zu Gast-Speicher und Hardware
- Der Kernel führt die VM aus und behandelt Ausnahmefälle
- ALU-Operationen werden direkt auf der Host-6502-CPU ausgeführt, um Genauigkeit und Performance sicherzustellen
- Die Performance wird durch Inline-Speicherzugriffe, Instruction Fusion und weitere Techniken optimiert
Verifikation und Tests von 6o6
- Die Genauigkeit wurde mit der Funktionstest-Suite von Klaus Dormann verifiziert
- Die Performance wurde mit dem Emulator lib6502 gemessen
- Durch Inline-Speicherzugriffe und Instruction Fusion wurde die Zahl der Instruktionsausführungen um 36,5 % reduziert
- Enthalten sind vier Demo-Programme, die auf dem Commodore 64 und Apple IIe laufen
- Hello World
- Mehrfache Virtualisierung von sich selbst
- Umschalten zwischen zwei unabhängigen Tasks
- Emulation eines 64-KB-Adressraums mit einer geoRAM-Kassette
Potenzielle Einsatzgebiete von 6o6 und Ideen für weitere Verbesserungen
- Entwicklung benutzerdefinierter Betriebssysteme
- Sichere Ausführungsumgebungen für heruntergeladenen Code
- Etwa dynamische Codeausführung in einem Gopher-Client
- Virtualisierungsunterstützung auf NMOS-6502-Systemen mit minimaler Hardware
- Refactoring, damit es aus ROM laufen kann
- Emulation der CMOS-65C02-Instruktionen
- Zusätzliche Code-Optimierungen
Meinung von GN⁺
-
6o6 wirkt wie eine hervorragende Software-Virtualisierungslösung. Besonders auf 6502-Systemen mit begrenzten Hardware-Ressourcen dürfte sie nützlich sein.
-
Die modulare Struktur von Harness und Kernel ist beeindruckend. Sie dürfte helfen, unterschiedliche Hardware zu unterstützen und Flexibilität sicherzustellen.
-
Die zur Optimierung der Emulator-Performance eingesetzten Techniken (Inline-Speicherzugriffe, Instruction Fusion usw.) sind interessant. Das sind Ideen, die sich auch auf andere Emulator-Projekte anwenden ließen.
-
Beeindruckend ist auch die Demonstration auf realer Hardware (Commodore 64, Apple II) und mit Erweiterungskassetten wie geoRAM. Das zeigt Software-Kompatibilität und praktische Nutzbarkeit sehr gut.
-
Da das Projekt einen hohen Reifegrad erreicht hat, könnte die Veröffentlichung des Quellcodes einen wertvollen Beitrag für die relevante Community leisten. Weitere Verbesserungen und Anwendungsfälle machen neugierig.
1 Kommentare
Hacker-News-Kommentar
Zusammenfassung: