Hello, Guest the thread was called159 times and contains 2 replays

last post from zrs1 at the

C64 Turbo Assembler 34-Year-Old Bug Found & Fixed

  • Ja, nett. Der Bug ist ein Klassiker (nicht im Sinne der Bekanntheit), sondern von der Art her. Das kommt nicht selten vor, dass man sich mit dem Carry-Flag verhaspelt. Und diese Fehler fallen mitunter auch nicht sofort auf, weil von der "Geschichte" davor zufälligerweise das Flag richtig gesetzt sein könnte. Manchmal kommt man vielleicht auch drauf, dass man sich das explizite Setzen oder Löschen des Carry-Flag sparen kann. Aber dann baut man da oder dort im Code um und plötzlich halten die Vorbedingungen nicht mehr und Optimierung ist hinfällig und so ein Bug hat sich dann eingeschlichen. :S

    Sowas kommt mir nur allzu bekannt vor und ich nehme an, das werden wohl die meisten 6502-Coder auch mal erlebt haben ...

  • Manchmal kommt man vielleicht auch drauf, dass man sich das explizite Setzen oder Löschen des Carry-Flag sparen kann. Aber dann baut man da oder dort im Code um und plötzlich halten die Vorbedingungen nicht mehr und Optimierung ist hinfällig und so ein Bug hat sich dann eingeschlichen. :S

    This. Auf dem 6502 sollte man sich zweimal überlegen, ob man das eine Byte und die zwei Taktzyklen für CLC/SEC wirklich braucht. Also ist die ursprüngliche Optimierung hier nicht das Problem, der Programmierer hat "alles richtig gemacht". Es empfiehlt sich aber, anstelle des CLC/SEC eine Kommentarzeile einzubauen, sinngemäß "; carry always cleared here, because [xyz]". Dann stehen die Chancen besser, dass man das Problem beim späteren Umbau auch bemerkt.