x-,y-,a- Register beim cc65 belegen, wie geht das ?

Es gibt 13 Antworten in diesem Thema, welches 1.903 mal aufgerufen wurde. Der letzte Beitrag (7. August 2013 um 13:16) ist von enthuSI.

  • Hallo, guten Tag.
    Ich möchte hiermit eine Basicroutine aufrufen : asm("\tjsr $bdcd").

    Wie kann ich diese beiden Register von der C-Ebene ohne dieses ASM belegen :
    asm("ldx _regx");
    asm("lda _rega");

    Gibt es irgendwie ein einfaches Befehlswort, womit man zb die 3 Register belegen kann und auch abfragen kann ?

    Danke.
    Gruss


  • dieser codeschnipsel ist auf derart vielen ebenen gruselig das ich hiermit meinen hut ziehe. alle achtung.

  • Wie kann ich diese beiden Register von der C-Ebene ohne dieses ASM belegen :
    asm("ldx _regx");
    asm("lda _rega");


    Ist das nicht genau das, was der _sys Call macht mit der Struktur regs?
    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    ___________________________________________________________
    Meine Kreationen: Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.
    | Bitte melde dich an, um diesen Link zu sehen.
    Avatar: Copyright 2017 by Saiki

  • in erster linie sollte man sich erstmal fragen warum man das überhaupt machen wollen würde, bzw was man sich davon verspricht. idr regel benutzt man ja eine hochsprache weil da solche dinge eben gerade nicht per hand geklöppelt werden müssen =P

  • idr regel benutzt man ja eine hochsprache weil da solche dinge eben gerade nicht per hand geklöppelt werden müssen =P


    Mag schon sein. Aber gerade das Gerangel in den anderen Threads z.B. unter Basic V2 zeigt doch, dass ein Bedarf da ist "zu basteln".
    Ob jemand und wieso sowas einsetzt ist eine Sache, ob es schön ist, eine andere. Aber ich finde es immer noch besser, ein Hintertürchen offen zu haben, als alles dicht vorserviert zu bekommen.
    Zumindest bei solchen alten Systemen, wo wir uns hier im Forum bewegen, finde ich das wichtig und OK.

    Auf einem modernen System mit OS ist das eine andere Sache, da laufen auch mehrere Dinge, die der Programmierer nicht wissen muss/kann/darf/will.
    Dort muss aber eine gewisse Ordnung herrschen und der Programmierer soll das System nicht instabil machen dürfen. :kaputt
    Dort gebe ich Dir 100% Recht.

    ___________________________________________________________
    Meine Kreationen: Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.
    | Bitte melde dich an, um diesen Link zu sehen.
    Avatar: Copyright 2017 by Saiki

  • Zitat


    dieser codeschnipsel ist auf derart vielen ebenen gruselig das ich hiermit meinen hut ziehe. alle achtung.

    Sauhund, das brauchst du nicht , als Pensionär mit A15 stehe ich mit 65 Jahren über diesen Dingen und lache nur darüber... Es ist nur ein Hobby... ;)

    Gruss

  • Zitat

    Mag schon sein. Aber gerade das Gerangel in den anderen Threads z.B. unter Basic V2 zeigt doch, dass ein Bedarf da ist "zu basteln". Ob jemand und wieso sowas einsetzt ist eine Sache, ob es schön ist, eine andere. Aber ich finde es immer noch besser, ein Hintertürchen offen zu haben, als alles dicht vorserviert zu bekommen. Zumindest bei solchen alten Systemen, wo wir uns hier im Forum bewegen, finde ich das wichtig und OK.


    die sache ist halt, um das zu tun was der chaosfunkter da vor hat, muss man wirklich einiges über die interna des compilers wissen. UND man muss vor allem gewillt sein dinge zu lernen und auch mal den rat "das geht so nicht" anzunehmen. werte in register zu bekommen und diese an eine ml routine zu übergeben sind in diesem code wirklich das geringste problem =) wurde zb der speicher in den der compiler den code steckt bereits so begrenzt das das einschalten der roms nicht potentiell zum absturzt führt? ist dem autor klar das zwischen zwei asm statements beliebiges passieren kann, inklusive veränderter register? der _sys aufruf wird hier btw auch nur bedingt helfen, ausser es werden entsprechende vorkehrungen getroffen das selbiger bei eingeschaltetem basic rom nicht knallt.

  • ist dem autor klar das zwischen zwei asm statements beliebiges passieren kann, inklusive veränderter register?


    Danke, Du hast hier Recht, daran hatte ich nicht gedacht. Ich nehme auch an, eine ASM Anweisung *müsste* für sich atomar sein (vermutlich aber nicht, da der Compiler die Anweisung ja übersetzen muss und das wohl Overhead und nicht nur die paar Bytes an der Stelle erzeugt), und zwischen den beiden ASM Anweisungen kann der C-Compiler definitiv noch irgendwas machen.

    Aber mal allgemein: Deine letzte Erklärung fand ich jetzt gut und nachvollziehbar, aber bei manchen von Deinen anderen kurzen "Das kannste vergessen" Postings sind Deine Gedankengänge nicht immer nachvollziehbar, also für mich jedenfalls nicht immer. Da kann ich schon verstehen, dass es manchmal zu Missverständnissen und Abwehrreaktionen führt... :wink:
    Und das meine ich jetzt echt nicht polemisch.

    ___________________________________________________________
    Meine Kreationen: Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen.
    | Bitte melde dich an, um diesen Link zu sehen.
    Avatar: Copyright 2017 by Saiki

  • Zitat

    Danke, Du hast hier Recht, daran hatte ich nicht gedacht. Ich nehme auch an, eine ASM Anweisung *müsste* für sich atomar sein (vermutlich aber nicht, da der Compiler die Anweisung ja übersetzen muss und das wohl Overhead und nicht nur die paar Bytes an der Stelle erzeugt), und zwischen den beiden ASM Anweisungen kann der C-Compiler definitiv noch irgendwas machen.


    ein asm statement ist atomar, und was innerhalb eines asm statements passiert wird vom compiler auch 1:1 in den code eingefügt (wäre das nicht so wäre das ganze komplett nutzlos). man müsste, damit es wirklich auch zuverlässig funktioniert, also zb sowas schreiben:

    Code
    asm("lda rega\n" \
          "ldx regx\n" \
          "jsr $1234");
    Zitat

    aber bei manchen von Deinen anderen kurzen "Das kannste vergessen" Postings sind Deine Gedankengänge nicht immer nachvollziehbar, also für mich jedenfalls nicht immer


    ich verliere schnell die geduld mit leuten die glauben es besser zu wissen, ja. mag für dritte unter umständen nicht hilfreich sein - das sind threads wie dieser hier aber generell eher selten. ausser als warnung vielleicht =P

  • hi c64funker

    [offtopic]Programmieren in C und gleichzeitig in ASM mögen manche hier nicht. Ich schon. Als ich anfing hatte ich die selben Fragen wie Du. Außerdem scheinst Du mir sehr neugierig und wißbegierig. [/offtopic]

    Zu Deiner Frage:
    1. In Inlineassembler, damit ist __asm__ gemeint, kannst Du eigentlich alles machen, es sürzt nicht ab. Es sei denn Du bist in einer Whileschleife und ändest brutal x oder y, je nachdem. Oder Du schreibst etwas auf den Stack und holst es nicht wieder runter. Aber normalerweise gibt es da keine Probleme. Für Assemblerroutinen empfiehlt es sich immer eine ASM-Datei nebenher laufen zu lassen. Mit .export asm_beispiel vor so einer ASM-Routine funktioniert dann in C auch __asm__ ("jsr asm_beispiel"); wie Du es auch schnn versucht hast.

    2. Ansonsten ist C dumm wie Brot, wenn es um Register geht. Schreibst Du a=b/2. Naja, kannst ja ´mal selbst gucken, was der macht in der *.s-Datei, jedenfalls nicht:
    lda _b
    llsr

    3. Was mir an C sehr gut gefällt ist, daß Du sehr sauber zeitunkritische Sachen sauber aufschreiben kannst. Allerdings sind die Register nach einem C-Speung in ein Unterprogramm im Allgemeinen nur noch Asche. Daher rate ich, ASM nur zu benuten, wenn es wirklixh auf Zeit ankommt.

    4. Irgendeiner hat wohl komplett alle Basicbefehle in eine basic.h gepackt. Für den Anfang ist sowas eine tolle Sache. Da kannst Du zum Üben erstmal in Basic kleine Programme schreiben.

    5. Du findest einen Ordner samples in Deinem cc.... , da sind Beispielprogramme drinnen, gucke Dir die zum Einstieg an, das hat mir auch geholfen.

  • Hmm..., meine Frage als C-Neuling ist berechtigt, weil es Teilweise viele selbstgestrickte Sachen im cc65 gibt wo man nicht mehr weiss, welche Hilfsmittel stehen für irgend eine Sache noch bereit. Daher ist meine Frage ob es Derartiges gibt berechtigt.

    Gruss

  • Zitat


    4. Irgendeiner hat wohl komplett alle Basicbefehle in eine basic.h
    gepackt. Für den Anfang ist sowas eine tolle Sache. Da kannst Du zum
    Üben erstmal in Basic kleine Programme schreiben.

    Hallo, danke. Du machst mir wieder Mut mit dem cc65 weiter zu basteln.

    Gruss

  • gerade als anfänger solltest du dich aber in erster linie mit den standardbibliotheken beschäftigen und erstmal lernen wie man C code schreibt. inline assembler ist was für deutlich fortgeschrittene, welche sowohl C beherrschen als auch die interna des compilers kennen.

  • Und ich sage:
    C auf dem PC lernen.
    Asm fuer den C64 am C64 oder am PC lernen.
    Wenn man beides so gut kann, dass sich damit jedes Problem jeweils loesen laesst:
    C am C64 in Erwaegung ziehen um einige Standardprobleme am C64 in C zu vereinfachen.
    Super (und seltenes) Beispiel: der gesamte Easyprog code, bzw die Menuefuehrung.

    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen.