LAX #xx (Opcode $AB)

Es gibt 16 Antworten in diesem Thema, welches 2.798 mal aufgerufen wurde. Der letzte Beitrag (1. März 2011 um 18:01) ist von tlr.

  • So, jetzt mal ne schöne C64-Frage.

    Hat irgendwie näheres internes Wissen über den Opcode $AB (LAX Bitte melde dich an, um diesen Link zu sehen.) ?
    Ich kann mich daran erinnern, dass ich auf meinem ersten 64er bei einem LAX #$FF
    mal $FF, mal $FE, mal $EF und mal $EE im Akuu und X hatte. Ist aber schon lange her.
    Mein aktueller C64 (gerade getestet) $EE aus.

    Auf allen Seiten wird gesagt, dass der Befehl instabil ist
    (z.B. Bitte melde dich an, um diesen Link zu sehen.)
    Könnte es sein, dass

    1) ein LAX #$00 stabil ist ?
    2) auch noch ein LAX #$88 stabil ist
    3) sogar ein LAX #$EE noch tut ?

  • Aufgrund der Instabilität ist das schwer zu sagen :D

    Ansonsten: LAX ist ok, solange es nicht LAX Bitte melde dich an, um diesen Link zu sehen. ist. Die anderen LAX sind einfach LDA + LDX, was keine Probleme verursacht. LAX Bitte melde dich an, um diesen Link zu sehen. ist aber LDA + TAX.

  • Auf meiner Kiste 250407 mit 6510 datecode von 1984
    ist LAXBitte melde dich an, um diesen Link zu sehen. stabil auch nah tausenden Durchgängen
    LAXBitte melde dich an, um diesen Link zu sehen. produziert AC=EE und XR=EE
    LAXBitte melde dich an, um diesen Link zu sehen. produziert AC=88 und XR=88
    LAX#EE produziert AC=EE und XR=EE

    und wenn wir gerade dabei sind:
    LAXBitte melde dich an, um diesen Link zu sehen. > produziert AC=AA und XR=AA
    LAXBitte melde dich an, um diesen Link zu sehen. > produziert AC=44 und XR=44

    also eher mit vorsicht zu geniessen

  • Zitat

    LAX Bitte melde dich an, um diesen Link zu sehen. ist aber LDA + TAX.

    Das heißt, man weiß nicht genau, ob erst der LDA oder erst der TAX kommt ?

  • Zitat

    Auf meiner Kiste 250407 mit 6510 datecode von 1984 ...

    Das ist so auch meine Beobachtung von damals.

    LAX Bitte melde dich an, um diesen Link zu sehen. war immer so etwas wie :

    LAX #(XX) & ( $EE OR Z) mit Z (wie zufällig) 0x00, 0x01, 0x10 oder 0x11)

  • Das heißt, man weiß nicht genau, ob erst der LDA oder erst der TAX kommt ?


    Öhm nein, die laufen ja gleichzeitig. Bei LDA + LDX sind halt beide Register einfach nur auf "Eingang" geschaltet. Das ist ziemlich unkritisch. Bei LDA + TAX ist X auf Eingang und A auf Ein- und Ausgang gleichzeitig, was eben nicht so toll funktioniert.


  • Öhm nein, die laufen ja gleichzeitig. Bei LDA + LDX sind halt beide Register einfach nur auf "Eingang" geschaltet. Das ist ziemlich unkritisch. Bei LDA + TAX ist X auf Eingang und A auf Ein- und Ausgang gleichzeitig, was eben nicht so toll funktioniert.

    Letzendlich dann ist unklar was in den Registern steht und somit ist dieser Befehl ein NoGo.

  • Letzendlich dann ist unklar was in den Registern steht und somit ist dieser Befehl ein NoGo.


    Das Ergebnis ist (auf den CPUs auf denen es instabil ist) laut dem Testprogramm von tlr temperaturabhängig, da kann man doch bestimmt eine Art Thermometer daraus basteln ;)

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    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.

  • Bei LDA + TAX ist X auf Eingang und A auf Ein- und Ausgang gleichzeitig, was eben nicht so toll funktioniert.

    Das wäre noch nicht das Problem. Siehe das Diagramm auf Bitte melde dich an, um diesen Link zu sehen. (nein, es wäre sinnlos das hier reinzukopieren...) da sieht man daß AC/DB (der Ausgang des Akkus) und DL/DB (der Ausgang des Zwischenspeichers, in dem der #nn-Wert steht) auf denselben Bus DB geschaltet werden. Von da geht es über einen Satz 'pass mosfets' auf den Bus SB und den Eingang des X-Registers und des Akkus. Damit ist der Akku ein rückgekoppelter verstärker und kann -prinzipiell- durch Anlegen eines starken Signals umgeschaltet werden. Deswegen funktioniert LAX #nn in den meisten Fällen. Aber eben nicht immer... je nach Toleranz der einzelnen Transistoren, und evtl. je nach Chip-Revision.

    KI-Verwendung in diesem Posting: Rechtschreibkontrolle des Browsers.
    Abweichungen aufgrund des technischen Fortschritts oder individueller Vorlieben vorbehalten.

  • Ich hab das Spiel mal mit allen Werten von $00 bis $ff gemacht.
    Sieht ganz so aus als wenn Bit #0 und Bit Bitte melde dich an, um diesen Link zu sehen. generell auf 0 gesetzt werden

  • Was stand denn vorher im Akku? Der Wert landet ja zunächstmal mit auf DB, zusammen mit dem Immediate-Wert.

    KI-Verwendung in diesem Posting: Rechtschreibkontrolle des Browsers.
    Abweichungen aufgrund des technischen Fortschritts oder individueller Vorlieben vorbehalten.

  • Stimmt! Das was vorher im Akku war beeinflusst die Sache.
    Allerdings etwas unlogisch...

    Also mach ich mal vorher $FF in den Akku und dann LAXBitte melde dich an, um diesen Link zu sehen. > AC=55 XR=55
    dann $00 in den Akku und LAXBitte melde dich an, um diesen Link zu sehen. > AC=44 XR=44

    noch ein paar Tests:

    LDABitte melde dich an, um diesen Link zu sehen. > LAXBitte melde dich an, um diesen Link zu sehen. > AC=54 XR=54
    LDABitte melde dich an, um diesen Link zu sehen. > LAXBitte melde dich an, um diesen Link zu sehen. > AC=45 XR=45
    LDABitte melde dich an, um diesen Link zu sehen. > LAXBitte melde dich an, um diesen Link zu sehen. > AC=55 XR=55

    das war jetzt noch logisch, aber dann:

    LDABitte melde dich an, um diesen Link zu sehen. > LAXBitte melde dich an, um diesen Link zu sehen. > AC=54 XR=54

    hier hätte ich jetzt eigentlich erwartet das AC und XR dann 44 sind so wie es z.B.

    LDA#E0 > LAXBitte melde dich an, um diesen Link zu sehen. > AC=44 XR=44 macht....

  • There is some test data on the related LAX #<imm> and ANE #<imm> opcodes here:
    Bitte melde dich an, um diesen Link zu sehen.
    (compile analyze.c and run it on the files in the dumps directory)

    Basically the behaviour varies with chip, temperature and voltage.

  • There is some test data on the related LAX #<imm> and ANE #<imm> opcodes here:
    Bitte melde dich an, um diesen Link zu sehen.
    (compile analyze.c and run it on the files in the dumps directory)

    Basically the behaviour varies with chip, temperature and voltage.

    Hat das schon jemand gemacht? Ich habe derzeit leider keine Gelegenheit dazu.

    Sprechen denn alle Messungen bislang für die These, dass bei lax Bitte melde dich an, um diesen Link zu sehen. höchstens ein paar Bits zufällig auf 0 gesetzt werden, dass jedoch niemals zufällig Bits auf 1 gesetzt werden? Dann wäre ja ein lax#$00 durchaus stabil.

  • Hat das schon jemand gemacht? Ich habe derzeit leider keine Gelegenheit dazu.


    dumps/dump8500_1588-cooling/


    In this test LAX always does Acc = (Acc | $EE) & #<imm>.
    ANE does Acc = (Acc | CONST) & X & #<imm> where CONST is sometimes $EE and sometimes $FE.

    The number of deviations from the closest CONST ($EE) seems to go down with temperature.

    dumps/dump6510_4782-coldstart/


    Correlation to rising temperature is not as clear here.

    ANE has mostly CONST = $EE with bits 000----- randomly cleared.
    LAX has mostly CONST = $00 with bits 111-11-- randomly set.

    Abnormal means bits that would violate the assumed model of the instruction. I have never seen this.

    This would indeed mean that ANE #$00 and LAX #$00 might be stable.

    Note that the test doesn't test every combination of inputs and also that it doesn't currently verify X for LAX.