OT: Neue C64 ASM/Basic Compo : Dreh' das Sprite [Alternative Systeme]

  • Chagizzz schrieb:

    syshack schrieb:

    Zum Warmlaufen, habe ich es in Excel VBA gelöst. ca. 12 Zeilen Code ohne "Optimierung".
    Ja, lacht nur...
    Und wieviel Bytes? Wie gut, dass der C64 serienmäßig VisualBasic kann ;)
    Es ging mir darum, das Prinzip und Problematik mal grundsätzlich zu verstehen. Da ich VB/VBA am besten kenne, macht das für meine Zwecke Sinn.
    Jemand anders würde das vielleicht auch in Python o.ä. mit Arrays zu probieren. Oder halt direkt in 6502/Z80 ASM. Oder in Brainfuck.
    Das könnt Ihr sehen wie Ihr wollt.
    ___________________________________________________________
    Meine Kreationen: Deviant Art | Toonsup | Flickr | Youtube
    | Twitter
    Avatar: Copyright 2017 by Saiki
  • syshack schrieb:

    Es ging mir darum, das Prinzip und Problematik mal grundsätzlich zu verstehen. Da ich VB/VBA am besten kenne, macht das für meine Zwecke Sinn.
    Jemand anders würde das vielleicht auch in Python o.ä. mit Arrays zu probieren. Oder halt direkt in 6502/Z80 ASM. Oder in Brainfuck.
    Das könnt Ihr sehen wie Ihr wollt.
    Sorry, war doch nur Spaß. Ich verstehe das gut. Um das Grundprinzip zu verstehen, nutzt man die Mittel, mit denen man sich am Besten zurechtfindet - oder die man eben gerade hat.

    Und wirst Du Deine Erkenntnisse jetzt in Basic2.0 oder ASM umsetzen. Unabhängig von einem unmöglichen Sieg mit einer Basic-Variante interessieren mich die anderen Basic-Versuche ja auch - übrigens auch Dein VB-Code.

    :woot: :schreck!: So... und jetzt habe ich mich gerade ertappt, dass ich beim Schreiben schon gucke, ob ich nicht hier und da ein paar Bytes einsparen kann. :wand
    Ich beschäftige mich eindeutig zu viel mit der Compo!!!
    carrier lost...
  • Es wird bunt auf dem Bildschirm. :puhh:



    Das Muster ist aber noch falsch. Ohne Optimierungen, aber mit selbstmodifizierenden Code bei 80 Bytes.

    Aufm Z80 natürlich. :D

    Damit kann ich offiziell nicht mitmachen, aber ich wollte mal sehen wie weit ich beim Z80 komme.
    Mitwäre das nicht passiert! :prof:
    :syshack: Meine 3D-Drucker Teile auf thingiverse.com/oobdoo/designs :strom:
    Sammlung | 91 Bücher bzw. 25.261 Buchseiten mit Z80/8080 Power
  • Ich habe mir vor Tagen mal in Excel was gebastelt, in der Hoffnung so dichter an eine Lösung zu kommen.



    Drehen.zip

    Ich bekomme zwar ein Sprite angezeigt, die Drehung geht aber völlig nach hinten los. :(

    Vielleicht kann einer damit was anfangen oder es ist für die Tonne weil in der Tabelle schon einen Denkfehler gemacht habe.
    Mitwäre das nicht passiert! :prof:
    :syshack: Meine 3D-Drucker Teile auf thingiverse.com/oobdoo/designs :strom:
    Sammlung | 91 Bücher bzw. 25.261 Buchseiten mit Z80/8080 Power
  • Bytebreaker schrieb:



    Vor allem : wie willst du das Visualisieren wo der CPC doch keine sprites kennt?

    Nimmst du eine Matrix aus Charset Elementen und drehst über chars? Oder bietet das Video RAM eine analoge Byte Struktur?
    Ob man das Sprite nennt, PlayerMissile, Shape, BlitterObject oder sonstwie. All diese grafischen Objekte liegen doch als Bitmuster im Speicher vor und können der Hardware entsprechend auf den Bildschirm gebracht werden.
    Ich habe einfach einen Speicherbereich von 3x21 Byte mit Zufallswerten definiert, dargestellt und versucht das zu drehen und darunter nochmal darzustellen. Bisher kommt aber nur Müll dabei raus.
    Das liegt daran, weil ich bisher immer noch keinen Plan habe wie ich das umrechnen soll. Alle bisherigen Versuche sind fehlgeschlagen. :(
    Mitwäre das nicht passiert! :prof:
    :syshack: Meine 3D-Drucker Teile auf thingiverse.com/oobdoo/designs :strom:
    Sammlung | 91 Bücher bzw. 25.261 Buchseiten mit Z80/8080 Power
  • @oobdoo

    Nimm doch Drazils String Ansatz. Der ist plattformunabhängig und in Basic umsetzbar.
    Ich interpretiere, dass du den Video Speicher des CPC mit Zufallswerten beschreibst im Wissen, wie diese Werte auf dem Video Display umgesetzt werden und wie sie gedreht aussehen müssen?

    Mach es doch erstmal mit strings in basic und dann erst in Hardware und asm.
  • oobdoo schrieb:

    Ich habe einfach einen Speicherbereich von 3x21 Byte mit Zufallswerten definiert, dargestellt und versucht das zu drehen und darunter nochmal darzustellen. Bisher kommt aber nur Müll dabei raus.
    Das liegt daran, weil ich bisher immer noch keinen Plan habe wie ich das umrechnen soll. Alle bisherigen Versuche sind fehlgeschlagen.
    Der Trick/die Aufgabe liegt halt teils/vorrangig beim Carry-Flag.

    Im Z80 wäre ich allerdings auch planlos.
    Read'n'Blast my jump'n'stop-text-sprite-scroller Select A Move

    Ex-TLI (The Level 99 Industries) & Ex-TNP (The New Patriots) & Ex-TEA (The East Agents) & ?
  • oobdoo schrieb:

    Bytebreaker schrieb:



    Vor allem : wie willst du das Visualisieren wo der CPC doch keine sprites kennt?

    Nimmst du eine Matrix aus Charset Elementen und drehst über chars? Oder bietet das Video RAM eine analoge Byte Struktur?
    Ob man das Sprite nennt, PlayerMissile, Shape, BlitterObject oder sonstwie. All diese grafischen Objekte liegen doch als Bitmuster im Speicher vor und können der Hardware entsprechend auf den Bildschirm gebracht werden.Ich habe einfach einen Speicherbereich von 3x21 Byte mit Zufallswerten definiert, dargestellt und versucht das zu drehen und darunter nochmal darzustellen. Bisher kommt aber nur Müll dabei raus.
    Das liegt daran, weil ich bisher immer noch keinen Plan habe wie ich das umrechnen soll. Alle bisherigen Versuche sind fehlgeschlagen. :(
    Magst mal Sources posten? Evtl kommt mir ja eine Idee?
    Hier könnte ihre Signatur stehen!
  • @oobdoo (etwas anschieb):

    Meine Lösung in Excel (basierend auf das Excel Bild/File weiter oben im Thread) funktioniert, ist aber prinzipiell nicht ganz korrekt (hatten wir schon besprochen):
    Der Hintergrund ist dass der Speicher ja 3x8 Bit Werte in Bytes zusammenfasst und man nicht einfach wie im Excel einen Loop von 24 Spalten machen kann pro Zeile, wie ich es gelöst habe, sondern es müssen 3x8 Bit pro Zeile verarbeitet werden.

    Für eine Andere Systeme Lösung würde ich persönlich auch nicht Zeichen wie * oder - für die "Bit gesetzt/nicht gesetzt" Representation nehmen, sondern 1 oder 0.
    Das hat den Vorteil, dass man mit Bool'sche Operatoren wie AND/OR/NOT arbeiten kann, um zu prüfen, ob ein Bit gesetzt ist. Potentiell ist es dann in einem ersten Wurf auch in ASM ähnlich (wie Hexworx schrieb, beim 6502 kann man dort mit dem Carry was machen --> schau dir mal, welche denkbare Operationen das Carry-Flag setzen). Für Loco BASIC: Zwei zweidimensionales Integer Arrays sollte dazu genügen, um die beiden Sprites als Speicherbereiche zu simulieren (wobei technisch gesehen, die Bits ja eindimensional im RAM hintereinander abgelegt sind).

    Für Loco BASIC sollte das dann auch keine Hexerei sein. Meine Excel Lösung hast du ja, du musst für eine BASIC Variante, "nur" die 8 Bit Gruppen als zusätzliche Schleife nehmen, zumindest wäre das mein Ansatz, den ich aber im Moment wegen anderen dringenden Sachen auf's Eis gelegt habe.

    Die Berechnung der Zielposition siehst Du ja in meinem Excel auch.
    ___________________________________________________________
    Meine Kreationen: Deviant Art | Toonsup | Flickr | Youtube
    | Twitter
    Avatar: Copyright 2017 by Saiki

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von syshack ()

  • Bytebreaker schrieb:

    @ syshack

    Ein String Array kann man aber besser plotten.Und es geht ohne bool. Es wäre einfacher.
    Genau, die Stringvisualisierung hatte ich ja auch erwähnt um VOR/NACH der byte/integer array rotation das Ganze platformunabhängig darstellen zu können.
    Der Spezialist ist ein Barbar, dessen Unwissenheit nicht allumfassend ist.
    Stanislav Lem 1995

    Ewig laufende Projekte ;) Click
  • Bytebreaker schrieb:


    Mach es doch erstmal mit strings in basic und dann erst in Hardware und asm.
    Ich versteh nicht einmal die BASIC Version von drazil. Die Formeln 8000-8070 sind schon zu hoch für mich. Keine Ahnung wofür diese ganzen Z Variablen sein sollen. :schande:
    Mitwäre das nicht passiert! :prof:
    :syshack: Meine 3D-Drucker Teile auf thingiverse.com/oobdoo/designs :strom:
    Sammlung | 91 Bücher bzw. 25.261 Buchseiten mit Z80/8080 Power
  • oobdoo schrieb:

    Bytebreaker schrieb:

    Mach es doch erstmal mit strings in basic und dann erst in Hardware und asm.
    Ich versteh nicht einmal die BASIC Version von drazil. Die Formeln 8000-8070 sind schon zu hoch für mich. Keine Ahnung wofür diese ganzen Z Variablen sein sollen. :schande:
    Der Teil ist zur 3d->2d Transformation von Koordinaten.
    Der Spezialist ist ein Barbar, dessen Unwissenheit nicht allumfassend ist.
    Stanislav Lem 1995

    Ewig laufende Projekte ;) Click
  • @oobdoo

    Nimm mal ein Dame oder Mühle Spiel und leg Dir aus einer 3x3 Steoine Matrix ein einfaches asymmetrisches Muster auf den Tisch. Überlege, wie Du die Steine umgruppieren musst um für eine 90 Grad Drehung zu sorgen.

    Überlege, wie man die Methode des Von hand Drehens in einen Algorithmus überführen kann.

    Der Aufbau des CPC Video RAMs ist völlig anders als bei einem C64 Sprite und völlig anders als beim C64 VideoRAM. Du hast Sprites, Player Misslies und Co alle in einen Topf geworfen als wären sie überall gleich aufgebaut. Aber das ist nicht so. Daher hätte selbst ein korrekter Excel Algorithmus 1:1 auf CPC Speicher angewendet ein falsches Ergebnis erbracht.

    Nach der Compo muss man mit Erklärungen nicht mehr groß hinterm Berg halten. Dann wird es sicher auch für Dich klarer.