Hallo Besucher, der Thread wurde 7,6k mal aufgerufen und enthält 28 Antworten

letzter Beitrag von Claus am

Wie funktioniert KickAss mit dem Compilieren? Die PRG ist ca 196000 Byte gr0ß.

  • Hallo, guten Tag.


    Wie funktioniert bitte KickAss mit dem Compilieren ?

    Ich möchte bei 40960 das Programm haben und dann mit sys40960 starten.


    Die PRG ist 196000 byte groß .


    Danke.

    Gruss

  • Guten Morgen!


    CopyPaste-Fehler in Zeile 28: Dort sollte es "lda char_b+1" heißen.


    Wo aber der Fehler beim Übersetzen liegt, bekommt man wahrscheinlicher heraus, wenn man sich das ERZEUGTE File anschaut. Ich kenne KickAss überhaupt nicht und weiss nicht, ob es mit deinem Quelltext umgehen kann (offensichtlich aber wohl schon). Aber stelle doch mal die erzeugte Datei hier rein (gezippt!) und dann kann man mal schauen, wo die paar Bytes zu viel herkommen.


    Oder besser: KickAss hat bestimmt eine Option zur Erzeugung eines List-Files (meistens eine Option mit L). Da kann man dann das Übersetzen sehr gut nachvollziehen.


    Gruß

    Thomas


    PS: Ich finde Deine Fragestellung nicht sehr aussagekräftig. Ich würde auf "Wie funktioniert KickAss mit dem Compilieren?" antworten mit "Über einen Computer."... Nichts für ungut, aber wenn die Frage besser formuliert wird, dann schauen sich auch mehr Leute den Thread an...

  • Ich kenne KickAss auch nicht, aber ist die Zeile 35 wirklich so korrekt? Nach meinem Verständnis werden die Zeilen...


    Code
    1. lda $8000+i
    2. sta $1400+i

    ... 32768 mal in den Code kompiliert, wobei wir dann bei 196608 Bytes allein für diese zwei Anweisungen wären. Oder verstehe ich das falsch? :gruebel

  • Jetzt wird das Programm vermutlich mehr als 24576 Bytes groß sein. Immer noch viel zu groß, weil es in den Block ab $A000 nicht passen wird.

    Folgendes würde ich machen:


    1. Den Code nicht durch die Makros unnötig expandieren, sondern echte Schleifen in Assembler programmieren.
    2. Für die 16bit-Schleifen gibt es reichlich Beispiele

    3. JSR statt JMP verwenden, da sonst die Initialisierung am Anfang gleich Ärger machen wird.

    Gruß Dirk

  • Sieht für mich ebenfalls so aus, als wenn der Code nicht in einer Schleife abgearbeitet wird, sondern der Assembler rollt die Schleife aus und setzt den Schleifeninhalt schön nacheinander in den assemblierten Code ein.


    So werden aus der Schleife in Zeile 35, wo im Schleifenkern insgesamt 6 Bytes vorhanden sind, 32768 * 6 Bytes = 196608 Bytes (plus den kleinen Rest drumherum).


    Um eine Schleife zu programmieren, ist diese Anweisung an den Assembler also nicht wirklich zu gebrauchen.


    Gruß

    Thomas

  • Am Ende müssen ja doch alles 6502 Opcodes werden, da kann ein Assembler nicht wirklich etwas dran ändern. Insofern ist es für einen Anfänger wirklich egal, welchen Assembler er nimmt. Bleib mal bei ACME, mit dem kannst Du hier im Forum auch am besten Hilfe bekommen.

  • Dann nützen mir die einfachen Schleifenbefehle nichts.

    Dann kann ich auch wieder in ACME schreiben.

    Frag doch mal, ob ACME auch "for"-Schleifen kennt. Vielleicht liest Dir ja jemand aus der Anleitung vor.

  • Ist nicht der "Clou" an KickAssembler dass man dort eben auch Schleifen usw. verwenden kann, die eben nicht wie bei ACME einfach den Code mehrfach duplizieren, sondern wirklich Makros sind um schneller eine "echte" Schleife zu programmieren anstatt selbst mit den Registern rumzuwerkeln? Mag sein dass das da oben im Code etwas anderes ist, aber vielleicht will spacer ja eigentlich das wissen, was KickAssembler ausmacht? (ich kenne mich damit aber auch nicht aus)

  • KickAss hat eine sehr mächtige Makrofunktionalität und man kann da sicher etwas zusammenbasteln. Aber m.E. ist das nicht sinnvoll, oder zumindest nur wenn man ganz genau weiß was für Code da erzeugt wird. Ich wüsste nicht, dass so ein Makro KickAss schon beiläge (aber habe auch das letzte Mal vor 5 Jahren KickAss verwendet).


    spacer : Du lädst i in den Akku (lda #i), das geht natürlich nicht mit Werten über 255. Sicher, dass das das ist was Du willst?

  • Ich helfe Dir mal ein bisschen auf die Sprünge. Soweit ich sehe, willst Du ein Charset kopieren, richtig? Ein Charset besteht aus 256 Zeichen und jedes dieser Zeichen besteht aus 8 Bytes. Also willst Du 256*8=2048 Bytes kopieren. Es gibt verschiedene Möglichkeiten, mehr als 256 Bytes zu kopieren. Ich würde in Deinem Fall einen teilweise unrolled Loop verwenden, weil der einen guten Kompromiss aus Kompliziertheit und Speicherverbrauch darstellt: