2 Punkte von GN⁺ 2024-05-13 | 1 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2024-05-13
Hacker-News-Kommentar

Zusammenfassung:

  • Der Autor stellt das erste fertige Werk aus einem Bucket-List-Projekt vor, an dem er 20 Jahre lang immer wieder gearbeitet hat. Das wirkt wie ein ziemlich beeindruckender Bucket-List-Eintrag.
  • Es ist immer spannend, die einfache und stark begrenzte 50 Jahre alte 6502-Architektur an neue Grenzen zu bringen. 6502-Kerne finden sich noch immer in einigen SoCs für den ultrabilligen Massenmarkt.
  • Das weckt Erinnerungen daran, wie der Autor zum ersten Mal 6502-Assembler lernte. Damals wurde ein Buch namens "The Visual Computer" zusammen mit einem Emulator auf Diskette ausgeliefert, was ein großes Aha-Erlebnis war. Ein PDF des Buchs wurde gefunden, aber ob die Software von der Diskette noch existiert, ist unklar.
  • Der eigentliche Kern im Hauptbeitrag ist laut Kommentar, wie ein Commodore 64 ein sehr anderes 6502-basiertes System emuliert. Das wird "6o6" oder "6502-on-6502" genannt und ist eine vollständig virtualisierte Software-NMOS-6502-CPU, die auf einer 6502-CPU läuft. Das Projekt ist als Open Source veröffentlicht.
  • Die Ausführung von Gastcode lässt sich vollständig kontrollieren, undokumentierte Opcodes und Jam-Opcodes können abgefangen werden, und alle Speicherzugriffe werden vollständig abstrahiert, sodass Adress-Remapping, das Blockieren unerlaubter Lese-/Schreibzugriffe und die Ausführung mit vollständig virtuellem Speicher möglich sind.
  • Es besteht nicht nur Funktionstests, sondern ist so ausgereift, dass es sich selbst virtualisieren kann, das wiederum sich selbst virtualisiert.
  • Das ist nicht nur aus Sicht des 6502, sondern aus jeder Perspektive erstaunliche Arbeit.
  • Es erinnerte auch an das Video "The Zilog Z80 has a Protected Mode", zu dem es jedoch keine Diskussion gab, als es auf HN gepostet wurde.
  • Beim Lesen des Beitrags lief dem Kommentator vor Begeisterung ein Schauer über den Rücken. Wahrscheinlich muss er ihn noch mehrmals lesen.