Hallo Besucher, der Thread wurde 2,7k mal aufgerufen und enthält 15 Antworten

letzter Beitrag von :TheRyk am

ACME, release 0.94.8

  • Hi!


    Auf Sourceforge gibt es jetzt die Sources zu ACME 0.94.8; hier die Änderungen:


    Neu in Release 0.94.6:

    • Der Potenzierungsoperator '^' ist jetzt rechtsassoziativ.


    Neu in Release 0.94.7:

    • Bugfix: Wenn man den Program Counter auf über $ffff setzte, hing ACME beim nächsten ausgegebenen Byte in einer Endlosschleife fest. Vielen Dank an sauhund für den Bugreport.
    • Das Hexadezimal-Präfix im "Verbose output" wurde an einigen weiteren Stellen von "$" zu "0x" geändert.


    Neu in Release 0.94.8:

    • Segmente können jetzt auch innerhalb von PseudoPC-Abschnitten ohne Warnung geändert werden; und es passiert dabei das, was genau jeder erwartet (auch hier vielen Dank an sauhund).
    • Die schon seit langem veralteten Pseudo Opcodes "!cbm", "!subzone" und "!realpc" wurden jetzt abgeschaltet (bei Benutzung erscheinen keine Warnungen mehr, sondern Fehler).
    • Daraus folgt, dass "!pseudopc" jetzt mit { }-Blöcken benutzt werden muss.
    • Der illegale Opcode 0xab (unter anderem bekannt als "LXA #$xx") wird jetzt unterstützt (hallo peiselulli!), dabei wird allerdings für andere Argumente als Null eine Warnung ausgegeben.
    • Im Code wurden geschätzte 120 "FIXME"s hinzugefügt, weil da vieles überarbeitet und aufgeräumt gehört. Für offene Punkte auf der TODO-Liste gilt weiterhin: Aufgeschoben, aber nicht aufgehoben.


    Wer ein Programm mit vielen PseudoPC-Abschnitten und/oder "*="-Segmentsprüngen vorrätig hat, sollte sicherheitshalber testen, ob immer noch der gleiche Output erzeugt wird - nicht dass ich zuwenig testen würde, aber es ist schon spät... :whistling:

  • Oha, dann gibt es ja für mich was zu tun.
    Danke dir.

  • Hi,
    ist fertig und an emu64 weiter gegeben.


    Wer das Kompilat dringend brauch, den kann ich gerne per Mail das Windows-Programm senden.


    Gruß Höp

  • So eilig ist es für C64 Entwickler eigentlich nicht (es sei denn sie schreiben über $FFFF hinaus, hehehe).


    Aber schonmal Danke für die Arbeit hoeppie.


    Mach mal Meldung, wenn Torstens Test es für gut befunden hat und uppe es dann am besten hier und poste noch einen zusätzlichen Link, dann können wir Windoofen es alle installieren und die C64-wiki-people werden auch ein paar Links aktualisieren


    PS: Illegale Opcodes sind natürlich auch nice to have, aber wer weiß, was ein illegaler OpCode ist und ihn kennt, der weiß auch, wie er ACME auch ohne Syntax-Erweiterung dazu bringt ihn zu erzeugen (z.B. !byte)


    PS: @macB

    Zitat

    illegale Opcode 0xab (unter anderem bekannt als "LXA #$xx")


    Hat Peiseluli den etwa erst kürzlich entdeckt? Oder ist das der, der auch als LAX bekannt ist? Wo liegen ggf die Unterschiede?

  • wer weiß, was ein illegaler OpCode ist und ihn kennt, der weiß auch, wie er ACME auch ohne Syntax-Erweiterung dazu bringt ihn zu erzeugen (z.B. !byte)


    Hat Peiseluli den etwa erst kürzlich entdeckt? Oder ist das der, der auch als LAX bekannt ist? Wo liegen ggf die Unterschiede?


    Die Opcodes $a3, $a7, $af, $b3, $b7 und $bf fungieren als Ladebefehle (mit verschiedenen Adressierungsarten), die das geladene Byte sowohl in A als auch in X ablegen. Für diese Opcodes ist daher das Mnemonic "LAX" (Load A and X) gebräuchlich. Intern funktionieren diese Befehle, indem Teile der LDA-Logik und Teile der LDX-Logik aktiv werden, mit ein paar interessanten Verschmelzungseffekten bei den Adressierungsarten - siehe dazu eine Opcode-Tabelle. Es gibt diesen Befehl aber leider nicht mit Immediate-Adressierung.


    Beim Opcode $ab sieht es etwas anders aus: Zwar liegt er in der gleichen "Gegend" wie die obigen LAX-Opcodes (es handelt sich um eine Kombination aus LDA #immediate und TAX, die von ersterem die Immediate-Adressierung geerbt hat), aber leider ist er instabil: Eine einfache Beschreibung der ausgeführten Operation ist: $ab FOLGEBYTE macht erst ein ORA #UNBEKANNT, dann ein AND #FOLGEBYTE, dann ein TAX. Welche Werte für "UNBEKANNT" genau in Frage kommen, ist hier unerheblich - zu Details siehe die diversen Texte zu undokumentierten Opcodes, die am Ende der Datei "Illegals.txt" in den ACME-Docs aufgelistet sind. Als Mnemonic für diesen Opcode schlagen diese Texte z.B. LXA, OAL oder ATX vor.
    Der Punkt ist, dass dieser Befehl nicht zuverlässig funktioniert. Daher habe ich ihn, als ich damals die anderen Illegals in ACME eingebaut habe, weggelassen - genau wie die paar anderen instabilen Opcodes ("Wer braucht schon Unterstützung für instabile Befehle?")


    So, und warum hab ich ihn jetzt doch eingebaut?


    In der Clearscreen-Compo hat peiselulli in zwei seiner bisher eingereichten Beiträge diesen Befehl benutzt - natürlich per "!byte" eingefügt. Der Witz ist, dass die Instabilität des Befehls überhaupt nicht von Belang ist, wenn das Argument eine Null ist: Egal welcher Zufallswert anfangs aufgeODERt wird - nach einem AND #0 kommt auf jeden Fall eine Null heraus, und diese landet dann in A und X. Das heißt:
    Man kann per !byte $ab, $0 in nur zwei Bytes und Zyklen sowohl A als auch X auf Null bringen. Deshalb das Mnemonic LXA. Man könnte LXA natürlich auch als die fehlende Immediate-Adressierung von LAX betrachten, aber ich wollte das stabile LAX und das instabile LXA nicht unnötig vermischen.
    Damit sich niemand mit einem LXA #nonzero in den Fuß schießt, habe ich für diesen Fall die oben erwähnte Warnung eingebaut.


    So, alle Klarheiten beseitigt? ^^
    Wenn jemand Support für weitere "metastabile" Opcodes wünscht, einfach Bescheid sagen...

  • Ah, danke, macht alles Sinn für mich.

    aber leider ist er instabil


    "metastabile" Opcodes


    Ja, *seufz*, viele (oder auch alle?) Opcodes, die auf den ersten Blick richtig praktisch aussehen, sind tendenziell instabil :D


    Aber was Du über LXA #$00 und Stabilität gesagt hast, gilt meines Wissen für LAX #$00 genauso, mit Null kann man eigentlich nix verkehrt machen, bei anderen Werten ist mindestens Vorsicht geboten bzw. je nach Hardware droht Inkompatibilität/unberechenbares Ergebnis/Crash

  • zu Details siehe die diversen Texte zu undokumentierten Opcodes, die am Ende der Datei "Illegals.txt" in den ACME-Docs aufgelistet sind.


    lustigerweise erklärt es keine mir bekannte quelle wirklich 100% richtig :)

    Wenn jemand Support für weitere "metastabile" Opcodes wünscht, einfach Bescheid sagen...


    "weitere" hört sich fast so an als gäbe es da ausser ANE noch irgendwas... =)

  • Die neue Version ist Online:


    Wie immer unter


    ACME 0.94.8


    Meine Tests waren erfolgreich und Thorsten hatte kurz Zeit die Version hoch zu stellen. :thumbup:


    Viel Spaß :thumbsup:


    Höp

  • Super, Danke, läuft auch hier nach Kurztest scheinbar einwandfrei, alles andere hätte mich auch überrascht, gute Arbeit.


    Habe im C64-Wiki die Artikel
    http://www.c64-wiki.de/index.php/ACME und
    http://www.c64-wiki.de/index.php/Notepad++
    angepasst


    PS: Dass selbst ich oller Sturkopp, der normalerweise nur ein Update - geschweige denn Softwarewechsel - macht, wenn es gar nicht anders geht, sollte Euch zu denken gebenvon wegen "Rundum sorglos mit Relaunch". Ich war damit nie sorglos und bin es erst seit Notepad++

  • Freut mich.


    Wenn du Konfig-Dateien für Notepad++ hast können
    sie doch auf auf den Server.
    Ich selbst bin mit Scite unterwegs für den ich langsam
    aber sicher einen Mode erstelle.