Es gibt 39 Antworten in diesem Thema, welches 5.039 mal aufgerufen wurde. Der letzte Beitrag (4. Juni 2012 um 02:26) ist von sauhund.

  • Also ich möchte für eine Routine drei: ptr1 ptr2 ptr3 voreingestellte Zeiger in einer Assemblerroutine verwenden. Bisher haben für alle Zwecke zwei gereicht. :P

    Nunja, benutze ich ptr3 regt sich zwar ein bißchen der Linker auf und verteilt mir angeblich gutgemeinte Ratschläge, die ich ´mal übersetzen möchte: Bist Du irre? Aber wenn man ausprobiert, ob alles klappt, freut man sich, klappt.

    Nur wenn ich dann scheins - und ich verstehe nicht warum - dann sta (ptr3),y z.B. reinschreibe, dann macht irgendwas den Laden dich und ich übersetze wieder: Es reicht!

    So, meine Frage also, wie bastel ich mir ein ptr geschickt selbst, damit ich keine Probleme mehr bekomme?

  • Also im Prinzip klappt alles, aber eigentlich dann doch wieder nicht, und der Compiler gibt irgendwelche Meldungen aus? Da würd ich so ganz allgemein und unverbindlich mal vorschlagen, ERST das Problem zu posten und DANN das Butterbrotpapier zu rauchen ;)

  • Code
    levelx.s(16398): Error: Range error

    __asm__ ("sta (ptr3),y");
    Mit diesem Befehl.

    Code
    ld65: Warning: Address size mismatch for `ptr3': Exported from zeropage.o, zeropage.s(8) as `zeropage', import in levelx.o, levelx.s(16307) as `absolute'

    Ohne.

    Ja, wie bastel ich mir selbst so ein ptr, ich meine, reden wir nicht über zwei Byte? Frei übersetzt, es reicht!, sagt der sonst nur, wenn ich mich einem bedingten Sprung zu weit springen will? (Da würde ich das übrigens mit Unerreichbarkeitsfehler übersetzten, ich kann ja englisch.)

  • Tipp ins Blaue: ptr3 selbst darf nur EIN Byte groß sein.
    Bitte melde dich an, um diesen Link zu sehen.

  • Zeropage Adressen sind aber nur 1 Byte gross.

  • 1. Stimmt es denn folgendermaßen?

    Dann wollte mir der ld65 wirklich helfen. Dem ist zwar sowas egal, aber ptr3 ist eine Zeropageadresse, die nur ein Byte lang ist. Komme ich also wie hier auf die Idee, mit lda (ptr3),y etwas abzulegen, dann schmeißt er die Arbeit hin und zwar aus guten Grunde, denn ptr3+1 gehört nicht mehr dazu.

    2. Kann man lda (...),y grundsätzlich nicht auf Zeropageadressen anwenden oder zickt ld65 doch nur rum?

    3. Wo und wie bilde ich mir denn dann einen neuen sinnvollen Zeiger, damit ich den dann wie ptr1 und ptr2 schön nutzen kann?

  • Kann man lda (...),y grundsätzlich nicht auf Zeropageadressen anwenden oder zickt ld65 doch nur rum?

    lda (...),y kann man NUR mit Zeropageadressen verwenden. Welcher Wert wird denn ptr3 in deinem Programm zugewiesen?

  • So, jetzt kommt Licht in die Dunkelheit.

    Das erklärt, warum ich Probleme beim Basteln eines neuen solchen Zeigers habe!

    ptr3 brauche ich nicht genau auszulesen, die Fehlermeldungen lassen wie Du sagst nur den Schluß zu, daß cc65 bei einem dritten Zeiger ptr3 einfach gut auf lda (...),y verzichten kann und deshalb hat cc65 sich vermutlich schlau irgendein Byte ausgesucht, das man sonst sowieso nicht toll benutzen kann.

    Die Frage ist also nicht mehr: Kann ich mir selbst so einen Zeiger bauen? Sondern die Frage ist ob?

    Benutzt cc65 gewisse Zeropageadressen nicht und hat die vielleicht sogar extra für einen Supercoder wie mich reserviert?

    Was würdet ihr daraus schließen, wird mit ZEROPAGE ZP vollständig beansprucht?
    Beansprucht ZP vollständig die Zeropage? (abgesehen von Kleinigkeiten wie $1 und stack und so?)

  • In deiner Map steht, er braucht $1A Bytes ab $0002. Die Zeropage umfasst $0000 bis $00FF, da sind also noch ca. 220 Bytes frei. Der Prozessor-Stack liegt nicht in der Zeropage, sondern zwischen $0100 und $01FF.

  • Lerne doch einfach, was Du da eigentlich tust :smile:
    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.

    (ist keine Auktionswerbung, keine Panik - ist nicht meine - kannst auch irgendwo anders herholen)

  • Zitat

    Lerne doch einfach, was Du da eigentlich tust :smile:


    allerdings.

    das problem ist schlicht das das symbol "ptr3" als zeropage symbol importiert werden muss bevor es als solches benutzt werden kann.

  • Zu Büchern, ich habe hier ein Buch Theoretische Informationstechnik und das reicht mir schon. Das hier mache ich nebenher.

    Zitat

    In deiner Map steht, er braucht $1A Bytes ab $0002. Die Zeropage umfasst $0000 bis $00FF, da sind also noch ca. 220 Bytes frei.

    Ja, Danke. Ich hatte schon das schlimmste beführchtet. Ihr seid ja wie ein offenes Buch und durch die gezielten Fragen festigt sich hoffentlich euer wissen. Nicht daß ich Euch damit zu sehr nerve. Also im Mathematikforum bin ich immer froh, mein HöMa und Numerikwissen immer frisch halten zu können. (Macht ja auch Spaß.)

    Mein Stil ist umstritten aber auch, ich poste. Alles läßt mir aber keine Ruhe und oft tue ich einiges selbst dann die Lösung zu finden. Und es gibt da ja einige Threads, die ich mit aufwendiger Erklärung und Lösung hier abgeschlossen habe.

    1. Frage: Sollte ich einen Block in der Konfigurationsdatei auch neu eröffnen? Oder macht das eher keinen Sinn?

    2. Frage: Welche Teile des Zerospaces benutzt goattracker?

  • du patchst auch trainer hart in den speicher wenn du den source hast.... =D

  • So, jetzt mache ich ´mal eine Abschließende Ergebnisliste zu "ptr3".

    Ptr3 wird von cc65 bei der Umwandlung von C in ASM verwendet. Dabei liegt Ptr3 allerdings anders als Ptr1 und Ptr2 außerhalb der Zeropage. In der Standardcc65-Map steht, cc65 braucht $1A Bytes ab $0002. Die Zeropage umfasst $0000 bis $00FF, da sind also noch ca. 220 Bytes frei. Diese eignen sich zum direkten Ansprechen. Ein weiterer Eintrag in die MAP dazu kann aber erklärender sein, als keiner. Möchte man ein "ptr3" nutzen, muß man dem einen eigenen Namen geben und sich dazu zwei Byte im Zeropage auswählen.

    Eben in englisch hoffentlich richtig verstanden, braucht goattracker keine Zeropage, um zu laufen. Darin ist goattracker viel pflegeleichter als die allermeisten SIDs, die beim Abspielen teilweise unkontrolliert darin rumschreiben. Hoffe, ich sage nichts falsches, anders als bei SIDs braucht man bei Goattracker auch keine Angst zu haben, daß außerhalb der eingelegten BIN überhaupt irgendwas verändert wird. :thanx:

  • Zitat

    Dabei liegt Ptr3 allerdings anders als Ptr1 und Ptr2 außerhalb der Zeropage.


    - wie kommst du darauf?
    - liesst du das was dir hier geantwortet wird?

  • Zitat

    Zitat
    Dabei liegt Ptr3 allerdings anders als Ptr1 und Ptr2 außerhalb der Zeropage.


    - wie kommst du darauf?
    - liesst du das was dir hier geantwortet wird?

    Bitte was? Ich bekam folgendes hier erklärt:

    lda (ptr3),y liefert Range Error, weil ptr3 außerhalb des Zerospace liegt.

    Was kann ich denn daran nicht verstanden haben?

    Zitat

    Fast alle C64 Musikroutinen benutzen irgendwas bei $F8-$FF, meist nur 2 oder 3 Bytes.

    Ok, aber auch goattracker ist hier die Frage. Und ich habe eben etwas gelesen wie, daß Goattracker einen fester Bereich hat, der nicht verlassen wird. Ich habe das auf die beim BINCompelieren gemünzt, welche ja immer weit weg von der Zerospace sind.

    Also meine Frage: Bist Du Dir sicher oder meinst Du SIDs generell?

  • Zitat

    Was kann ich denn daran nicht verstanden haben?


    guck mal in post Bitte melde dich an, um diesen Link zu sehen.