Hello, Guest the thread was called871 times and contains 5 replays

last post from joshy at the

ACME: output von Debug Informationen

  • Hi,
    ich versuche grade den Kode aus Steve Grays "PET/CBM EDIT ROM" Project (www.6502.org/users/sjgray/projects/editrom ) zu assemblieren. Ich habe in der Datei edit.asm die Standardeinstellungen für ein 324243-04 ROM gemacht und sonst nirgendwo den Kode verändert.


    Dabei bekomme ich eine Fehlermeldung "Serious error - File editrom.asm, line 252 (Zone <untitled>): Produced too much code." (der generierte Kode ist also schon >64k) bei einem Statement "!fill $e0a7-*,$aa". Ich vermute, dass der Programmpointer an der Stelle schon größer $e0a7 und die Differenz negativ ist. Der Pseudop !fill nimmt das Ergebnis natürlich ohne das Vorzeichen zu beachten und wir kommen auf eine Kodelänge über 64k.


    Ich würde das gerne eingrenzen, indem ich mir beim Assemblieren den Programmpointer auf StdOut ausgeben lasse. Ich finde aber beim ACME kein PseudoOp mit dem ich eine Ausgabe auf der Konsole machen kann. Ich habe den Verbosemode -v3 eingeschaltet, der gibt aber die Kodelänge nur bei erfolgreicher Übersetzung aus und nicht beim Error.


    Hat jemand eine Idee?

    In der Zeitschrift für Assyriologie übersetzte H. Zimmern 1896 einen fast 3000 Jahre alten Text, der in den Ruinen der Bibliothek des Assurbanipal in Ninive gefunden wurde, aus der Keilschrift ins Deutsche. Auf dem Tontäfelchen hatte der Umanu (Weisheitsvermittler) Shaggil-kinam-ubib notiert:

    ,Schaust du hin, so sind die Menschen insgesamt blöde.‘

    Das fasst im Prinzip alles ganz gut zusammen.“

  • Um den Program Counter auszugeben:

    Code
    1. !warn "Aktueller PC:", *


    Vor kurzem hatte cbmhardware ebenfalls das Problem, dass fremde Sources übergroße Binaries produziert haben. Die Gründe waren:


    Akkumulator-bezogene ASL, ROL, LSR und ROR müssen bei ACME immer ganz ohne Argument geschrieben werden. Schreibt man LSR A, hält ACME das A für ein Label und veranschlagt drei Bytes für den Befehl, obwohl eigentlich eines reicht. Wenn nicht mit "produced too much code" abgebrochen wird, beschwert sich ACME natürlich noch über das undefinierte Label "A".


    ACME beachtet führende Nullen bei Hexwerten; ein Befehl wie STA $00fa wird also als drei-Byte-Befehl assembliert, obwohl zwei reichen.


    EDIT: Ich sehe gerade, dass bei dem verlinkten Projekt tatsächlich auch ACME benutzt wird - dann liegt es also vermutlich nicht an den beiden genannten Punkten. ;) Ich lasse sie trotzdem mal hier stehen, vielleicht sind sie ja mal jemand anders nützlich.

  • Um den Program Counter auszugeben:

    !warn "Aktueller PC:", *

    Hallo Mac Bacon,
    vielen Dank für den Tip. Leider funktioniert "!warn" nicht. Ich bekomme einen "Error - File editrom.asm, line 252 (Zone <untitled>): Unknown pseudo opcode."


    Ich verwende den "ACME, release 0.90 ("Damogran"), 19 Mar 2006" - kann es sein, das da der PseudoOp !warn noch nicht drin ist. In der Doku hatte ich den auch nicht gefunden.


    Ich vermute übrigens, dass Steve Gray in der 'Steuerdatei' edit.asm einige unnötige !text-POps drin hat, die den Kode verschieben und damit die Subtraktion überlaufen lassen. Das hätte aber eigentlich auffallen müssen.

    In der Zeitschrift für Assyriologie übersetzte H. Zimmern 1896 einen fast 3000 Jahre alten Text, der in den Ruinen der Bibliothek des Assurbanipal in Ninive gefunden wurde, aus der Keilschrift ins Deutsche. Auf dem Tontäfelchen hatte der Umanu (Weisheitsvermittler) Shaggil-kinam-ubib notiert:

    ,Schaust du hin, so sind die Menschen insgesamt blöde.‘

    Das fasst im Prinzip alles ganz gut zusammen.“

  • Oder für windows Acme 0.94.8.

  • *lol* Da wäre mal 'ne aktuelle Version angebracht :-)


    Du hast ja recht. Ich hatte für den ACME nur die Smørbrød SoftwareSeite bei der Uni Claustal-Zellerfeld gefunden und angenommen, die 0.90 Version ist die aktuelle. Steve Gray benutzt die aber auch in seinem Project und gibt die EXE zusammen mit seinem Kode weiter.


    Jetzt funktioniert natürlich auch '!warn' und meine Vermutung war richtig. Bei '!fill $e0a7-*,$a' steht der PPointer schon auf $e0b5 - das kann ja nicht funktionieren


    Danke!!

    In der Zeitschrift für Assyriologie übersetzte H. Zimmern 1896 einen fast 3000 Jahre alten Text, der in den Ruinen der Bibliothek des Assurbanipal in Ninive gefunden wurde, aus der Keilschrift ins Deutsche. Auf dem Tontäfelchen hatte der Umanu (Weisheitsvermittler) Shaggil-kinam-ubib notiert:

    ,Schaust du hin, so sind die Menschen insgesamt blöde.‘

    Das fasst im Prinzip alles ganz gut zusammen.“