Hello, Guest the thread was viewed999 times and contains 26 replies

last post from MrSterlingBS at the

Testtool für Assembler-Programme gesucht

  • Was passiert beim ROL oder ROR, ASL oder LSR und welche Flags werden u. U. gesetzt?

    Findest Du alles hier:


    mcs6500_family_hardware_manual.pdf

    Aber ich muss mir, beispielsweise für eine 16bit-Multiplikation, einiges wieder erarbeiten.

    Wenn's schnell sein soll und beide Faktoren unbekannt sind, wird das üblicherweise mit Differenzen von Quadratzahlen, letztere aus Tabellen, ausgerechnet. Bitshiften und Zusammenaddieren ist langsamer.


    Ohhhgottt, was hab ich losgetreten. [...]

    Von deiner Seite kommt halt relativ wenig rüber mit welcher konkreten Aufgabenstellung Du gerade wieder einsteigst. Da mußt Du dich nicht wundern, wenn dir da die ganze Bandbreite an Werkzeugen präsentiert wird. Die Leutz sind sich auch nicht zu schade, eigene Werkzeuge zu bauen, wenn Ihnen das, was "auf dem Markt" ist im Moment für den eigenen Anspruch nicht taugt.


    Solche flapsigen Bemerkungen helfen dir dann aber auch nicht weiter und kommen bei dem einen oder anderen auch gerne schon mal in den falschen Hals.


    Pro-Tip: such dir eins von den vorgestellten Tools aus, schau ob dir das was bringt, und dann kannst Du gerne in ein paar Wochen mit einem neuen, selbstgeschriebenen Programm daherkommen, das zeigt, daß Du was gelernt hast. Merci.

  • Aber ich muss mir, beispielsweise für eine 16bit-Multiplikation, einiges wieder erarbeiten.

    Wenn's schnell sein soll und beide Faktoren unbekannt sind, wird das üblicherweise mit Differenzen von Quadratzahlen, letztere aus Tabellen, ausgerechnet.

    Hallo Mike,


    hast Du nen Beispiel oder Link zu der Variante parat?


    Grüße

    Jörg

  • hast Du nen Beispiel oder Link zu der Variante parat?

    Von hier:


    Writing a 3D geometry engine from scratch - Denial


    (... leider momentan hinter einer Anmeldung, da unlängst eine Bot-Armee einen massiven Angriff auf das Denial-Forum gefahren hat ...)


    Die beiden je 512 Bytes großen Tabellen 'abs_table_lo' und 'abs_table_hi' werden wie folgt initialisiert:

    Code
    1. FOR X=0 TO 511
    2. SQ=INT(X*X/4)
    3. HI=INT(SQ/256)
    4. LO=SQ-256*HI
    5. POKE abs_table_lo+X,LO
    6. POKE abs_table_hi+X,HI
    7. NEXT


    Das ist bereits für vorzeichenbehaftete Zahlen. Wenn man den Teil von "BIT zp_factor_1" bis ".Multiply_04" wegläßt, gilt die Routine für vorzeichenlose Zahlen.


    Die Routine entnimmt die beiden (8-Bit-)Faktoren aus zwei Zeropage-Adressen und speichert das (16-Bit-)Ergebnis ebenfalls in zwei Zeropage-Adressen. Viele Beispiele im Netz erwarten die Eingabe in den CPU-Registern und geben das Ergebnis ebenfalls in CPU-Registern zurück. Der Kern der Multiplikationsroutine läßt sich durchaus auch auf diese Weise implementieren, wobei die Eingabewerte in den meisten praktischen Fällen nicht bereits zur Hand sind, sondern ohnehin erst noch aus dem Speicher abgerufen werden müssen. Es ist ebenso unwahrscheinlich, daß das Ergebnis direkt von einer anderen Multiplikation verarbeitet wird, sodaß es auch erstmal wieder im Speicher abgelegt werden muß. Die Ein-/Ausgabeverarbeitung dieser anderen Routinen erhöht deren Zyklenanzahl um weitere 12 Zyklen (2x LD% ZP, 2x ST% ZP, % ^= beliebiges CPU-Register)! Für die obige Routine benötigt der vorzeichenlose Teil 50 oder 53 Zyklen; je nach Vorzeichen benötigt die gesamte Routine ohne RTS zwischen 62 und 71 Zyklen, durchschnittlich 66,5 Zyklen.