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.

  • Wir können ja eine Bonus-Runde mit zusätzliche Regeln einführen:

    • Das Programm beginnt nach den drei 0en am Ende des Basic-Programms.
    • Der Basic-Teil darf für keinerlei Setup etc. benutzt werden
    • Alle Register und ZP-RAM sind undefiniert

    Im Ergebnis zählt also nur der reine Maschinencode, der genauso auf jeder Plattform mit demselben Prozessor laufen würde.

  • Ich hatte da auch ziemlich viel Zeit reingesteckt, hab aber ab 4x etwas resigniert...


    Funktiionierende Versionen hatte ich auch einige, hab in der letzten Stunde aber ziemliche Grütze eingereicht :platsch: (kam direkt von einen Geburtstag... ... :D )


    Wie auch immer: Kein Grund zum grämen.


    @thrust: Das Ding ist durch. Bleib' uns aber bitte erhalten :dafuer: .

  • 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

    1. Das Programm beginnt nach den drei 0en am Ende des Basic-Programms.
    2. Der Basic-Teil darf für keinerlei Setup etc. benutzt werden
    3. Alle Register und ZP-RAM sind undefiniert
    Im Ergebnis zählt also nur der reine Maschinencode, der genauso auf jeder Plattform mit demselben Prozessor laufen würde.

    Zwar nicht mehr für diese Compo, aber vielleicht für die nächste Compo wäre das eine gute Grundlage. Das Herumtüfteln mit dem Code hat zwar viel Spaß gemacht (ist halt eine feine Denksportaufgabe), hat aber auch einen Nachteil: Der Code, der am Ende dabei herauskommt, ist im Grunde genommen praktisch so gut wie nicht zu gebrauchen, bleibt also eher eine akademische Fleißübung.
    In einem realen Programm könnte man natürlich nicht voraussetzen, daß $39 bereits die Adresse enthält oder sonst irgendeine Zeropage-Adresse einen bestimmten Wert aufweist oder Register zu Beginn 0 sind, sondern man wäre gezwungen, auch die Initialisierungsschritte mit einzubeziehen. Bei der Spriterotation würde das konkret bedeuten, daß z. B. die Adressen für Quelle und Ziel als Parameter übernommen und gespeichert werden müssen. Selbst wenn man davon ausgeht, daß das aufrufende Programm in einer Zeropage-Adresse einen Zeiger auf die Quelle übergibt, müßte man für das Ziel aber noch den ROL-Befehl per Selbstmodifikation patchen, da es eine Adressierungsart ROL (zp,x) nicht gibt. Allein diese Initialisierung würde schon etliche Bytes schlucken, so daß in einer realen Anwendung eine Drehroutine wesentlich länger ausfallen würde und nicht unbedingt kürzer wäre als die Größe eines Sprites (von den Tricksereien mit den Adressen gar nicht zu sprechen).
    Wenn es also auch darum gehen sollte, daß bei einer Compo nicht nur ein irgendwie kurzes Programm herauskommt, sondern auch ein real anwendbares (, was man dann als Codeschnipsel auf codebase 64 oder 6502.org zur Verfügung stellen könnte), wären die von alx und thrust2600 genannten Punkte sicherlich hilfreich.

  • Früher hatten wir Compos, wo die Programme mit einem JAM beendet wurden, um Platz zu sparen. Ihr denkt Euch wieder so einen Kram aus, der zwar schön ist, wo ich aber leider von Hand prüfen muss, ob die Regeln eingehalten werden, oder einen riesen Testpopanz aufbauen. Wer das in einer selbst veranstalteten Compo mit insgesamt ca 100 Eisendungen machen will, der kann das gerne tun. Soviel waren es nämlich insgesamt mit Verbesserungen bzw. nicht regelkonformen Beiträgen.


    Für mich war das hoffentlich für längere Zeit die letzte Compo, die ich ausgerichtet habe. Und dann jetzt noch diese Genöhle ...

  • Und dann jetzt noch diese Genöhle ...

    Sorry, aber Deine Reaktion kann ich nicht nachvollziehen. Hier nöhlt keiner herum. Es geht allein darum. konstruktive Vorschläge für eine kommende Compo zu machen. Es gibt keinen Grund, das persönlich zu nehmen.

    Früher hatten wir Compos

    Das heißt aber nicht, daß man es in Zukunft nicht auch anders machen kann.

    wo ich aber leider von Hand prüfen muss, ob die Regeln eingehalten werden, oder einen riesen Testpopanz aufbauen.

    Sorry, aber wenn ich mich recht erinnere, hatte Claus bei der Textkomprimierung auch schon eine Vorgabe gemacht, welcher Teil des Codes in die Bewertung mit einfließt und welcher nicht. Das gab es also schon. Was die Überprüfung anbelangt, so hat alx hierzu schon die passenden Bedingungen gestellt: Das Programm wird als Binärdatei an eine bestimmte Adresse geladen, verfügt also schon mal gar nicht über einen Header, sondern von vornherein nur über die relevanten Codebytes. Es kann dann vom Testprogramm als Unterroutine mit JSR angesprungen werden und muß mit RTS beendet werden. Das Testprogamm kann die Zeropage vorher komplett mit zufälligen Werten überschreiben. Das ist alles wahrhaftig kein Aufwand und nichts worüber man sich aufregen müßte.

  • Geht nicht um's grämen, war nur eine Reaktion auf Jeeks Beitrag.

    Das 'Grämen' hatte ich auf mich selbst bezogen. Und 'Jeek' ist halt 'JeeK' und manchmal auch ein 'JecK' :party2: . Man gewöhnt sich aber irgendwann halbwegs dran... ( ;) ).


    Ansonsten: ("M. J." / Ulli & Co.): Ist doch völlig egal, ob bei der Compo nun jegliche Schlupflöcher genutzt werden und wurden. War doch legal. $39 und die '0'-Basic-Ende-Bytes waren auch das erste, was ich reingebastelt hatte. Um was praxis-taugliches ging/geht es bei diesen Compos doch wohl eh nie. Und ein paar (fehlende) Bytes/Befehle machen es doch auch ganz schnell tauglich, wer mag. Also, was solls :nixwiss: . Ulli kann ich aber schon verstehen, bzgl. 'Rumgenöhle' :huh: .

  • Um was praxis-taugliches ging/geht es bei diesen Compos doch wohl eh nie. Und ein paar (fehlende) Bytes/Befehle machen es doch auch ganz schnell tauglich, wer mag. Also, was solls . Ulli kann ich aber schon verstehen, bzgl. 'Rumgenöhle' .

    Genau mein Gedanke. Auch wenn es nicht als rumgenöhle gedacht war.
    Regeln wurden gemacht, jeder hat versucht die so gut wie möglich zu biegen und auszureizen um eben das - zumindest für sich - kürzeste Programm hinzubekommen. Was ASM angeht kann ich da nicht nicht so ganz mitreden, aber es ging ja hier daraum die Möglichkeiten in wenigen Bytes umzusetzen.


    War meine erste Compo, wo ich auch "irgendwie" mitgemacht habe, aber für mich war sie sehr gelungen - zumal ich mit meinem Basic Gedöhns teilnehmen konnte.


    Für mich war das hoffentlich für längere Zeit die letzte Compo, die ich ausgerichtet habe. Und dann jetzt noch diese Genöhle ...

    Denke trotzdem, dass das "Genöhle" eher die Diskussion um Wünsche für kommende Compos geht und peiselullis Ausführung nicht kritisieren sollte. Vielleicht sollte man "Regeldiskussionen" für kommende Compos eher auslagern um es nicht als Kritik an seiner Durchführung zu verstehen.


    In jedem Fall denke ich, dass der Compo-Durchführende am Ende regelbestimmend sein muss, da er eben die Arbeit hat und die "Überprüfbarkeit" auch sicherstellen muss.

  • Ach, man muss das alles nicht so formal sehen.
    Es haben selten soviele Leute mitgemacht und es sind ja echt hochklassige Resultate dabei rumgekommen.
    Das ist doch immer so: Selbst als quasi alle Regeln feststanden wurde noch zig mal nachgefragt :)
    Insgesamt sind die Ergebnisse dieser compo ungleich anwendbarer als so manch vorangegangener (was ja auch nicht zwingend der Fall sein muss).
    Fuer mich ein schoenes Resultat wie flexibel 6502 Assembler letzten Endes ist, um selbst die Randbedingungen mit den drei 'leeren bits' so elegant zu loesen.
    Hut ab fuer alle Teilnehmer und den Compomeister Ulli!

  • Auch wenn ich letztendlich nichts abgegeben habe, habe ich in VBA und BASIC V2 was zusammengestellt und mir Überlegungen gemacht, wie das zu lösen ist, auch in ASM.


    Ich verstehe auch nicht so ganz, was "Praxistauglichkeit" mit der Compo zu tun hat, wenn es darum geht, das kleinste Programm abzuliefern.
    Mir ist schon klar, dass die Erfahrenen unter Euch trickslen und "cheaten" wo es nur geht, nur weil nicht alles in Stein gemeisselt werden kann (sonst hätten wir ein 20seitiges Reglement).
    Aber stört mich das wirklich? Nö! Der Weg ist das Ziel! Ich gönne es jedem von Euch, der "dreckig" programmiert hat, es war ja in den 80ern oft nicht anders, um das letzte Bit aus dem C64 auszureizen.


    Ich finde, Peiselulli hat alles richtig gemacht und hat eine tolle, interessante und auch für Anfänger (!!!) nachvollziehbare und umsetzbare Idee in diesen eingeschlafenen Compo-Threads geliefert.
    Ausserdem hat er mit der Art der Regeln auch BASIC Codern den Zugang ermöglicht, das sollte man auch mal sehr positiv hervorheben.
    Wenn ich zum Vergleich an die Text-Kompressions-Compo denke, die war nicht gerade für Anfänger geeignet (die aber nicht weniger interessant war, ich habe mich dort heftig eingelesen).


    Gemäss den Bräuchen dieser ASM-Compos müsste der Sieger eine neue Herausforderung bestimmen.
    Aber das muss nicht heute und morgen sein, aber vielleicht in absehbarer Zeit, damit man vielleicht vor Ostern noch was machen kann?

  • Ich fand die Compo auch äußerst gelungen. Es war eine schöne Aufgabenstellung, die viele Teilnehmer (mit Asm und mit BASIC) angelockt hat. Danke für die Idee und die Durchführung!
    Ich würde mir das "Genöhle" nicht zu Herzen nehmen, denn natürlich kann man immer irgendetwas anders machen oder sich für andere Details entscheiden, aber das entscheidende bei einer Compo ist doch, dass es sie überhaupt gibt und das klare Regeln abgesteckt werden - und das ist hier toll gelungen. Vielen Dank dafür!

  • Ich finde, Peiselulli hat alles richtig gemacht und hat eine tolle, interessante und auch für Anfänger (!!!) nachvollziehbare und umsetzbare Idee in diesen eingeschlafenen Compo-Threads geliefert.

    Finde ich auch. :thumbup:


    Aber, peiselulli hat da wohl etwas "falsch" verstanden. Wer allgemein von M.J. die Beiträge liest wird bemerkt haben, das er immer einen sehr höflichen Ton und Umgang pflegt.
    Da finde ich "genöhle" etwas unfair aufgedrückt.


    Diese Compo war richtig gut, weil auch User vom anderen Tellerrand mitgemacht haben oder noch dabei sind wie ich.

  • Das Thema Praxistauglichkeit finde ich hat was. Unsere community ist klein und es ist eigentlich auch mal Gut wenn sich die Könner von den Lehrlingen in einer compo nicht abschirmen.


    Das ist im Forenalltag auch nicht der Fall. Man erhält fantastische, fundierte Hilfe zu allen Fragen.


    In Compos wie auch in Demos ficht die Elite aber unter sich ihre Top 10 aus und der Rest steht daneben und staunt.


    Das kann so bleiben aber warum nicht Ausnahmen machen mit anderen Themenstellungen?


    Zum Beispiel : "Schreibe einen wiederverwendbaren Algorithmus zum herausfinden des höchsten und niedrigsten Wertes in einer Tabelle " mit Parameter Übergabe an die Routine.


    Sowas kann man immer brauchen.


    Der Bewertungsmaßstab heißt dann nicht "kurz" oder "schnell", sondern "raffiniert / elegant / schön" wie bei einer mathematischen Methode, die einfach durch Ihre Schönheit überzeugt.


    Natürlich wird das Urteil dann subjektiv. Das kann man ab mildern indem man eine Jury bildet die ein Punkte Ranking bis 100 vergibt und am Ende zählen die Notendurchschnitte in Punkten.


    Auch kann man im Forum dann Argumente austauschen und anderer Meinung sein.


    Von den Fakten (schnell, kurz) abrücken ist immer ein Risiko. Aber das führt dann zu krassen Hacks, die man nicht so gut versteht und nur unter bestimmten Bedingungen anwenden kann.


    Die subjektive Methode birgt Streitpotential und Bewertungsunschärfe, liefert aber eher anwendbare und klarer verständliche Ergebnisse.


    Was ich meine ist, unter Wettbewerbs Bedingungen Code wie aus dem Lehrbuch zu schreiben. Wie ein guter Mathe Lehrer.


    Hacken und tricksen lernt man, nachdem man weiß wie es auf die saubere und OS freundliche Art geht.

  • Das 'Grämen' hatte ich auf mich selbst bezogen. Und 'Jeek' ist halt 'JeeK' und manchmal auch ein 'JecK' . Man gewöhnt sich aber irgendwann halbwegs dran... ( ).

    Hmm, ich hab jetzt keine Ahnung was wirklich gemeint ist und was die Spitze hier soll, aber so geht es mir auch nicht selten mit Hexworx' Aussagen. ;)



    Aber zum Thema: Ich möchte auch nochmal aus meiner Sicht festhalten, dass die Compo tadellos war und auch glaube peiselulli auch viele (inklusive mir) sich zur Compo-Ausrichtung lobend und dankend geäußert haben. Ich glaube, das wissen wirklich die meisten zu schätzen und erahnen auch, wie aufwändig sich die Compo-Ausrichtung ist oder sein kann. Der Dank und das Lob scheinen aber wie weggefegt und was bleibt ist die Rezeption von Vorschlägen als mindere Kritik (AKA "Genöhle"). Das ist eines Diskussionsforums nicht wirklich würdig. Meinungen sollten gehört werden und wie schon gesagt, ist muss man sich nicht alles zu Herzen oder tief persönlich nehmen. Es ging ja nicht um die konkrete Durchführung - die ist so wie sie eben war. Passt. Punkt. Obwohl ich zum Modus (hinsichtlich einer solchen Compo im Allgemeinen) etwas angemerkt habe, hat es mir dennoch ausgesprochen gefallen und ich habe dabei viel gelernt. Aber darf man deswegen dann nichts mehr sagen? Man kann freilich, aber muss nicht (es war wohl auch nicht beabsichtigt), Vorschläge und Wünsche als "Angriff" sehen. Aber ich glaube, wir können hier im Forum, das mit genügend Distanz wahrnehmen und über diesen Dingen stehen, ohne immer alles haarklein und im Detail zu formulieren, wie etwas gemeint ist, damit sich ja keiner irgendwie gekränkt fühlt oder so.

  • Mir hat die Compo auch gefallen... hat Spaß gemacht und ich bin peiselulli auch dankbar für die Rückmeldung zu den Einsendungen. Manchmal rutscht einem ja noch ein Fehler durch - gut, wenn da eine prompte Rückmeldung kommt.


    Bytebreaker: das was Du wünscht ist für mich eher der Maßstab für den Forenalltag. Sprich, wenn man was programmiert für's Forum, _sollte_ es nachvollziehbar, übersichtlich und elegant sein.


    Die Compos sind dagegen eine kleine Auszeit... einfach mal die Sau rauslassen ;)

  • Ich war in letzter Zeit viel unterwegs und deshalb kommt der Quelltext zu meinem Beitrag erst jetzt.



    Ich muss zugeben, dass ich es diesmal etwas verkackt habe. Ich war der Meinung, dass ich in jedem Fall vorher die Daten durch Kopieren in Sicherheit bringen muss, weil ich zuwenig Platz zum Rangieren habe. Das stimmt aber nicht.


    Ich brauche immer die Angaben, wo ungefähr gerade die beste Lösung liegt. Wenn ich zum Beispiel gewusst hätte, dass 43 Byte möglich sind, dann hätte ich gewusst, dass mein Ansatz falsch ist und es einen besseren geben muss. So habe ich nur meinen Ansatz mit Gewalt in den 4x Bereich gequetscht.


    Die Compos machen mir immer viel Spaß. Aber ab einem gewissen Grad bin ich mir unsicher wegen der Regeln. Es war zum Beispiel vorgegeben, dass das Zielsprite gelöscht werden soll, obwohl es nach einem Reset auf 0 gesetzt wird. Mein Programm geht aber zum Beispiel davon aus, dass im Basicspeicher irgenwo in den ersten 256 Bytes drei Nullen stehen. Ansonsten stürzt es beim Laden ab. Davon kann man aber eigentlich nicht ausgehen. Der Speicher kann ja irgendwie belegt sein. Also wenn man "sauber" programmiert, muss man mein rts durch 3 Nullen ersetzen und mein Programm hat 51 Bytes.

  • Sieht interessant aus, vor allem wegen dem illigalem Opcode.

    Opcodes, oder? Ich seh SHA, RLA ...



    Ich brauche immer die Angaben, wo ungefähr gerade die beste Lösung liegt. Wenn ich zum Beispiel gewusst hätte, dass 43 Byte möglich sind, dann hätte ich gewusst, dass mein Ansatz falsch ist und es einen besseren geben muss. So habe ich nur meinen Ansatz mit Gewalt in den 4x Bereich gequetscht.

    Ja, das stimmt. Bei dieser Compo waren so viele Freiheitsgrade (ist jetzt nicht negativ gemeint), dass man sich schon sehr leicht mit einem Ansatz vergaloppieren konnte. Hätte es diese Freiheitsgrade gegeben, wäre vermutlich das Teilnehmerfeld an der Spitze dichter gepackt gewesen (vermute ich mal so).
    Aber trotzdem, ein neuer Ansatz - vergleiche Acorns Lösung - musste dennoch auf vielen unterschiedlichen Fronten eine Einsparung mitbringen:

    • Eigenheiten BASIC-Zeilensyntax ausnutzen.
    • Zero-Page-Adressierung verwenden und die passenden Zero-Page-Register finden (Anfangszustand)
    • Eine optimale Nutzung von Registern und Zeropage in einer Anordnung, die die Zustände nebenbei erkennbar machen (ohne extra Vergleiche etc.), also von möglichst vielen Anfangszuständen und Nebeneffekten profitieren.

    Das ist in der Tat recht anspruchsvoll, so dass man sehr schnell in einem Ansatz hängen bleibt (weil eines das andere behindert) bzw. einen optimaleren Lösungsast leicht übersieht. So gesehen war auch die Zeit für bis zur Abgabe aus meiner Sicht sicher nicht zu lange angesetzt. Bei mir ist es doch schon recht knapp geworden, zumal ich mich auch noch mit einer BASIC-Variante auseinandergesetzt habe. :rolleyes: