Posts by goloMAK

    KAPREKAR reloaded!


    Ich bin mir ziemlich sicher, dass ich vor etwa einer Woche in einem Mainstream-Medium (Spiegel? Süddeutsche?) einen Artikel zum Thema Kaprekar-Konstanten gelesen habe, doch jetzt finde ich ihn leider nicht mehr. :-(


    Bei Kaprekar-Konstanten geht es, kurz gesagt, um Folgendes: Man sortiert die Ziffern einer Zahl der Größe nach, dann noch einmal andersherum, dann bildet man aus den beiden die Differenz und fängt damit wieder von vorne an. In vielen Fällen landet man dann erstaunlicherweise bei derselben Zahl oder zumindest bei einem immer wiederkehrenden Zyklus von Zahlen.


    Näheres hier bei Spektrum.de.


    Auf jeden Fall hat mich das dazu inspiriert, das auch einmal auf dem C64 umzusetzen. Möglicherweise etwas umständlich, aber es läuft!


    Bilder:



    Viel Spaß beim Ausprobieren! :-)

    Files

    Es fängt immer harmlos an. Erst sind es nur ein paar POKEs, um "nur mal schnell die Farben zu ändern". Dann schon mal ein SYS-Befehl, um "den Cursor zu setzen". Und ehe man sich versieht, zählt man Taktzyklen und faselt von "undokumentierten Befehlen".


    Aber dann ist es zu spät! Auch reinstes, klares BASIC kann jetzt nicht mehr helfen.

    Wie gibt man denn bei ChatGPT mehrere Zeilen ein, oder dass er immer gleich jede Zeile einzeln absendet? :|

    Mit der Tastatur! :D



    Statt RETURN, für eine neue Zeile ohne Absenden SHIFT+RETURN drücken. ;)

    Oh, ich hatte ALT+RETURN probiert. :rolleyes:


    Habe nochmal aus Neugier deine exakte Fragestellung wiederholt, und es kam tatsächlich etwas anderes, allerdings noch Bekloppteres dabei heraus. Wollte es hier posten, aber das lasse ich jetzt lieber mal...

    Neulich fiel mir auf, dass ich immer noch Vice 3.5 am Start habe. Ja, warum? Weil ich das C64 Studio nicht zur Zusammenarbeit mit höheren Vice-Versionen bewegen kann! :-(


    Ich habe leider keine aussagekräftige Fehlermeldung. Beim Klick auf "Build and Run" steht da nur "Running..." und dann gleich wieder "Ready", ohne dass sich Vice gemeldet hat.


    C64 Studio 7.4 und 7.5 funktionieren einwandfrei mit Vice 3.5, aber nicht mit Vice 3.6 oder Vice 3.7. Die Einrichtung mache ich natürlich genauso (sind ja nur ein paar Klicks), und auch die Einträge in den Einstellungen sind die gleichen (ich lasse da die Voreinstellungen stehen).


    EDIT: Habe zwischendurch auch mal die Einstellungen sowohl von C64 Studio als auch von Vice gelöscht.


    Tja, wie gesagt, eine aussagekräftige Fehlermeldung sieht anders aus, deswegen habe ich den Fehler bisher auch nicht gemeldet, obwohl er mich schon lange plagt...


    Software:

    Windows 11

    C64 Studio 7.4 und 7.5 NET 4.8

    GTKVICE3.6 und 3.7

    Hast du evtl schon irgendwelche komischen Settings gespeichert ? Hast du VICE schon mit "-default" gestartet und es dann nochmal probiert ?

    Argh, sorry, mein Fehler. Ich hatte hier Vice 3.5 laufen und habe nicht daran gedacht, dass das einen Unterschied machen könnte. Unter Vice 3.7 funktioniert es wie gewünscht. :)


    Danke für die Mühen!

    Echter C64: CTRL+* (NICHT SHIFT)


    VICE: (symb. Layout)

    CTRL liegt auf Host KB -->> TAB

    * liegt auf Host KB -->> SHIFT+3 (bei meinem Tastatur Layout, für DE wohl anders)

    Also, CONTROL liegt bei mir auf "Strg", was ja auch irgendwie naheliegend ist. :)


    Auf der Tabulator-Taste liegt bei mir die Commodore-Taste.


    Das kleine Dreieck kriege ich jetzt leider immer noch nicht hin. :-(


    EDIT: Habe mir die Tastatur noch einmal angeschaut. Auf dem echten C64 müsste es doch Commodore-Taste+* sein. (Nicht Shift, aber auch nicht Control.)


    EDIT2: Laut Wiki soll man auf dem PC "CTRL+]" eingeben, das geht aber auch vom englischen Tastaturlayout aus.

    Ich sehe gerade, dass ich da oben irgendeinen Schlunz hochgeladen habe - aber egal, der Source im Kasten stimmt. :)


    Jetzt hat mir die Sache aber keine Ruhe gelassen, und ich musste einfach mal gucken, ob man da nicht noch etwas optimieren kann. Und tatsächlich: Da ging so einiges!

    • Die Reihenfolge der Zeilen umdrehen, dann kann man einfach die im ROM bzw. RAM eingebauten Tabellen (bei $ECF0 und $D9) verwenden, statt die vom Programm.
    • Das x-Register für die Sprite-Zeile nehmen, dann spart man eine Speicherstelle und ein paar Load-Befehle.
    • Statt immer wieder das aktuelle Byte mit der Bit-Tabelle zu verknüpfen, einfach die Bits rechts rausschieben. Wieder eine Tabelle weniger.
    • Einmal den "BIT-Trick" verwenden.

    Ergebnis: Statt 131 Bytes hat das Programm jetzt nur noch 75! 8o


    Nun ja, der praktische Nutzen hält sich in Grenzen, denn wirklich benutzen werde ich dieses Programm wohl nicht. Aber das war trotzdem mal interessant. Und kein Disrespect gegenüber Andy Finkel, denn der hat sicherlich am selben Nachmittag noch zwölf andere Programme geschrieben!


    Hier noch der Source-Code zum Vergleichen:


    Files

    • spedobj.asm

      (2.4 kB, downloaded 1 times, last: )
    • sped2obj.asm

      (1.97 kB, downloaded 1 times, last: )
    Quote

    written by Commodore engineer Andy Finkel in BASIC in 1982.

    Cool! Aber die Darstellung der Sprite-Matrix ist viel zu schnell für BASIC. Da habe ich mal geguckt... und tatsächlich: Das Programm enthält eine kleine Maschinensprache-Routine ab $C000. :)


    Vielleicht auch nichts Besonderes, aber ich habe sie mal aus Neugier zurückübersetzt, und bitteschön... hier ist sie.


    Files

    Ich finde die Idee schön, auch wenn ich das selbst nicht machen würde.


    Allerdings wäre ein kleiner, stellvertretender Gegenstand in meinen Augen passender als jetzt tatsächlich der wahrhaftige Brotkasten - vielleicht einfach eine Diskette?


    Inschriften auf dem Grabstein wurden ja auch schon als Möglichkeit genannt, da kann man jetzt etwas mehr oder weniger Lustiges nehmen ("?OUT OF DATA ERROR") oder vielleicht einfach seine Lieblingsfarben:


    POKE53280,6

    POKE53281,3

    POKE646,0

    PRINTCHR$(147)

    Wenn man C64-bezogen über BASIC redet, meint man in der Regel schon mehr als den reinen Sprachschatz, denn sonst hätten solche Aussagen wie "BASIC ist dafür zu langsam" keinen Sinn.


    Ein idealer Compiler würde das BASIC-Programm in effiziente Maschinensprache übersetzen, und spätestens dann wäre die Bedingung "keine Maschinensprache" locker ausgehebelt.


    Andererseits: Ohne Frischzellenkur in Form von Compilern oder natürlich Maschinensprache geht es anscheinend nicht, also was willste machen?