Hallo Besucher, der Thread wurde 4,3k mal aufgerufen und enthält 21 Antworten

letzter Beitrag von tom42 am

StructASM6502: Strukturierter Assemblerpräprozessor für 6502

  • Liebe Forengemeinde :)


    Ich habe einen kleinen Assemblerpräprozessor geschrieben, der sich noch in einem sehr frühen Stadium bedindet.
    Inspiriert haben mich die Strukturmakros.


    Eine pdf-Datei liegt im Zip-File bei als Dokumentation (das zumindest, was ich bereits habe ;-) ).


    Facts:


    * geschrieben in der Programmiersprache PureBasic (esoterisch, unbekannt, aber saugut :love: )
    * derzeit dokumentierte Verzweigungen mittels "if-elseif-else-endif" in mehreren 8-Bit-Varianten.
    * undokumentiert, aber bereits funktionierend: "repeat - until - forever", "while - wend" in mehreren 8-Bit-Varianten.
    * einige Features wie "Ausgabe eines Strings" - noch undokumentiert, aber in Beispielen verwendet.
    * mehrer undokumentiere Features, auch noch nicht in Beispielen.



    - keine Ahnung, ob mich die Lust verlässt weiterzumachen.
    - war als Hobbyprojekt und Machbarkeitstest gedacht und rein privater Natur.


    - Falls es einigermaßen Hilfe/Feedback aus dem Forum gibt (z.B. bei Bugs, und bei eventuell besseren Patterns in ASM v.a. bei ROM-Routinen und 16-bit-Arithmetik), mache ich eventuell weiter. Aber ich möchte nichts versprechen.


    - Dachte mir, warum nicht mit der Community teilen, keine Gewähr für irgendwas, just for fun :) und VIEL SPASS DAMIT, FALLS ES WER BRAUCHEN KANN.


    Liebe Grüße
    Thomas

  • Aktualisierung:
    - Schleifen sowie Output-Befehle dokumentiert im pdf.
    - Bug C64Studio "Case Sensitiveness" gefunden (wird gefixt werden) - steht im pfd unter "Bekannte Bugs"

  • - Bug C64Studio "Case Sensitiveness" gefixt und Doku geändert/erweitert um das Thema: C64Studio case sensitiveness


    So genug für Sonntag, ich geh mal Abendessen und schau später wieder rein, falls es Anmerkungen, Diskussionen, Feedback oder einfach was auch immer gibt.


    Hoffentlich es interessiert euch, und wenn es nur dazu hilft, zu verstehen, wie Compiler Strukturen wie
    "if-then" "while-wend" usw. in Code mit Sprungbefehlen und Labels übersetzen.


    :)

  • Hi ogd,


    der Zielassembler ist C64Studio, ich glaube der ist ACME-kompatibel, ist er? Und die können das nicht, soweit ich informiert bin.


    Mein Präprozessor erzeugt nur Labels, er ist nicht der Assembler, er hat keine Ahnung, wie weit der Sprung geht.


    Man könnte ein Macro andenken, dass das automatisch macht, ich meine ein C64Studio-Macro.
    Und das könne mein Präprozessor benutzen und dem C64Studio beim Assemblieren die Arbeit überlassen.


    Ich bin mir nicht sicher, ob ich das will, weil die Philosophie ja ist, nicht zu viel vor dem Programmierer zu verstecken.
    Es ist keine Hochsprache. Es sollte nahe am "Metall" bleiben. Und ein "stummes" far würde mehr Cycles, mehr Bytes zum Programmcode dazugeben.
    Prinzipiell bevorzuge ich, wenn C64Studio über den "branch too far" meckert und der Programmierer sich überlegt, ob das nur so geht mit einem far-branch oder ob man nicht prinzipiell seine Programmstruktur überdenken sollte, also umbauen.


    Ich werde mir überlegen, ob ich so ein Macro hinkriege und ob ich das dann einbauen will, eventuell optional.


    Bei 16-Bit-Vergleichen, die auch geplant sind, wird es aber kompliziert, denn da ist es nicht nur getan mit einfach Branch umdrehen und dann über jmp drüberspringen. Da kann man viel mit der Hand optimieren, für jeden spezifischen Fall.
    Aber das ist sowieso Zukunftsmusik.


    LG Thomas :)

  • - Dokumentation: Neues Kapitel „Gefixte Bugs“, um eine Historie der bereits mal aufgetretenen Bugs zu haben. Neues Kapitel „Feature Requests“.
    - Notepad++ XML File: alle „Assembler - Pseudo Operations” des C64Studios (z.B. !byte, !bin, …)

  • Update:


    EXE: Änderung beim Operanden von „strout“, 16-bit <condition>
    Dokumentation: Änderung beim Operanden von „strout“, 16-bit <condition>, Tippfehler


    Also nun mit 16-Bit-If und 16-Bit-Schleifen.
    Falls da jemand im Einzelfall effizientere Umsetzung kennt, bitte nicht genieren ^^


    Nur her damit.


    Liebe Grüße
    Thomas

  • Ich denke, es ist Zeit für Versionsnummer V0.2



    EXE: Einfaches User-Interface
    Dokumentation: Anpassung des Kapitels „Bedienung und Programme“ an das User-Interface , Ausarbeitung des Kapitels „Abschließende Betrachtung verschiedener Varianten von <condition> für 8-Bit-Zahlen“, einige Tippfehler

  • So, zum Mittagessen ;)


    LG Thomas



    EXE:


    • Verbesserte Fehlerbehandlung (File-Error, Syntax Error kehrt ins Interface zurück).
    • 16-Bit-Math Addition, Subtraktion, Inkrement, Dekrement.
    • Bug gefixt bei „;“-Kommentaren am Zeilenanfang.
    • übersichtlicherer ASM- Code durch Einfügen von Leerzeilen zwischen den Befehlen.
    • schlechte Funktionalität bei einem „0“ als Operanden in einer 16-Bit-Condition verändert, jetzt ist auf $00 und Ähnliches erlaubt.
    • 16-Bit-Math Addition, Subtraktion, Inkrement, Dekrement.
    • Operand 1 und 2 in Operand-Typ 1 und 2 umbenannt.
    • Tippfehler bei intout/byteout/chrout zu Operand-Typ 2 korrigiert.
    • schlechte Funktionalität bei einem „0“ als Operanden in einer 16-Bit-Condition verändert.
    • „far“-Operator-Feature-Request auf „Bitte warten“ verschoben, da ich nicht weiß, wie ich das umsetzen soll.
    • Tippfehler, kleinere Veränderungen in der Dokumentation.


    Dokumentation:


    • 16-Bit-Math Addition, Subtraktion, Inkrement, Dekrement.
    • Operand 1 und 2 in Operand-Typ 1 und 2 umbenannt.
    • Tippfehler bei intout/byteout/chrout zu Operand-Typ 2 korrigiert.
    • schlechte Funktionalität bei einem „0“ als Operanden in einer 16-Bit-Condition verändert.
    • „far“-Operator-Feature-Request auf „Bitte warten“ verschoben, da ich nicht weiß, wie ich das umsetzen soll.
    • Tippfehler, kleinere Veränderungen in der Dokumentation.


    Die Dokumentation kann ich nur mehr als *.docx liefern, das PDF ist zu groß. Das Forum erlaubt mir kein Hochladen mehr.


    Offtopic, aber von unmittelbarem Interesse:
    Ich dachte immer, PDF komprimiert ganz toll, mache ich etwas falsch?
    Die Option "Minimale Größe - Onlineveröffentlichung" im Word 2010 bringt auch nix.

  • Wenn ich die Word-Datei mit Nuance-PDF umwandle komme ich auf eine Größe von 247k - das kann noch ohne Probleme hochgeladen werden.
    Die Dokumentation finde ich übrigens sehr gut :)


    StructASM6502_2.pdf

    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.“

  • Danke für den Tipp und das Lob, und dass jemand mal antwortet und spricht in diesem Thread. :)
    Eigentlich war das alles nur eine Machbarkeitsstudie, ein Lernobjekt und ein privates Tool, dann habe ich aber bemerkt, dass ich wohl etwas Zuspruch benötige :D:streichel:


    Habe den Thread ja auch eröffnet, um Austausch zu betreiben und mit Leuten zu chatten.


    Zum PDF:
    Danke für den Tipp, ich speichere das immer gleich mit dem Word im PDF-Format. Die 247K, die du da hast, sind viel kleiner, als ich da bekomme (>600K), aber immer noch viel größer als das Word (mit nur ca. 85K). Ich frage mich, warum PDF so viel größer wird als DOCX.

  • Ich finde das Projekt schon interessant, die Brauchbarkeit ist aber von der verwendeten Umgebung anhängig. Im Moment kümmere ich mich mehr um Hardware. Im Frühjahr wollte ich ein Programmierprojekt starten und da auch mal ausprobieren, wohin sich die unterschiedlichen Entwicklungsumgebungen mittlerweile entwickelt haben. Da will ich Deinen Präprozessor mit meiner 'Lieblingsumgebung' ausprobieren.


    Ich selber habe mit dem Ophis 6502 Crossassembler und UltraEdit programmiert. Als integrierte Umgebung habe ich eher das'CBM .prg Studio' von Arthur Jordison genutzt.


    Du siehtst an meinem Beispiel, dass die mangelnden Kommentare nicht unbeding auf Desinteresse beruhen. Ich bin überzeugt, dass viele mitlesen und ein bischen abwarten. Ein Test ist halt ein wenig aufwändig.


    Mach weiter mit dem Tool - ich finde den Ansatz schon vielversprechend :thumbsup:


    PDF Generierung: Ich kann das nochmal mit dem aktuellen orginal Adobe Acrobat ausprobieren. Aber ich vermute, dass die Fontinformationen im PDF Platz benötigen. Word nimmt ja die Fonts, die in Office installiert sind.

    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.“

  • CBM .prg Studio habe ich früher auch gerne verwendet, jetzt ist es das C64Studio von Endurion, das ja - glaube ich ??? - ACME-kompatible ist.


    Mir gefällt die Debugging-Zusammenarbeit mit VICE sehr gut.


    Das Tool (Strukturmakros) als solches ist von einem PC-HLA (HLA = High Level Assembler) inspiriert: https://en.wikipedia.org/wiki/High_Level_Assembly


    Kann man vielleicht auch brauchen, Buch (alte Version online) und Tool gratis, soweit ich weiß.

  • EXE:

    • Änderung der einklappbaren Regionen zu „{ ... }“, alte Version hat nicht so funktioniert
    • Register-Implementation der For-Schleife.


    Dokumentation:

    • Nachtrag zu B7: Kapitel heißt seit B7 „Bekannte durch User gemeldete Bugs“, damit verschwindet auch der gefixte Eintrag, da er nicht durch einen User gemeldet worden ist, sonders von mir selbst gefunden.
    • Änderung der einklappbaren Regionen zu „{ ... }“.
    • Umstrukturierung in Kapitellogik wegen For-Schleife.
    • Anpassung der Erklärung von Kommentaren mit „//“

    XML-File:

    • Anpassung auf neue Befehle.
    • Anpassung auf die neuen einklappbaren Bereiche.




    Genug für heute, war ein erholsamer und kreativer Samstag-Nachmittag.


    LG Thomas
    ;):)

  • Mit der For-Schleife und ihren Einschränkungen bin ich noch nicht zufrieden.
    Ich hadere mit mir selbst, das alles nochmal umzuwerfen.


    Ich denke gerade daran, die For-Schleife ein bisschen mehr C-Like zu machen.
    Also im Prinzip wäre es dann eine automatisierte und schneller zu schreibende "glorified" Whiile-Schleife.


    Ich denke dabei nicht an eine vollständige C-Umsetzung, sondern vor allem beim To-Wert.


    for ( register x = 5 To < 15 )
    <block>
    next


    Dann ist das leidige Endwertproblem weg.

  • Habe den Thread ja auch eröffnet, um Austausch zu betreiben und mit Leuten zu chatten.

    Dann kommt hier mal eine kleine "Keule" *fg*: Als FreeBSD-User kann ich mit einer Windows EXE nichts anfangen. Source wäre wesentlich interessanter ;) Und nur so eine Vermutung: Bei der momentanen Release-Frequenz denkt sich bestimmt so mancher "mal abwarten was noch so kommt" :) Release early, release often ist ein gutes Prinzip für OpenSource (hehe), aber nicht übertreiben damit ...


    Zum Tool an sich, ich denke der Einsatzzweck ist zwar relativ eingeschränkt, zumindest auf dem C64, schließlich ist vieles derart timingkritisch, dass man lieber den Code komplett "zu Fuß" baut -- trotzdem bin ich überzeugt, dass es Anwendungsfälle gibt -- bei einem Spiel zum Beispiel die eigentliche Spiellogik, für die man mit C vielleicht zu weit weg von der Hardware wäre, die aber von ein wenig strukturiertem Source durchaus profitieren könnte!

  • Ich denke, dass ich es schon OpenSource machen kann, doch ich wage zu bezweifeln, dass jemand mit einer PureBasic Source etwas anfangen kann :/


    Wenn du jeweils nur die low- oder maximal mid-level conditions verwendest bist du exakt dort, wo du mit Handcode auch landen würdest, nur ist es eben intuitiver.


    Ich zitiere hier von der Seite http://wilsonminesco.com/StructureMacros/. (Diese Seite hat mich zu meinem Tool inspiriert.)


    Das sind hier natürlich Assembler-Makros, die tun aber genau dasselbe, wie meine Strukturmakros, man beachte den letzten Satz:


    The three versions result in exactly the same machine code, but the program structures make it more intuitive what's happening.



    LG Thomas :)