Hallo Besucher, der Thread wurde 2,8k mal aufgerufen und enthält 13 Antworten

letzter Beitrag von Phasengleich am

"Hokube" Intro fertig

  • Huhu!


    Die letzten Wochen kam ich ja immer wieder hier im Forum an und stellte Fragen zu Carry Flag, Linien-Algorithmen und Einlesen von Daten.
    Das Ergebnis sieht man nun hier:


    http://csdb.dk/release/?id=156090


    Mein erstes "richtiges" Assembler Intro mit Musik. Klar, der Coder von OMG mit seinem grandiosen "Tunnel Vision" zieht in seinem Erstlingswerk viel schnellere gefüllte Vektoren durch die Gegend aber der nutzt auch nicht wie ich HiRes als einzigen Bildschirmmodus. Es ist ja erst der Anfang und ich denke man kann es trotzdem angucken. :-)


    Ohne die kompetente Hilfe aus Forum64.de würde es das ganz sicher nicht geben.

  • ich denke man kann es trotzdem angucken.

    Aber hallo :dance:applaus: !


    Beim Text hättest du vielleicht besser ein löschendes Space hervorschieben sollen (oder gleich die ganze Folgezeile löschen), wäre dann wohl besser lesbar gewesen.


    Bei der horizontalen Trennung hätten sich aber leicht noch verschiedene Farben angeboten.... Na egal.


    :thumbup:


    EDIT: Hast du da 2 Char-Screens am Wickel? Warum? Wollte eben $0400- einfärben und es wechselt fröhlich blinkend zwischen $0400 & $xxxx? hin- und her. Aber auch ein netter Effekt.


    EDIT2: Ah ja: $0400 -> $4400 / Bitmap $2000 -> $6000

  • Sehr chic! :thumbup: Für ein Erstlingswerk sehr beeindruckend! Wenn der Text im Interrupt gezeichnet würde, würde es evtl. etwas flutschiger wirken, weil dann nicht alles mit der niedrigen Framerate dargestellt würde. Aber in jedem Fall: weiter so :thumbsup: !

  • Danke für die Blumen. :-)


    Ja im Interrupt läuft nur die Musik. Der Würfel bewegt sich mit VIC Bank Switching und gekoppelt an den Würfel ist der Typer, der in zwei Bitmaps gleichzeitig schreibt damit es nicht blinkt.


    Ihr Erfahrenen werdet es bestimmt auch erlebt haben : Man merkt spät was man anders hätte machen können aber dann ist es zu spät etwas zu ändern ohne große Teile neu machen zu müssen.


    Grundsätzlich überlege ich mir beim nächsten Mal zuerst wo ich Musik ablege und erst dann wo weitere Daten hinkommen.


    Edit: dass $1000 scheinbar eine Art Standard Ablage für viele SID Stücke sind hatte ich gar nicht gewusst


    Auch werde ich Text nächstes mal im textmodus ausgeben und dafür im irq den Screen mode wechseln und dem c64 den Zeichensatz konkret übergeben per register Schalter. Effizient 6 pages Text x bzw y indiziert in zwei Bänke schaufeln im hires macht lahm und ist umständlich.

  • Effizient 6 pages Text x bzw y indiziert in zwei Bänke schaufeln im hires macht lahm und ist umständlich.

    Das hab' ich nicht ganz verstanden. Wie bringst du denn den Text denn in die Bitmap? Hast du mal einen Source-Code-Schnipsel davon?

  • Für die Textausgabe während der Laufzeit jeweils 1 Char pro Animationsphase::



    Und das passiert bevor das Intro losgeht, nämlich das Arrangieren der Chars ab $d800, das Charset liegt bei $c000 aber der C64 weiß nichts davon. Ich poke nicht ins ScreenRAM (1024 Byte) sondern 16 Bytes zu je 8 Bytes in 2 Bitmaps damit nichts flackert.



    Es gibt nur HiRes, sonst nichts, keinen Abschnitt, ab dem man Textmodus hat.


    Von MJ habe ich schon Optimierungstips zum Punktsetzen erhalten, es ist kostbarer Lernstoff. Ich denke mir das ja alles bloß aus und weiß noch nicht was andere in den letzten 30 Jahren erfunden haben um schneller zu sein. Die Bresenham Umsetzung ist zwar von mir, die Plot Routine aber aus dem C64v Intern (leicht abgewandelt) und ich war da eigentlich schon voller Respekt und dachte wie soll das besser gehen.


    Das nächste Intro wird schneller sein und mit mehr Farben.

  • Es gibt nur HiRes, sonst nichts, keinen Abschnitt, ab dem man Textmodus hat.

    Das war klar.


    configtable:
    sta $34d
    ldx $34d
    stx $fd
    rts

    ldx/stx -> sta ?


    Die 'chartables' hab ich jetzt theoretisch durchblickt (halt der Text -> eine Kommentierung hätte es vereinfacht zu verstehen [auch für einen selbst in x Tagen/Wochen. Geht mir aber nicht besser.]), die 32-Byte-Stückelung aber noch nicht :gruebel (vielleicht auch schon zu spät...).


    Optisch schöner wäre vielleicht gewesen, den Text unabhängig von der 'Kube'-Routine im Raster-IRQ zu malen und bei einem 'Kube-fertig'-Flag umzuschalten, da sie ja je nach Größe/Dauer verschieden schnell abläuft.


    Und das passiert bevor das Intro losgeht, nämlich das Arrangieren der Chars ab $d800, das Charset liegt bei $c000 aber der C64 weiß nichts davon. Ich poke nicht ins ScreenRAM (1024 Byte) sondern 16 Bytes zu je 8 Bytes in 2 Bitmaps damit nichts flackert.

    $d800 -> $c800


    Ah, ab $c800 liegen dann die fertigen Bitmap-Pixel für den Text.


    Nur so nebenbei: $02-$06 und $f7-fa sind normal auch frei verwendbar (statt Tape-Buffer $03xx).

  • Danke für den Zero Page Tipp.
    Die 32 Byte Stückelung von der du sprichst ist eine 256 Byte Stückelung und damit das x/y Indizierungslimit.


    Ein Char ist ja hier nicht mehr ein Byte sondern 8 Bytes. Ich baue vor Intro Beginn den Text nach einem index Plan ab $d800 auf indem ich sage "nimm jetzt das fünfte Zeichen aus dem Charset ab $c000 und mach es ab $d800 an Stelle 1. Dann das neunte an Stelle 2. Etc. Das geht über die Tabellen in der orderchar Routine.


    In typechar hole ich nur noch Char Weise ab was ab $d800 steht und schreibe Es zur Laufzeit in zwei Bitmaps. Dabei achte ich auf saubere Umbrüche und Positionierung beim loopen des Textes. Der Text ist 120 Zeichen lang. 120 animationsphasen hat eine Umrundungshälfte des Würfels. Das heißt, der Text beginnt und endet immer bei 0 grad und 180 grad.


    Wegen der Bitmap Sache habe ich auf einen Cursor verzichtet den ich ja nur in eine von 2 Bitmaps hätte schreiben müssen. Geblinkt hätte es von allein. War mir dann aber zu Performance lastig es hätte noch mehr den Würfel erlahmt.


    Die nächsten Intros werden entstehen mit anderen Strategien und wenn ich dann mehr CPU Zeit übrig habe kann ich auch mehr machen.


    Den Text habe ich "übersetzt " vorliegen d.h. Weiß in welcher 32er Zeile an welcher Stelle was steht ich hab es bloß nicht hier mit eingefügt.

  • @Mac Bacon


    Das höre ich von dem Schöpfer des Cross Assemblers den ich für das Projekt benutzt habe wahrhaftig gerne. ^^


    MJ hat mich zwischenzeitlich auf Techniken hingewiesen von denen ich gar nichts wusste und auch die Plot Routine im c64 Intern die ich benutzt habe ist schlagbar.


    Ich werde ein paar Tage lang etwas anderes machen und mich dann in MJs Optimierung vertiefen.