Beiträge von tom42

    Dass es bei Makro-Aufrufen nicht übergeben werden kann, liegt einfach daran, dass Makros hier keine Textersetzungen, sondern de facto Funktionsaufrufe sind - daher kann man dort als Parameter nicht einfach die Adressierungsart übergeben.

    Ja, leider :-(, das hatte ich auch schon befürchtet.
    Textersetzung würde Macros um 1000% mächtiger machen, für mich jedenfalls.

    Hm, für mich ist das Bitte melde dich an, um diesen Link zu sehen. ein Indikator für einen imediate-Wert. Jetzt bin ich verwirrt.


    lda $01 ; absolut, hex
    lda 1 ; absolut, dez
    lda #$01 ; immediate, hex
    lda Bitte melde dich an, um diesen Link zu sehen. ; immediate, dez
    lda #%00001111 ; immediate, binär, mit %-Zeichen als Erkennungsmerkmal

    Nicht?

    Keine Ahnung, warum das Code-Feld jetzt nicht geht.
    Egal!

    Assembliert problemlos und wie erwartet zu:

    080D: lda $01
    080F: lda $01
    0811: lda #$01
    0813: lda #$01
    0815: lda #$0f

    Bin grad in einen Fehler gelaufen beim Macromachen:

    Code
    !macro TEST arg
          lda arg
       !end
       +TEST #12
       +TEST 12

    Es ist also nicht möglich, immediate und andere absolute Werte in einem Macro zu verarbeiten.

    Fehler:

    Code
    7;E1001;C:\...\test0.asm;Could not evaluate #1

    LG Thomas

    Hi,

    gibts einen Menüpunkt oder eine Tastenkombination, mit der man alle ausgeklappten Macros bzw. Faltungen einfalten kann.
    Manchmal stehen ALLE offen und die kann ich dann alle händisch (!!!) zumachen, was schon lange dauert (hab ja schon ein ganze Menge Macros).

    Danke :)


    <MOD>Als Wunsch hierher verschoben, zusammen mit Endurions Antwort

    Hi Leute, wie versprochen in den zu diesem Thema passended Threads (Bitte melde dich an, um diesen Link zu sehen. und Bitte melde dich an, um diesen Link zu sehen.), habe ich an meinen Struktur-Macros gearbeitet und denke, dass das für euch interessant sein könnte.

    Schaut euch einfach ein Dissassembly an, die Macros legen sehr schlanken Code ab.


    Was ist es (für die, die die anderen Threads nicht verfolgt haben):

    Macros, die z.B. IF_..- ELSE - ENDIF oder beispielsweise REPEAT-UNTIL_.. erstellen und damit zur Übersichtlichkeit von Assemblerprogrammen beitragen.
    Deshalb der Name "MacroHLA" = Macro High Level Assembler, also keine Hochsprache, aber eine Assemblersprache, die strukturiertes Programmieren ermöglicht und dabei dennoch äußerst nah an Assembler bleibt (Bitte melde dich an, um diesen Link zu sehen., Bitte melde dich an, um diesen Link zu sehen.)

    In der Datei sind alle Referenzen angegeben.

    Ich stütze mich wesentlich auf diese Webseite. Die Macros habe ich von dort adaptiert (Bitte melde dich an, um diesen Link zu sehen.).

    Viel Spaß damit, und eventuell Feedbacks und Bugs bitte melden. :)

    Hi, auch ein dringender Wunsch von mir (eigentlich 2, aber der 1. ist der dringendste :rolleyes: )

    1. In Macros das zusammenfügen von Textteilen.

    Ein Beispiel:

    Code
    STACK_LEVEL = 12
    
    
    STACK#STACK_LEVEL:
    
    
    --> expandiert dann als:
    STACK12:


    Das würde alle meine Wahnsinnsklimmzüge bezüglich der Stacks drastisch vereinfachen.
    Und: man kann damit auch Arrays simulieren natürlich.

    2. Optionale Parameter und eine Assemblervariable, die anzeigt, wieviele Parameter es gibt.

    Wie gesagt, Wunsch 1 ist der dringendste :)

    Danke

    Ha ha, ja, in der Tat.
    Ich versuch diese EXIT_IF zu stacken. Damit er nacheinenander die Sprungziele befüllen kann.
    Einfach, weils Spaß macht :rolleyes:

    Guck dir mal auch die anderen Macros an.
    Da habe ich einiges schon, was deine Macros hergeben, verwendet.
    Geht gut. Coole Sache! Danke für deine Arbeit. :)

    Ich glaube, ich bin wieder auf einen Bug gestoßen:

    Oben Zeile 7 macht große Probleme. Bei 2-mal läufts, bei 3-mal meckert er etwas wie "Redefinition of label __hla_STACK9" und andere Labels auch.

    Das ist aber auch NUR in DIESER Konstellation ein Problem. Ich könnte hunderte +__hla_PULL_STACK händisch hintereinander schreiben, er hätte kein Problem. Muss also irgendetwas mit dem !for oder !if zu tun haben.

    Noch ein interessanter Aspekt. Schreibe ich ein "+__hla_PUSH_STACK *" zwischen 2. und 3. PULL, geht es auch wieder. Aber auch im Push werden dieselben Label verwendet, also warum der error "Redifintion"? :S

    Habe das gesamte Projekt als Zip angehängt.

    Bei mir geht er recht gut.
    Ich bin sehr zufrieden.
    Würde noch die Bytes neben Adresse toll finden, aber super Tool. :thumbsup:


    Hat manchmal kleine Macken.

    Beim Testen der IF habe ich z.b 150 nops erzeugt.
    Die waren dann eine Liste von Bytes und keine Mnemonics.

    So, ich biete mal wieder etwas von meiner Macro-Spielerei an.

    Habe ein neues Konzept.

    Diese Version erkennt nun, wenn eine Branch zu weit geht. Bricht dann mit Error ab.
    Dann muss man die eXtended Version verwenden: IF_EQUAL geht zu weit --> IF_EQUALx (x=extended) verwenden.

    Ab jetzt erkennen die Macros auch, ob sie einen Branch oder einen JUMP verändern müssen. Ich pushe das vorher auf den Stack, verwende jetzt also pro Eintrag 2 Stack-Zellen. Außerdem gibt es für den Stack eine Debug-Ausgabe, damit man sieht, was am Stack ist.

    Viel Spaß :)

    Endurion: Falls du Zeit und Lust hast dir mal die Möglichkeit von optionalen Parametern anzusehen und vom Umwandeln von Variableninhalten (=Nummern) in Texte und dann das Einfügen in den Quelltext als Text, egal an welcher Stelle? Ganz großes Danke, falls du Lust hast. :thumbsup:

    Das heißt locals (. @) sind local zum Macro?
    Und Globals natürlich auch dort global?
    Hab ich das richtig verstanden?

    Mir ist gerade aufgefallen, dass Macros sich nicht in die !zone einfalten.
    Anders formuliert, die !zone endet, wenn ein Macro kommt - faltungstechnisch.

    Getestet:

    Cheap local Labels gehen also nicht.