Hello, Guest the thread was called313 times and contains 8 replays

last post from Endurion at the

C64 Studio Makroproblem

  • Muss mich korrigieren. Das Problem besteht immer noch. Hier mal der Original Code:



    Fehlermeldung:

    243;E1001;D:\Projekt\C64\App\main2.asm;Failed to evaluate ╚"atest"╝


    Wenn ich als Wert für parameter strtext nur ein char ("a") übergeben, dann gibt es keine Fehlermeldung. Ab zwei Zeichen kommt dann der Fehler...

  • Endurion

    Ich habe mal aus lauter Verzweiflung begonnen mir Visual Studio 2019 und den Quellcode vom C64 herunterzuladen und habe mal ein wenig debuggt. Bin da aber ganz neu drin und es erschlägt mich. Ich habe aber herausgefunden wo die entsprechenden Stelle ist wo die Fehlermeldung generiert wird. Das ist in der Datei ASMFileParser.cs in der Zeile 2689. In Zeile 2685 ist die Funktion die den Fehler ermittelt.


    Mir ist während dem Debuggen aufgefallen, dass irgendwo die Zeichen "╚" und "╝" generiert werden und dann in "lines" dementsprechend zu sehen sind.


    Sieht dann so aus:

    Document

    [26]"lda #14"string
    [27]"ldx #╚8╝"string
    [28]"ldy #╚15╝"string
    [29]" ;jsr printText3x3"string
    [30]"jmp +"string
    [31]"_C64STUDIOINTERNAL_print3_0_20_.l1"string
    [32]""string
    [33]"!text ╚\"atest\"╝"string

    Kann das was damit zu tun haben?


    Oder gibt es ein Problem bei den Pseudo-codes !text, !scr, etc. wenn man die im Makro mit einem Parameter nutzt?

    • Helpful

    Wenn ich als Wert für parameter strtext nur ein char ("a") übergeben, dann gibt es keine Fehlermeldung. Ab zwei Zeichen kommt dann der Fehler...

    Bei ACME war das früher auch so: Man konnte zwar bei vielen Pseudo Opcodes Strings verwenden, aber man konnte einem Symbol keinen String zuweisen. Ein String, der nur aus einem einzigen Zeichen besteht, wurde intern in seinen Zeichencode umgewandelt und wurde dann als Zahl weiterverarbeitet, deshalb geht das. Bei längeren Strings funktioniert das natürlich nicht.

    Erst seit Version 0.97 vom vorigen Jahr kennt ACME String-Symbole, und seitdem kann man Strings auch an Makros übergeben.

    Da Endurion sich bei seinem Assembler ursprünglich an ACME orientiert hat, ist hier wohl derzeit noch die gleiche Einschränkung vorhanden.

  • Wenn ich als Wert für parameter strtext nur ein char ("a") übergeben, dann gibt es keine Fehlermeldung. Ab zwei Zeichen kommt dann der Fehler...

    Bei ACME war das früher auch so: Man konnte zwar bei vielen Pseudo Opcodes Strings verwenden, aber man konnte einem Symbol keinen String zuweisen. Ein String, der nur aus einem einzigen Zeichen besteht, wurde intern in seinen Zeichencode umgewandelt und wurde dann als Zahl weiterverarbeitet, deshalb geht das. Bei längeren Strings funktioniert das natürlich nicht.

    Erst seit Version 0.97 vom vorigen Jahr kennt ACME String-Symbole, und seitdem kann man Strings auch an Makros übergeben.

    Da Endurion sich bei seinem Assembler ursprünglich an ACME orientiert hat, ist hier wohl derzeit noch die gleiche Einschränkung vorhanden.


    Danke für die Info.

    Ich werde noch ein wenig debuggen. Das macht doch echt Spaß, aber ist nicht so einfach. Ich weiss noch nicht mal welche Programmiersprache das ist, spielt aber auch nicht so die Rolle. VS2019 hilft mir da schon gut weiter.


    Ich habe den Verdacht, dass Endurion den Fall beim parsen einfach nicht berücksichtigt hat.

    Vielleicht schaffe ich sogar einen Workaround für mich ;)

  • Ui, ja, du hast richtig erkannt: Das habe ich nicht berücksichtigt. Ist ja auch kein richtiger Parser, alles nur gepfuscht ;)


    ╚ und ╝ sind interne zusätzliche Klammernpaare, damit eingesetzte Ausdrücke nicht versehentlich für Opcode-Bestandteile (z.Bsp. wie bei LDA (ZP),y ) gehalten werden.


    Kommt auf die immer längere Liste!

  • Endurion Ist nicht so wichtig .. hat anscheinend noch niemanden gestört und ich habe das beiu mir erstmal so gelöst, das ich den Text getrennt in einer Datei anlege und im Macro dann nur noch den Zeiger auf den Text verwenden. Das erspart mir auch schon Tipparbeit ... wobei ich da schon zu Faul erscheine, denn mehr als 4-5mal habe ich mein Print Makro gar nicht benutzt.


    Deinen Parser habe ich mir mal angeschaut. Hatte sogar mal versucht etwas daran zu ändern bis ich dann gemerkt habe, das es auf einmal an einer anderen Stelle dann gehakt hat. Hat mir aber einen Abend Spaß bereitet mich in fremden Code in einer fremden Programmiersprache einzuarbeiten, mal sehen ob ich nicht damit auch noch mal was anfangen kann. :D


    Ist die immer längere Liste die eine Textdatei die auch im Projekt liegt? Wenn ja, dann ist das wirklich eine lange Liste ;)