Hallo Besucher, der Thread wurde 17k mal aufgerufen und enthält 84 Antworten

letzter Beitrag von sauhund am

Klein anfangen: ESI-artiges Cracktro in ASM nachcoden

  • Ja, entschuldige die thumbe Frage, den Menupunkt kannte ich, wusste bloß bisher nicht recht, wo man diese virtuellen Cartridges herkriegt. Danke für den Link! Vielleicht stochere ich ja jetzt nicht mehr ganz so im Nebel bzgl. Speicherverwaltung :)

  • Hi!


    Beim Musik-Rippen haben mir inzwischen Colt Seavers und Chuck Norris (fragt nicht) geholfen. Zumal ersterer (zu Recht) an dem Song hing, finde ich das hochanständig von ihm. Außerdem war das Ziel des Freds ja möglichst ein 1:1-Nachbilden des Demomaker-Loaders als ASM-Intro, das so sinnvoll im Speicher liegt, dass man es gut verlinken kann. Ich danke für alle Bemühungen von Lobber in Sachen Daglish-Rippen, vielleicht habe ich ja trotzdem was dabei gelernt/raffe es doch noch ;)


    Dem Verlinken selbst möchte ich mich später widmen, zunächst will ich einen Scrolltext integrieren. Dazu muss ich mich erstmal ein wenig schlauer machen.


    Zur Beruhigung schonmal den aktuellen Code und ein das Cracktro/Packtro.

  • Versuche gerade duch die Codebase-Beispiele vom guten Monte Carlos/BCC für Scrolling durchzusteigen... Eieiei... schöner Kram, direkt gleich was zum Angeben (bidirektionaler 1X1). Habe es auch für Relaunch-Syntax übersetzt. Läuft einwandfrei. Aber verstehen tu ich diesen Code noch lange nicht... :nixwiss: Vielleicht 'ne Nr. zu hart für den Start...


    Hat nicht mal jemand für Checknixe wie mich einen Tipp, wo ich einen Quelltext für simplen ein-direktionalen 1X1 mit Standard-Charset ohne Schnickschnack finde? So haben die ersten ESI-Intros ja schließlich noch ausgesehen (C= Chars weiß auf schwarz von rechts nach links). Erste Übung für mich könnte dann ja sein, das Ganze von Zeile 0 in Zeile 24 zu verlegen...


    PS: Jaaa, SuFu, ich weiß, aber die Board-Suche ist wirklich ziemlich zickig und Google/Codebase gibt mir zwar 'ne Menge Treffer, aber I still haven't found what I'm lookin' for (jedenfalls nicht so einfach, wie ich es mir wünsche)

  • Für die Scrollerroutine in meinem Musikdemo-Programm hab ich den hier als Vorlage genommen und selbst nach Bedürfnissen abgewandelt:


    http://www.youtube.com/watch?v=R8uFrdn_uZQ


    Klar, ist immer etwas doof, was aus einem Video abzutippen, aber der Code ist recht elegant und imo auch sehr gut nachzuvollziehen, sprich leicht auch seinen eigenen Vorstellungen anzupassen. Ich habs ja auch geschafft ;).


    Gruß
    hobbycoder

  • ...
    Klar, ist immer etwas doof, was aus einem Video abzutippen, aber der Code ist recht elegant und imo auch sehr gut nachzuvollziehen, sprich leicht auch seinen eigenen Vorstellungen anzupassen. Ich habs ja auch geschafft ;).


    Gruß
    hobbycoder

    Nunja, warum einfach, wenn es auch kompliziert geht. Aber Danke, besser als nix und auch um einiges besser als ein siebenteiliges Youtube, um irgendwas in C64-ASM zu coden (kein Witz, habe ich auch schon Treffer gehabt, waren IIRC >6 Teile á 10 Minuten).


    Damit müsste ich was anfangen können. :winke:


    EDIT/PS: Immerhin schon mal softscroll. Hard-scroll geht ja auch in Basic recht "flüssig" bis ruckelig. Also wenn schon ASM, auf jeden Fall eine gute Wahl, obwohl ich nicht mehr weiß, wie das bei ESI am Anfang war.

  • Okelidokeli, ca. 1 h später läuft das Teil mehr oder weniger. Ein Heidenspaß, dass sich der Ersteller des Videos in seinem Video auch noch Tippfehler geleistet hat, die er erst später korrigiert, da kommt Freude auf, schließlich hat man mit den eigenen Tippfehlern ja nicht genug zu tun.


    Hier also mal der Code mit Anmerkungen, was ich verstehe und was nicht.

    Fragen:
    1. Doofer Zeichensatz (Groß/Klein) Da muss irgendwo etwas DEZIMAL um ca. 128 verschoben werden... aber wo...
    2. @@@@@ statt Leerzeichen --> selbes Problem? Oder muss ich da irgendwas in den $3000ern mit Nullen füllen?
    3. Speicherbelegungstechnisch passt das natürlich noch nicht so super zum Rest. Vorschläge?
    4. Ich muss noch finden, wo die Y-Position des Scrolltextes liegt, um das Ganze von Zeile 0/1 in Zeile 24/25 zu verlegen.

  • Natürlich nicht


    !byte $00
    sondern
    !byte $FF


    Dann gibt es keine @@@, sondern einen Neustart des Textes,
    ist klar, weil ja mit CMP nach $FF gesucht wird und nicht nach $00 :rotwerd:
    Frage 2. ist also erledigt


    Neuer Pfusch: Dafür ruckelt das Teil aber jetzt nach dem Textende immer einmal recht kräftig... :(
    Das ist doch sicher vermeidbar... EDIT: natürlich z.B. durch 40XLeerzeichen am Textende, aber sicher auch eleganter, oder?

  • Hallo Ryk,


    $e544 ist ne Rom-Routine, die den Bildschirm löscht und das komplette Farb-Ram auf die Farbe in $0286 setzt.


    Wenn ich das richtig verstanden habe, willst du nur Großschreibung, oder wie? Dann kannst du Codezeilen 31/32 entfernen, die setzen nur ne andere Char-Bank. Ansonsten hilft auch ein !ct scr im ACME, um C64-Screencodes zu verwenden und nicht ASCII, damit das vom Zeichensatz her passt.


    Die Y-Position findest du in den Rasterwerten in den Zeilen 25 und 33, die den Scrollbereich eingrenzen, und natürlich an der Position des Textes im Bildschirmspeicher (Zeilen 55 und 59/60).


    Um das Rucken zu beheben, musst du zusätzlich nach dem Rücksetzen des Zählers auf $3000 auch noch den Rest der Zeile um 1 ganzen Character verschieben.



    Gruß
    hobbycoder

  • Vielen Dank Euch allen.


    Heute sind die Fortschritte mal wieder besonders bescheiden ausgefallen.

    Okay:
    a) die ungewollte Charbank-Knipserei ist mit ; entschärft.
    b) Gefahr e544 erkannt, aber noch nicht gebannt. Ich habe CLRSCR-Schleifen als Source gefunden, weiß aber noch nicht wann/wie ich diese Schleifen aufrufen darf/sollte.
    c) Das Verlegen um dezimal 960 (24 Zeilen runter) hat generell geklappt. Dafür ruckelt das Teil jetzt noch mehr :( Was muss in Zeile 33 stehen? Hilft das gegen das lahme Geruckel?
    d) Verbindung mit Ton/Grafik muss warten. Ideen (sowohl über Programmstruktur als auch über Speicherverwaltung) werden gern entgegen genommen.


    N8i N8i :zzz:

  • Hallo Ryk,


    dein Text ruckelt, weil immer noch "oben" gescrollt wird (Rasterzeilen $35 bis $50), dein Text jetzt aber unten in der letzten Bildschirmzeile steht, wenn ich das richtig verstanden habe. Somit werden nur immer ganze Chars verschoben, was natürlich sehr hart und kantig aussieht. Um den Softscroll 24 Zeilen nach unten zu schieben, ändere mal die Codezeile 25 in LDA #$E3 und die Codezeile 33 (wie du schon erkannt hast) in LDA #$FF. Das verschiebt den Softscroll mit $d016 ungefähr auf die Textzeilen 22 bis kurz nach 24, sollte also klappen.


    Gruß
    hobbycoder

  • Danke, Hobbycoder!


    Softscroll geht nun auch in Zeile 24/25 bis auf den Ruckler beim Textende.


    Wie ich die Zeile verschieben muss, um das auszustellen, habe ich noch nicht ganz gerafft. Heißt das, ich sollte statt 40er Breite lieber 39/38er Breite für den Scroll nehmen?

  • CLRSCR z.B. so:


    Zudem ungleich schneller als jsr $e544

  • Geil! Danke Enthusi, mit der CLRSCR passt das wunderbar. Ich rufe sie mittels ldx #250 und jsr an der Stelle auf, an der sonst das jsr $e544 stand. Später werde ich die CLRSCR-Loop wohl modifzieren müssen, weil ich ja nach dem Aufruf des Koalas nur ganz unten was löschen will/muss (wenn das überhaupt nötig ist, denn unten ist ein ganzer Teil Schwarz) für den 1X1-Scroll.


    Arbeite momentan noch an der Schmalerwerdung zwecks Ruckelvermeidung.

  • Ich meine eigentlich, es müsste jetzt soweit Scrollbreite 39 haben. Aber es ruckelt immer noch.
    Erkennt jemand den Fehler?

  • Was mir gerade so auffällt sind zeilen 14 & 15


    lda #00
    sta dc0d


    ist ziemlich sinnlos um den Timer-Interrupt abzuschalten. Nimm lieber lda #$01 oder gleich lda #$7f in Zeile 14.


    Geek Erklärung:


    Durch Schreiben von Bit #7 legst du bei dem Register fest, ob du Interruptquellen an- oder abschalten willst. 0=abschalten, 1=einschalten (IMHO vernünftig).


    Durch Schreiben Bits #6-0 legst du fest, welche Quellen du an- oder abschalten willst, wobei eine 1 in dem betreffenden Bit ein An- oder Abschalten bewirkt, je nachdem ob Bit #7 1 oder 0 ist.


    Um auf Verdacht erstmal alles abzuschalten daher: lda #127/#$7f (= #%01111111 in Binär).


    Und in Zeile 27 "asl $d019 +961" würd ich das +961 wegmachen, das ergibt irgendwie auch keinen Sinn :)