Hallo Besucher, der Thread wurde 61k mal aufgerufen und enthält 482 Antworten

letzter Beitrag von Haubitze am

Neue C64 ASM/Basic Compo : Dreh' das Sprite.

  • Da im Ergebnis die Assembler-Sources nicht mit dabei waren, hiermit nachgereicht. Ich würde alles Sources gerne gesammelt haben. Auch wenn's recht mühsam ist, das jetzt allle ihren Sourcecode einzeln hier posten müssen und man das so einsammeln muss ...
    Bei der Vielzahl der 4x-Lösungen hat meine 50er-Lösung zwar nur Rang 8 erreicht. Hier der Vollständigkeit halber auch der Sourcecode:

    Neben der obligatorischen $39-Einsparung, ist der Spaltenzähler wie bei anderen auch als 8-Shift-Zähler ausgebildet. Dieser bekommt seine Grundinitialisierung von Exponent der letzten Floatingpoint-Zahl (Auswertung des Sys-Ausdrucks), welcher als positiver Wert immer >= $80 ist. Das gesetzte Bit 7 brauche ich als initialen Zustand (Rest egal).
    Für den Optimierungschritt in Zeile 38. bis 41. war der Wald vor lauter Bäumen nicht mehr zu sehen. :S
    Also statt
    sec
    !by $24
    loop
    clc
    rol ...
    beq byte
    dann
    sec
    loop
    rol ...
    clc
    beq byte
    scheint jetzt so offensichtlich.
    Acorns tolle Lösung schaut für mich jetzt so klar aus, als hätte nie eine andere geben können. :D
    Wie dort noch $B2 für X zu nehmen und Y in Ruhe zu lassen, damit damit A löschen kann (ich hab da X verwendet und damit die X-Ansätze von Acorn verbaut), ist das, was ja bereits im Thread erwähnt wurde: Wenn man stecken bleibt, noch mal von Null weg das Programm neu schreiben, statt das bestehende versuchen zu optimieren. ;)


    Also wirklich tollle Erkenntnisse, die die Compo hier geliefert hat. Danke an peiselulli als Ausrichter und an alle, die hier mitgemacht haben! :thanx:

  • Bin begeistert über die Kreativität :) .. vor allem die Basicversionen hauen mich um ;)
    Ich muss mir die einzelnen Beiträge demnächst mal in Ruhe anschauen.
    Der Vollständigkeit halber hier noch mein Quellcode. Ich hatte ein paar Probleme herauszufinden wie ich das mit Turbo Ass löse ...


  • Zur Basicnachbetrachtung kann ich nur sagen: Top, ein perfekter Abschluss für eine schöne Compo! :thumbsup:


    Ich werd' mir von Zeit zu Zeit nochmal die Lösungen anschauen und sacken lassen. Sind viele kleine Kniffe drin.

  • Zitat

    Ich würde alles Sources gerne gesammelt haben. Auch wenn's recht mühsam ist, das jetzt allle ihren Sourcecode einzeln hier posten müssen und man das so einsammeln muss ...

    Das habe ich von vorne rein abgelehnt. Es war so schon schwierig genug, die ganzen Einsendungen zu sammeln, zu testen und gegebenfalls alte Versioen rauszuschmeissen. Alle haben mir ihre Sourcen auch nicht gesendet. Eventuell war da ja auch der eine oder andere Monitor-Coder dabei ;-)

  • Gratulation an Acorn, wann gibt es die nächste Compo? :D
    Vielen Dank auch an alle anderen Teilnehmer und besonders an peiselulli fürs Ausrichten und das interessante Thema.
    Hier mein Source:

    Ich hatte auch kurz überlegt, die drei Nullen wegzulassen, aber auf Nullen im Speicher zu hoffen war mir dann doch zu dreckig. Ich hatte ja schon ein schlechtes Gewissen, das RTS einzusparen...

  • Hier mal eine Zwischenversion mit den Sourcen zusammengetragen und in die Ordner eingefügt.


    Wenn ich nichts übersehen habe, fehlen noch die Sourcen von 5 Teilnehmern:


    ASM/BAS Programm Name
    ------------------------------------------
    ASM alx_rot-sprite-alx-v4.prg
    ASM Gold_Breaver_cssprrot.prg
    ASM Haubitze_asm-combo-rolror.prg
    ASM mafiosino_sprite2.prg
    ASM ssda_drehsprite-ssdsa-asm-20170205.prg


    DrehSprite_Solutions+Src.zip

  • Ich hatte auch kurz überlegt, die drei Nullen wegzulassen, aber auf Nullen im Speicher zu hoffen war mir dann doch zu dreckig. Ich hatte ja schon ein schlechtes Gewissen, das RTS einzusparen...

    Zwei Nullen reichen, wenn es sich dabei um das erste und dritte Nullbyte im Endmarker handelt

  • Ich habe ja nun den letzten Platz belegt.
    Zum Lernen für all die, die nicht durch die Zulassung gekommen sind, hat das aber vielleicht doch einen Vorteil, weil meine Lösung nichts tut außer auf dem simpelsten Weg zu funktionieren. Da ist nichts optimiert/gekürzt/getrickst, was einem Anfänger evtl. das Verständnis erschwert.


    Daher poste ich hier die erste Version die bei mir funktioniert hat noch bevor ich angefangen habe mit Doppelpunkten und Leerzeichen killen etc.


  • Irgendwie irgendwo irgendwann scheint ein Buchstabe meines Usernamens "ssdsa" abhanden gekommen zu sein, hm. Die Buchstaben sind die Initialen meines Namens.
    Hier ist jedenfalls mein ASM-Source (zu "ssda_drehsprite-ssdsa-asm-20170205.prg"):


  • hatte die sourcen aber mit "eingereicht"... hier nun.


    Was die Rahmenbedinungen betrifft hätte ich mir soetwas gewünscht:
    - ein assembler-programm mit ladeadresse 0x1000 was per sys 4096 gestartet wird
    - der zugriff auf folgenden speicher ist erlaubt: 0x00fb-0x00ff, 0x0340-0x03ff, 0x1000-0x1fff
    - jeglicher speicher (aussder dem ausgangs-sprite und dem geladenen programm) kann beliebigen inhalt haben


    damit kommt es nicht darauf an wie gut man mit basic trickst bzw. ausnutzt dass irgendwo bereits passende bytes liegen

  • Das Leben ist kein Wunschkonzert... ich fand einige Beschränkungen auch fies, aber hey - gerade das macht die Aufgabenstellung interessant. Sonst hätte ich was mit Spritekollision probiert :D


    Das Einzige, was mich grämt - so viele Basiceinzeiler und kein Lebenszeichen vom König der Einzeiler... :bgdev naja, vermutlich hat er's nicht über's Herz gebracht, geliebte Doppelpunkte für nen möglichen Sieg zu opfern :D

  • Dann wären Dir aber diese Tricksereien entgangen, und das wäre doch Schade

    Das ist schon richtig, hat auch etwas für sich - um den Master of Dirtyness zu küren - klar. Aber ich hätt' mir auch etwas restriktivere, maschinenneutralere Vorgaben gemäß alx gewünscht, zumindest Hinblick auf die Vergleichbarkeit zu anderen CPUs (wo man jetzt für deren Lösung sozusagen den Memory-Snap-Shot des C64 als Grundzustand vorausetzen muss - das verzerrt etwas). ;)