LISP 64

Aus C64-Wiki
Zur Navigation springenZur Suche springen
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

LISP steht als Abkürzung für "LISt Processing language" (frei übersetzt: Listen-Verarbeitungs-Sprache) und ist eine der ältesten existierenden Programmiersprachen. Sie wurde bereits 1958 am MIT entwickelt. LISP-Versionen gibt es bis heute, allerdings ist die Schreibweise in Versalien seit ungefähr 1990 nicht mehr üblich.


Allgemeines[Bearbeiten | Quelltext bearbeiten]

Herausgeber[Bearbeiten | Quelltext bearbeiten]

Programmierer[Bearbeiten | Quelltext bearbeiten]

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, dass 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.

Vertrieb[Bearbeiten | Quelltext bearbeiten]

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

Beschreibung[Bearbeiten | Quelltext bearbeiten]

Arbeitsweise[Bearbeiten | Quelltext bearbeiten]

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 durchlä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-ROM-Bereich 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 (Prozessorstapel).

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

Speicherplatzbelegung[Bearbeiten | Quelltext bearbeiten]

Speicherplatzbelegung unter LISP 64.

[1]


Bibliotheken[Bearbeiten | Quelltext bearbeiten]

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

Dokumentation[Bearbeiten | Quelltext bearbeiten]

Korrigierte Version mit geTeXter Anleitung Sprache:englisch.

Code-Beispiele[Bearbeiten | Quelltext bearbeiten]

Türme von Hanoi[Bearbeiten | Quelltext bearbeiten]

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

N-Damen-Problem[Bearbeiten | Quelltext bearbeiten]

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:

Das N-Damen Problem.


LISP 64 kann symbolisch differenzieren[Bearbeiten | Quelltext bearbeiten]

Differenzierung mit LISP 64.


Interpreter-Kaltstart[Bearbeiten | Quelltext bearbeiten]

Ein Interpreter-Kaltstart wird aufgerufen mit

(CALL 3875)

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

Verstecktes Copyright[Bearbeiten | Quelltext bearbeiten]

(CALL 10221)

liefert

(C)PETER FELDTMANN 2155 MOORENDE

NIL

Bugs[Bearbeiten | Quelltext bearbeiten]

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-Emulator 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 jeweiligen RAM-Typ 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 das RAM an diesen Stellen nach dem Einschalten bereits mit $FF belegt sind.

Bezugsquellen[Bearbeiten | Quelltext bearbeiten]

Abspeichern des LISP 64 Interpreters

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

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

  • 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.


Neuere Version[Bearbeiten | Quelltext bearbeiten]

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."

Besprechungen und Literatur[Bearbeiten | Quelltext bearbeiten]

Alternativen[Bearbeiten | Quelltext bearbeiten]

Weblinks[Bearbeiten | Quelltext bearbeiten]

Quellen[Bearbeiten | Quelltext bearbeiten]

  1. Aus dem INPUT 64-Magazin (Quelle für Speicherplatzbelegungsübersicht ist nicht bekannt!)
  2. Einige der INPUT 64 Images (x1541 hat die Erlaubnis für die Download-Möglichkeit)
  3. ShadowM's Operating System and Compiler Collection, in der korrigierte Version von LISP 64 mit Anleitung zu finden ist