JK's Super Garbage Collection

Autor: Johann E. Klasek

Geschichtliches

Das Projekt stammt aus dem Jahr 1985, als die BASIC-programmierten Projekte auf dem C64 begannen umfangreicher zu werden. Die Garbage-Collection (GC) des Commodore Basic V2 erwies sich dabei nicht nur als äußerst störend, sondern war sogar hinderlich. Nach dem der Autor ein Projekt übernahm und völlig neu überarbeitete (eine Programmbibliothek, wie es sie in ähnlicher Form zig-fach gab und gibt), waren die Anforderungen hinsichtlich "Usability", Zuverlässigkeit und Stabilität entsprechend hoch vorgegeben - um sich auch im ständigen rauen Betrieb des Freaks Computer- Clubs zu bewähren - was aber mit der originalen GC nicht im Entferntesten realisierbar war. Aus der Sicht des Autors war die Entwicklung einer besseren Implementierung einer Garbage Collection Routine daher unumgänglich.
Ohne die damals schon bekannten Implementierungen (es war damals wohl schon das verbesserte Verfahren in Basic 4.0, Basic 3.5 und 7.0 im Einsatz) zu kennen bzw. wahrzunehmen, bildete sich die Idee, die GC-Laufzeit durch Vewendung eines brachliegenden Speicherbereichs im C64 zu beschleunigen. Eine Änderung der String-Datenstruktur erschien dem Autor eigentlich als zu kompliziert, ein etwaiger zusätzlicher Speicherverbrauch als inakzeptabel und so wurde schon von vorn herein diese Variante verworfen.

Das Projekt wurde im Laufe des Jahres 1985 umgesetzt und bis zur Version 1.1 in eine fast veröffentlichungsreife Version gebracht. Die angestrebte Veröffentlichung in Zeitschrift 64'er wurde dann nicht mehr in Angriff genommen, da just im Februar 1986 eine andere Implementierung der GC namens "Garbage64" für den C64, mit gleicher Methodik (wenn auch fehlerhaft in der Implementierung) veröffentlicht wurde.

Technische Aspekte

Die Einbettung der Super-GC ist recht archaisch und konservativ. Man könnte sagen, nicht wirklich sonderlich elegant. Das BASIC-ROM wird ins RAM kopiert, nur um den Einsprungspunkt der originalen GC-Routine zu kapern und zur neuen, separat im RAM liegenden Routine (innerhalb von $C000-$D000) zu verzweigen.
Aus Vorsicht (vielleicht auch Unkenntnis) ist die Super-GC in der 1985er-Variante vollständig mit gesperrten Interrupts abgearbeitet worden, da ja das RAM unter dem KERNAL in Bearbeitung war. Wäre nicht notwendig, da das Schreiben unterhalb des KERNALs keine Wegblendung des ROM erforderlich macht. Die Interruptsperrung hätte für den Lesezugriff, nämlich beim blockweisen Kopieren zurück in den Stringheap-Bereich gereicht (in der 2013-Edition ist das behoben).

Im Praxiseinsatz war diese GC-Implementierung ein Teil einer umfangreicheren "Library" mit etlichen Erweiterungen, um die gängigen Schwächen des BASIC V2 auszumerzen bzw. Vorgänge zu beschleunigen. Sie hat so viele Jahre im harten Praxisbetrieb einer Programmbibliothek (Diskettenmanagers) für den Freaks-Computer-Club seinen Dienst versehen.

Download


Urheberrechtshinweis: Die Programme und Dateien können frei verwendet, kopiert und verteilt werden, solange etwaige Hinweise zum Autor erhalten bleiben.

Pläne

Referenzen

  1. C64-Wiki.de: Garbage Collection
  2. ROM-Listing Original-Routine:
    Die automatisiert ergänzten Kommentare dazu sind kaum brauchbar.
  3. Jim Butterfield Artikel-Liste Compute!
    1. Compute! Issue 10 - March 1981: Learning About Garbage Collection
    2. Compute! Issue 49 - June 1984: Garbage Collection On Commodore Computers
    3. Compute! Issue 50 - July 1984: Commodore Garbage Collection Part 2
  4. 64'er-Magazin Februar 1986: Garbage64 Alternativimplementierung mit Bufferverfahren (wie diese Variante).
  5. Artikel in Magazin c't 1984/6 S. 72: BASIC intern - Was nicht im Handbuch steht: Teil 3: Strings und 'Garbage collection'
  6. Buch "Microsoft-Basic: Konzepte, Algorithmen und Datenstrukturen", Luidger Röckrath, Franzis' Verlag, ISBN: 3772380115
    6.2.3 Die Stringspace-Reorganisation Garbage collection (GARCOL), S. 123

 


Best viewed with any browser zurück zur Startseite