Beiträge von atomcode im Thema „Wurde jemals eine 6502 ohne "JMP indirect bug" gefertigt?“

    gestern Abend noch gelesen ... Einer der ersten echten Nörgler war wohl Western Digital. "ERROR!!! ERROR!!! ERROR!!!" schrieben sie, "your program should NEVER include an instruction of the type JMP ($xxFF)". Hm, warum nicht, wenn man weiß, wie es funktioniert? Das Verhalten ist ja nicht instabil oder so. Ich würde den bewussten Gebrauch des Effektes in die Liga der stabilen Illegals stellen. Also, dann nur eben für diese CPU bzw. diese Maschine - rein theoretisch, denn einen Nutzen hat man m.E. davon nicht.

    Ansonsten hatten sie aber recht, davon ausgehend, dass man "anständig" programmiert und auf Verwendung von Illegals, Bugs und Quirks verzichtet, also so, wie eigtl. jeder C64-Programmierer das tut. :whistling: Apropos, genau so, nämlich "Quirk" (Marotte, Laune, Macke, Tick, sonderbarer Zug), bezeichnet WDC in ihrer eigenen Dokumentation heute die JMP()-Anomalie des 6510. Plötzlich ist es kein "Bug" mehr. Seltsam, womit das wohl zu tun hat. ^^

    unerwünschtes Verhalten

    Von mir ist es durchaus erwünscht, da ich diesen seltenen Fall allein schon deswegen umgehen würde, weil der noch einen TZ mehr bräuchte; sonst kann ich ja gleich auf Z80 umsteigen. ;)

    Aber dafür wurden wahrscheinlich ein paar Transistoren und ein paar Dollar gespart. Ich glaube jedenfalls nicht, dass es ein Bug im Sinne eines versehentlichen Fehlers ist, sondern, dass vielmehr das Weglassen der Berücksichtigung der Page-Überschreitung bewusst geschah, aus Prioritätsgründen. Der Mann (oder die Frau, wie bei Acorn) stand am Reißbrett und machte sich über jeden Befehl Gedanken, und dazu gehört auch der Umgang mit Page-Überschreitungen. Ich denke, übersehen kann man so etwas dabei gar nicht. Vielleicht gibt es dazu noch irgendwo ein Statement von Chuck Peddle.

    Bei den ZP-internen Indizierungen ist das ja genauso, dass da die Page nicht verlassen werden kann. Bei indirekt X-indizierter Adressierung hat man den Effekt sogar gleich zweimal, einmal beim X-Aufschlag und dann nochmal bei der resultierenden Adresse. ($F8, [7]) steuert die Adresse in $FF/$00 an (Containeradresse wrapt), und ($FE, [7]) landet bei $05/$06 (Index wrapt). Für ein Problem halte ich das nicht.

    Aber auch nicht, was das JMP() betrifft, sofern man die Ausnahme kennt. Zur Not kann man im Assembler die Liste der Zieladressen auf 2 "alignen", damit der Effekt nicht greifen kann. Darum würde ich das nicht mal als Bug bezeichnen, sondern als fehlendes Feature, weil man es seinerzeit sicherlich ganz bewusst weggelassen hat, wie mc71 schon sagte. Denn bei anderen Indizierungsarten, wo die Berücksichtigung eines seitenübergreifenden Zugriffs wichtiger ist, hat man es wiederum bewusst eingebaut und kostet dann natürlich auch etwas mehr Zeit in der Ausführung.