Im Assembler laeuft eigentlich alles ueber den Akku,
es liegt daran wie der Chip aufgebaut, der Akku ist sozusagen der Schreibtisch.
Falls etwas nicht auf den Schreibtisch passt wird neben dran abglegt (Sprich in Register X),
aber gearbeitet wird immer mit dem Schreibtisch (also mit dem Akku).
Das mit dem invertieren wuerde ich mal huebsch bleiben lassen, denn da aenderst du den Typ der Variable.
In C versuche ich immer alle Varaliaben als unsigned zu definieren, wegen dem hoehren Adressbreich,
das machen die gerade bei Asm sicher auch. Und nach dem zu nicht weist wie gross die Zahl ist die drin steht..
lieber Finger weg lassen (ein bit weniger halbiert den Adressbereich, also bei 8 bit von 0-256 ist dann -128-128).
Du musst eigentlich die Reihenfolge umdrehen.
Also anstelle so:
lda TPSACCEL //laedt TPSACCEL in den Akkumulator
tax //speichert den Akku Inhalt in Register x
lda #$64 ; accel is in 0.1ms units //laedt Speicheradresse in den Akku
mul //multiplizieren des Akku mit dem X-Register
add tmp14 //addiert zum Akku tmp14 dazu
sta tmp20 //speichere den Akku nach tmp20
eher so:
lda TPSACCEL //laedt TPSACCEL in den Akkumulator
tax //speichert den Akku Inhalt in Register x
lda #$64 ; accel is in 0.1ms units //laedt Speicheradresse in den Akku
mul //multiplizieren des Akku mit dem X-Register
txa //Akkuinhalt nach in X speichern
lda tmp14 //tmp14 in den Akku laden
sub //X wird abgezogen vom Akku (ohne Gewaehr das er X nimmt, aber ich denke das er das tut)
sta //Akku speichern nach tmp20
falls du es doch versuchen willst mit deiner Metode:
da TPSACCEL //laedt TPSACCEL in den Akkumulator
tax //speichert den Akku Inhalt in Register x
lda #$64 ; accel is in 0.1ms units //laedt Speicheradresse in den Akku
mul //multiplizieren des Akku mit dem X-Register
cma //Akkuinhalt wird negiert
add tmp14 //addiert zum Akku tmp14 dazu
sta tmp20 //speichere den Akku nach tmp20
edit: Ah, eigentlich ist es egal welche du immst, die CMA-Methode ist weniger Aufwand und beide werden katastrophal fehlschlagen sobald TPSACCEL * $64 groesser als tmp14 ist (weil dann ist das Ergebniss negativ, Bufferunderum)
edit2: Schade, der MC68HC908 unterstuetzt den Befehl CMA nicht...
Aber hier auf Seite 94 gibts alle was er kann, musst dir "nur" noch die Reihenfolge zusammenstoepseln:
http://www.freescale.com/files/microcon ... 08GP32.pdf
edit3000: Ah, negieren geht doch mit NEGA. Aber emp5:tmp6, das verwirrt mich noch immer. Was so die Verkettung ?