Hallo Besucher, der Thread wurde 6,7k mal aufgerufen und enthält 53 Antworten

letzter Beitrag von mikulask am

Experimente zur künstlichen Intelligenz mit C64/C128 - Erste Versuche in der Praxis

  • Nun beschäftige ich mich mit dem dritten Buch zum Thema Künstliche Intelligenz. Es ist das Werk "Experimente zur künstlichen Intelligenz mit C64/C128". Über diesen Buchtitel sind im Internet nur wenige Informationen verfügbar. Der Forum64-Teilnehmer Goethe hatte am 24.06.2019 das Buch hier in einem Beitrag erwähnt: Künstliche Intelligenz mit dem C64


    Wie bei jedem Buch zu diesem Thema, versuche ich auch hier Programme aus dem Buch abzutippen, auf Diskette zu speichern, Disk-Image zu erstellen und dieses hier zu veröffentlichen. Das erste Programm ist auf der Seite ein spezifischer Checksummer. Dieser Checksummer dient dann dazu, die weiteren in dem Buch aufgelisteten Programme während der Eingabe auf Richtigkeit der Eingabe zu kontrollieren.


    Ich habe zweimal den Checksummer abgetippt und das Ergebnis auf Diskette gespeichert. Auf der Diskette sind diese aufgeführt als "Checksummer" und "Checksummer10". Außerdem sind auf dieser Diskette noch weitere Versuche abgespeichert. Startet man "Checksummer10" kommen die Meldungen:

    FEHLER IN DATAZEILE 3

    BREAK IN 1040


    Fehlerhafte Eingaben kann ich aber selber nicht erkennen. Weiter komme ich hier nicht. Für alle Interessierten stelle ich hier das Disk-Image zum Download bereit. :) Vielleicht kann jemand den Fehler finden. Oder sollte wie beim vorherigen Buch es sich um einen Druckfehler im Buch handeln?


    Gleichzeitig stellt sich die Frage, ob in der Vergangenheit jemand die Programme aus dem Buch "Experimente zur künstlichen Intelligenz mit C64/C128" abgetippt und auf Datenträger gespeichert hat :?: Wenn ja, dann wäre es schön, wenn diese hier zum Download bereitgestellt werden könnten.

  • Zum Thema des Fehlers : vielleicht ist grad dies das Experiment zur künstlichen Intelligenz ;)

    Naja, sollte die künstliche Intelligenz vielleicht künstliche Scherzbolde zum Leben erwecken? :)


    Also die Situation ist unverändert: Der Checksummer aus dem Buch "Experimente zur künstlichen Intelligenz mit C64/C128" scheint nicht zu funktionieren. Das Buch war von Markt & Technik im Jahre 1987 herausgegeben worden, Autor ist Olaf Hartwig.


    Leider steht dieser Checksummer im Internet nicht separat als Download zur Verfügung. Gefunden habe ich lediglich die drei Versionen des Programms Chechsummer, welche auch in der C64Wiki erwähnt wurden und alle drei im Jahre 1985 im Verlag Markt & Technik erschienen sind. Bei der ersten Version dieses Checksummers erscheint der Name F. Lonczewski. Wahrscheinlich wird dieser auch der Autor der beiden anderen Versionen sein. Vergleicht man den Programmtext dieser drei Versionen, dann stellt man fest, dass er sich grundlegend von dem Programmtext des Checksummers von Olaf Hartweig unterscheidet.


    Natürlich bringen die verschiedenen Checksummer auch unterschiedliche Chechsummen bei der gleichen Basic-Programmzeile hervor. Die erste Basic-Programmzeile des ersten Programmes im Buch lautet:

    1 REM KUENSTLI CHE INTELLIGENZ C64/C128 ---- die Checksumme im Buch lautet dazu <640>. Der Checksummer von Olaf Hartig würde dazu dann die Checksumme auch so anzeigen <640>. Anderes der Checksummer von F. Lonczewski. Sowohl in der Version 1, als auch in der Version 2 erscheint als Chechsumme <206>, in der Version 3 erscheint sogar als Checksumme <87>.


    Da frage ich mich, warum wurde in dem Buch nicht auf den schon im Jahre 1985 vorhandenen Checksummer zurück gegriffen?

  • Das erste Programm ist auf der Seite ein spezifischer Checksummer.

    Steht da noch irgendwas Wichtiges dabei, z.B. dass vorher der Basicstart geändert werden müsste oder so? Die Programme in Deinem Disk-Image haben als Startadresse mal $0801 (C64-Standard) und mal $1001. Und wenn das Programm an der "normalen" Adresse läuft, überschreibt es sich selbst (!) mit dem Code aus den Datazeilen, was die vielen kaputten Versionen des Programms im Disk-Image erklärt. Dass das Programm anhand von Prüfsummen Tippfehler erkennen kann, bringt ja nun mal nichts, wenn das Programm sich dabei zerstört und man die Fehler deshalb nicht mehr berichtigen kann...


    Wenn Du die Version "Checksummer10" nimmst und in der dritten Datazeile den Wert 113 zu 133 änderst, stimmen die Prüfsummen und das Programm läuft durch - aber irgend etwas fehlt da noch, denn dass das Programm sich selbst überschreibt, ist bestimmt nicht Sinn der Sache.

  • Mac Bacon

    Habe herzlichen Dank dafür, dass Du Dich mit dem Programmproblem beschäftigst. :thumbsup:


    Ein großes Problem ist, dass dieses Buch "Experimente zur künstlichen Intelligenz mit C64/C128" bisher noch nicht digitalisiert worden ist. Im Internet wird das Buch zu Mondpreisen angeboten. Ich habe mein Exemplar in der Bucht vor einer Woche für einen akzeptablem Preis kaufen können. Aus den vorgenannten Gründen werden die wenigsten Nutzer hier im Forum64 Zugriff auf den Quelltext haben.


    Deshalb habe ich die Seiten 11 bis 14 aus dem Buch, welche sich mit dem speziellen Checksummer beschäftigen, eingescannt und stelle sie hier Interessenten zum Download zur Verfügung.


    Auffällig ist, dass vor der eigentlichen Programmerstellung folgende Befehle ausgeführt werden müssen:

    POKE44,16: POKE 4096,0: NEW

    Wenn das Programm nach dem Eintippen mit "RUN" gestartet wird und keine Fehlermeldung mehr erscheint, kann es auf Diskette gespeichert werden. Dann kann man den Checksummer mit

    SYS 2850

    starten.


    Soweit die in dem Buch dargelegte Theorie.

  • Wenn Du die Version "Checksummer10" nimmst und in der dritten Datazeile den Wert 113 zu 133 änderst, stimmen die Prüfsummen und das Programm läuft durch - aber irgend etwas fehlt da noch, denn dass das Programm sich selbst überschreibt, ist bestimmt nicht Sinn der Sache.

    Mac Bacon


    Da habe ich noch Fragen: Mit welcher vierstelligen Ziffer ist die dritte Datenzeile aufgeführt?

    Ist das die Zeile 1080?

    Dort (in der dritten Datazeile) soll dann der Wert von 113 in 133 abgeändert werden, ist das richtig?

    In Zeile 1080 sehe ich aber keine 113!?

    Kannst Du mir da bitte weiterhelfen? Danke. :)

  • Ja es ist die Zeile 1080.

    In checksummer10 hast du nach der 112 eine 113 statt der 133 getippt.

    Der Check beim Einlesen der Datazeilen meckert deswegen über "Fehler in Datazeile 3"


    PS: Du musst "poke 44,16" usw... auch vor einem Load eingeben, sonst lädt das Programm nicht an den Basicstart und du "siehst" es nicht.

  • Hey Mikulask,

    ich hab den Checksummer soweit repariert, abgespeichert und hier ist die .d64


    Der Ablauf ist folgender:

    (Alles nach einem Strichpunkt ist nur Kommentar)


    Poke 44,16 ;Basicstart nach $1001 verschieben (43 enthält ja immer noch den Wert 01)

    Poke 4096,0 ;Ich glaub das Byte vor dem Basicstart muss 0 sein oder so

    New ;Basiclisting löschen und Start effektiv setzen

    Load"Check13",8 ;programm an basicstart laden

    Run ;das Basic pgm liest data. Der checksummer code wird nach 2850=$0b22 bis $0d71 geschrieben

    ;programm beendet mit meldung "ok" (hoffentlich ;)

    Sys 2850 ;checksummer aktivieren

    New ;vorsichtshalber


    Jetzt kann man das wirkliche Programm eingeben. Der Checksummer ist aktiv und zeigt nach dem Enter drücken immer links oben die Checksum an.


    PS: Der Basicstart ist jetzt immer noch bei $1001. Das ist wohl beim Speichern und Laden von Programmen zu beachten.


    PPS: So ein Pfusch! Warum haben die den Checksummer nicht einfach nach $C000 geschrieben und danach starten mit sys 49152. Ohne Ändern des Basicstart. Entweder übersehe ich was oder die haben das wirklich unnötig verkompliziert. Und warum genau 2850 - die Lieblingszahl vom Programmierer? Wohl das Geburtsdatum der Schwiegermutter... :D :rolleyes:

  • SammyLightfood

    Habe herzlichen Dank. :thumbsup:

    Besonders danke ich Dir, dass Du das reparierte Programm hier als neues Disk-Images zum Download anbietest. Zum anderen sind Deine Erklärungen sehr hilfreich, um das Prozedere nachvollziehen zu können. Ich habe mir das Disk-Image heruntergeladen, werde es auf Diskette speichern und am C64 dann die neue Programmversion "Checksummer13" testen.


    Wenn der Checksummer dann tatsächlich funktioniert, können die eigentlichen Programme aus dem Buch im C64 eingetippt und mittels des Checksummers auf Richtigkeit der Eingabe überprüft werden. Ein funktionierender Checksummer ist also die Grundlage für die weitere Umsetzung des Buches in der Praxis auf dem C64. Nochmals herzlichen Dank. :)

  • BTW: Wenn Du die Listings scannst (wie oben), kannst Du die auch am PC durch eine Texterkennung jagen und dann per Copy/Paste in den Emulator kopieren. Erspart u.U. sehr viel langwierige und nicht wirklich sinnvolle Tipparbeit. Man muss zwar noch korrekturlesen, aber geht wesentlich schneller, als alles von Hand abzutippen.
    Schön für die Community wäre es natürlich, wenn dann nach und nach alle funktionierenden Listings als D64 irgendwo gehostet werden, z.b. in der F64 Wolke.

  • Sehr gerne! =)

    Vielleicht stellst ja mal was hier ein wenn bei den AI Programmen was interessantes rauskommt (oder auch die d64 oder so) :)

    Klar, das mache ich auch sehr gerne. :)


    Das erste Experiment (Programm) wird in dem Buch auf den Seiten 22 bis 26 beschrieben. Es ist der "DOC-Pseudodialog". Ich stelle das Disk-Image hier gerne für Interessierte zum Download bereit. :)

    LOAD"DOC",8


    Es macht zwar Spaß sich mit DOC zu unterhalten, aber es wird einem natürlich bald deutlich klar, was ein Pseudo-Dialog ist. Dem Programm fehlt natürlich die entsprechende "Datenbank", um mit einer menschlichen Kommunikation mitzuhalten. Was in dem kleinen Programm vorhanden ist, ist ein allgemein abgefasstes Vokabular, dass die zufällig gewählte Bemerkung oder Frage zu fast allen vom Dialogpartner eingegebenen Bemerkungen passt.


    Auf alle Fälle: DOC ist ein kleiner Spaß für Zwischendurch!

  • BTW: Wenn Du die Listings scannst (wie oben), kannst Du die auch am PC durch eine Texterkennung jagen und dann per Copy/Paste in den Emulator kopieren. Erspart u.U. sehr viel langwierige und nicht wirklich sinnvolle Tipparbeit. Man muss zwar noch korrekturlesen, aber geht wesentlich schneller, als alles von Hand abzutippen.
    Schön für die Community wäre es natürlich, wenn dann nach und nach alle funktionierenden Listings als D64 irgendwo gehostet werden, z.b. in der F64 Wolke.

    Danke für den gut gemeinten Hinweis. :)

    Das Programm ist einfach zu speziell bei der Eingabe. Bitte schaue Dir die beiden Bilddateien ex_11 und ex_12 in meinen Beitrag Nr. 5 hier an. Außerdem macht mir das manuelle eingeben des Programmlisting sehr viel Spaß. Als das Buch im Jahre 1987 herausgekommen ist, blieb einem auch nichts anderes übrig, als das Programm abzutippen.


    Klar stelle ich der Community alle funktionierenden Listings als D64 zur Verfügung - sobald ich diese selber abgetippt habe. Das Programm DOC findet man hier auf der aller neuesten Version von "Experimente KI.d64"

    Viel Spaß. :)

  • Hey Mikulask,


    genau mit den 3 Seiten aus Post #5 habe ich das schon gemacht und das Listing daraus so in WinVice übertragen - da ist nichts wirklich speziell dran.

    Nur SammyLightfood war schneller mit dem Ergebnis die zu helfen, daher brauchte ich hier nicht mehr zu posten, wollte dann aber wenigstens die Erkenntnis teilen, dass das gut funktioniert, hat mich knapp 10-15min gekostet.
    Wie lang hast Du zum Abtippen gebraucht?

    Ich persönlich finde Listings abtippen auch OK - ABER, wenn das menschenlesbare BASIC-Programme sind, da kann man ggf ja noch was lernen.
    NUR wenn das halt nur DATA-Zeilen, oder HEX-codiertes Assembler ist, hat man ja keinen Lerneffekt oder dergleichen - da würde ich mir das Getippe halt sparen, weil man seine Zeit besser nutzen kann.


    Just my 2cents! ;) Wünsche Dir -wieauchimmer im Detail umgesetzt- noch viel Spaß mit dem Buch und Danke schonmal für die Listings.

  • Das zweite Experiment wird auf den Seiten 27 bis 48 beschrieben. Das komplette Listing des lernfähigen Parsing-Programms beginnt ab Seite 42. Ich stelle hier die Seiten 41 bis 48 eingescannt zur Verfügung. Auf den Seiten 42 und 43 wird ein beispielhafter Demonstrationslauf beschrieben.


    Das neue Programm ist auf dem aktuallisierten Disk-Image "Experimente KI.d64", das hier wieder zum Download angeboten wird.

    LOAD"PARSING",8


    Mit Hilfe des Checksummers hat es bei der Eingabe keine Probleme gegeben, alle Prüfnummern stimmten überein. Trotzdem läuft der beispielhafte Demonstrationslauf nicht ganz rund. Es kommt leider nicht zu der Meldung

    "Druecken Sie eine Taste zum Vok.def."

    Vielleicht wird jemand die Ursache dafür erkennen :?:

  • Mikulask, was du jetzt brauchst sind Debugging-Methoden.


    Die einfachste ist einfach print Befehle einzubauen, wie zB: 2001 print "Zeile 2001 erreicht" und so weiter. Dann kannst du schon gut abschätzen wo das Programm läuft/steckt.


    Weiters hat zB Simons Basic eine Trace Funktion. Ich hab sie selbst nie ausprobiert, sollte aber funktionieren.

    Die schreibt dann beim Ablauf des Programms ständig die aktuelle Zeilennummer auf den Screen. Und ich glaub mit der Commodore Taste kann man den Ablauf bremsen. Hab grad keine Zeit, ist aber sicher witzig auszuprobieren.


    Das Final Cartridge 3 hat wohl auch ein Trace. Falls du Vice benutzt (was ich annehme) dann kannst du das FC3 als .crt einbinden

    (das .crt gibts auf csdb.dk)

  • PPS: So ein Pfusch! Warum haben die den Checksummer nicht einfach nach $C000 geschrieben und danach starten mit sys 49152. Ohne Ändern des Basicstart. Entweder übersehe ich was oder die haben das wirklich unnötig verkompliziert. Und warum genau 2850 - die Lieblingszahl vom Programmierer? Wohl das Geburtsdatum der Schwiegermutter... :D:rolleyes:

    Ein Blick in den Code fördert lustige Dinge zutage: Der Checksummer scheint auch im 128er-Modus lauffähig zu sein. Jedenfalls wird beim Start auf das Vorhandensein eines Basic7-ROMs geprüft und dann entsprechend ein Flag gesetzt. Im weiteren Verlauf wird ständig dieses Flag geprüft, damit die richtigen Einsprünge ins jeweilige Basic-ROM gemacht werden.

    Auf einem 64er setzt dieser Checksummer auch den Basic-Start neu, und zwar auf "direkt hinter dem Programm".


    Auf dem 128er sind die Pages $0b00, $0c00 und $0d00 für Bootblock und RS232-Ein/Ausgabepuffer vorgesehen, also wurde wohl deswegen diese komische Startadresse genommen.

    Wenn ich mal zuviel Zeit habe, assembliere ich separate Versionen für 64er und 128er, da kann die 64er-Version dann auch nach 49152 oder so...

  • Das dritte Experiment oder Programm in dem Buch ist Basis-Rac. Es wird im Buch auf den Seiten 49 bis 51 vorgestellt. Auch dieses Programm habe ich im Original-C64 eingetippt, auf Diskette gespeichert und stelle Interesseten hier das aktuelle Disk-Image "Experimente KI.d64" mit dem dazu gekommenen Programm zum Download bereit. :)


    Das neue Programm wird wie folgt geladen:

    LOAD"BASIS-RAC",8


    Viele Spaß damit. :)