LISP 64

Aus C64-Wiki
Wechseln zu: Navigation, Suche
LISP 64
Titelbild
Entwickler Peter Feldtmann
Verleger Heise Verlag
Release 1986, 1988
Lizenz Vollversion
Plattform(en) C64
Genre Entwicklungssystem für die Sprache Lisp
Steuerung Icon tastatur.png
Medien Icon disk525.png, Icon kassette.png
Sprache(n) Programm: Sprache:deutsch
Information Erschienen in INPUT 64 4/86, 5/86 und 6/86 beim Verlag Heinz Heise GmbH

Inhaltsverzeichnis

[Bearbeiten] Allgemeines

LISP steht als Abkürzung für "LISt Processing language" (frei übersetzt: Listen-Verarbeitungs-Sprache) und ist eine der ältesten existierenden Programmmiersprachen. Sie wurde bereits 1958 am MIT entwickelt.

[Bearbeiten] Herausgeber

Heinz Heise Verlag

[Bearbeiten] Programmierer

Peter Feldtmann (Jahrgang 1963) hat das LISP-System während seines Informatik-Studiums an der Uni Hamburg entwickelt. "In Ergänzung zum nüchternen Studium begann ich bald – nachdem ich am uni-eigenen Großrechner die Bekanntschaft mit der Sprache LISP gemacht hatte und sofort fasziniert war – mit der Planung und Entwicklung eines LISP-Interpreters für meinen häuslichen Rechner, den C 64. Dabei mußte ich feststellen, daß Implementations-Hinweise in der Literatur recht dünn gesät und für kleinere Rechner überhaupt nicht vorhanden waren. So war ich weitgehend auf mich selbst angewiesen, und nach und nach entstand etwas, was jetzt LISP64 heißt" beschreibt Peter Feldtmann die Entstehungsgeschichte des Systems.

[Bearbeiten] Vertrieb

Erschienen in INPUT 64 4/86, 5/86 und 6/86 beim Verlag Heinz Heise GmbH

[Bearbeiten] Beschreibung

[Bearbeiten] Arbeitsweise

Der LISP 64-Interpreter ist ein EVAL-Lisp, das heißt: erstes Element = Funktion, Rest = Argumente.
Funktionen können sein:

  • Systemfunktionen (CAR, PLUS, ...)
  • LAMBDA-Ausdruck
  • NLAMBDA-Ausdrücke (Argumente werden nicht ausgewertet)
  • LABEL-Ausdrücke
  • durch DE, DF, DM definierte Funktionen
  • VALUE eines Literals

Die Speicherkonfiguration ist prinzipiell veränderbar durch folgende Adressen:

  • $0906 (dez. 2310) FSLTOP
  • $0908 (dez. 2312) DSTACK
  • $090A (dez. 2314) ASTACK

Beim Starten durchfläuft der Interpreter den ganzen Speicher und baut eine verkettete Freispeicherliste (FSL) von Lisp-Knoten (jeweils 5 Byte pro Knoten) auf.

Das BASIC wird abgeschaltet (leider keine Fließkomma-Arithmetik mehr) und das RAM darunter mit als Speicher benutzt.

Das Kernal wird weiterhin für den Screen-Editor und I/O benutzt. Viele Vektoren werden auf den LISP-Interpreter umgelenkt (z.B. ist SuperTape eingebaut).

Unter dem Kernal gibt es zwei Stacks: der Datenstack ab $E000 aufwärts und der Adressenstack von $FFFE abwärts. Stack-Überlauf gibt es, wenn diese sich mal irgendwo in der Mitte treffen. Der Vorteil der Stapel unter dem Kernal ist, dass sie größer sein können (und bei LISP wohl auch müssen), als das, was der Prozessor mitbringt.

Der Interpreter nutzt dann für einige sich rekursiv tief aufrufenden Funktionen eine eigene JSR-Variante, die diese Stacks benutzt. Beim Lesen (Pop) aus den Stacks muss kurzzeitig das Kernal-ROM abgeschaltet werden. Beim "Push" muss nichts besonderes passieren, da die Schreibzugriffe direkt ins RAM gehen.

[Bearbeiten] Speicherplatzbelegung

Lisp64MemoryMap.png

[Bearbeiten] Bibliotheken

TOH.LSP
HANOI.LSP
PERM.LSP
SYMB-DIFF.LSP
MACROS.LSP
TRACER.LSP
ARRAYS.LSP
SETS.LSP
EDITOR.LSP
PRINT-FILE.LSP
EXPERTE.LSP
ZOOTIERE.DAT
ELIZA.LSP

[Bearbeiten] Dokumentation

Korrigierte Version mit geTeXter Anleitung.

[Bearbeiten] Code-Beispiele

[Bearbeiten] Türme von Hanoi

In der Datei TOH.LSP (Türme von Hanoi) steht folgendes:

(DE TOH
  (N)
  (BEWEGE 'LINKS
     'RECHTS
     'MITTE N))
 
(DE BEWEGE
  (VON NACH STIFT N)
  (COND((ZEROP N)
       T)
    (T(BEWEGE VON STIFT NACH
        (SUB1 N))
      (PRINT(LIST 'LEGE
           'SCHEIBE
           'VON VON
           'NACH NACH))
      (BEWEGE STIFT NACH VON
        (SUB1 N)))))

Geladen wird dies mit

(LOAD 8 "TOH*")

und ausgeführt (z.B. für 3 Scheiben) mit

(TOH 3)
(LEGE SCHEIBE VON LINKS NACH RECHTS)
(LEGE SCHEIBE VON LINKS NACH MITTE)
(LEGE SCHEIBE VON RECHTS NACH MITTE)
(LEGE SCHEIBE VON LINKS NACH RECHTS)
(LEGE SCHEIBE VON MITTE NACH LINKS)
(LEGE SCHEIBE VON MITTE NACH RECHTS)
(LEGE SCHEIBE VON LINKS NACH RECHTS)
T

[Bearbeiten] N-Damen-Problem

In der INPUT 64 4/87 auf S. 30 wurde die Lösung des Wettbewerbs zum N-Damen-Problem vorgestellt. Dabei war als einzige in LISP 64 programmierte Lösung das Programm von Frank Fetthauer aus Essen:

8damen.png

[Bearbeiten] LISP 64 kann symbolisch differenzieren

LISP64SampleSymbDiff.png

[Bearbeiten] Interpreter-Kaltstart

Ein Interpreter-Kaltstart wird aufgerufen mit

(CALL 3875)

Dabei wird das System in den Zustand nach dem Laden und Starten des Interpreters zurückversetzt.

[Bearbeiten] Verstecktes Copyright

(CALL 10221)

liefert

(C)PETER FELDTMANN 2155 MOORENDE

NIL

[Bearbeiten] Bugs

Leider stürzt das System im VICE-Emu beim Aufruf des Garbage-Collectors ab, statt nach dem Aufräumen die Knotenzahl in der Freispeicherliste wie folgt auszugeben:

(GC)
7624

Um das Problem zu umgehen, muss man vor dem Starten des Interpreters den Speicherbereich $E000-$E001 mit $FF initialisieren. Oder alternativ den VICE-Emu so starten:

x64 -raminitstartvalue 255 Lisp64.d64

Für eine korrigierte Version siehe auch folgenden Abschnitt.

Interessant hierbei ist Folgendes: Der Speicherinhalt nach dem Einschalten ist zufällig. Welches Muster nach dem Einschalten im RAM steht, hängt vom RAM ab. Verschiedene Hersteller implementieren das unterschiedlich.

Dass dieser Fehler im Gegenteil zu einigen Emulatoren bei den meisten echten Maschinen nicht in Erscheinung tritt, liegt also daran, dass die RAMs an diesen Stellen nach dem Einschalten bereits mit $FF belegt sind.

[Bearbeiten] Bezugsquellen

(thumbnail)
Abspeichern des LISP 64 Interpreters

INPUT 64[1] 4/86, 5/86 und 6/86

Die korrigierte Version LIST64P.PRG findet man in der ShadowM's Operating System and Compiler Collection[2]. Das Image enthält neben der Beispiel-Programme:

  • LISP64P.PRG (eine gepatchte LISP 64 - Version)
  • LISP64.PRG (ungepatcht - gesichert aus LISP64X.PRG)
  • LISP64X.PRG (Original von INPUT64)

Die letzte kann nach dem Laden auch mit SYS 28416 ($6F00) gestartet werden. Dann kommt ein Splash-Screen, und nach Tastendruck eine kurze Info und Erklärung, wie man die enthaltenen Programme abspeichert:

  • Nach SHIFT : perm.lsp,symb-diff.lsp,toh.lsp und hanoi.lsp
  • Mit CTRL +s  den Interpreter selbst.


[Bearbeiten] Neuere Version

In der INPUT 64 6/88 (2 Jahre nach dem Erscheinen in INPUT 64) steht im Beiheft auf S. 15 die folgende Anzeige:

"LISP 64
Die Sprache der Künstlichen Intelligenz für den C64.
Neu: jetzt mit LISP-Compiler!
Auf Diskette für C64 mit LISP-Interpreter, -Compiler, Beispielprogrammen
und kompletter Anleitung.
Direkt beim Verlag für 29,80 DM."

[Bearbeiten] Besprechungen und Literatur

[Bearbeiten] Alternativen

[Bearbeiten] Links

[Bearbeiten] Quellen

  1. Einige der Input 64 Images (x1541 hat die Erlaubnis für die Downloadmöglichkeit)
  2. ShadowM's Operating System and Compiler Collection, in der korrigierte Version von LISP 64 mit Anleitung zu finden ist