INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo zusammen. Der Fehler erklärt sich durch den Fehler in der Routine auf Adresse $1c1a im Betriebssystem der 1.1er C-Control. Meine Erklärung bei "Fehler in der Divisionsroutine" in BUGS.TXT der C-Control-intern-Sammlung ist aber auch nicht ganz korrekt. Siehe Beitrag 4499. ; --------------------------------------------------------------------------- ; Vorzeichenbehaftete Zahlen in vorzeichenlose umwandeln (fuer ; vorzeichenlose Division), diese Routine enthaelt einen Bug ; ; Fehlerfrei arbeitet diese Routine nur, wenn Word1 Werte im ; Bereich von -32767 bis 32767 und Word2 Werte im Bereich von ; 0 bis 32767 annimmt. ; ; Wenn Word2 vorzeichenbehaftet ist, wird es trotzdem nicht ; invertiert. Ein spezieller Fehler tritt auf wenn Word1=-32768 ; ist. Dann wird das Word auf Adresse $55:$56 invertiert, also ; sowohl Teile von Word1 und Word2! ; ; input : $54:$55 = Word1, $56:$57 = Word2 ; output: $54:$55 und $56:$57 enthalten u.U. ein falsches Ergebnis ; used : a,$54,$55,$56 ; ; called from $1c3d,$1c4e,$1c63,$1c74 ; --------------------------------------------------------------------------- 1c1a : b654 lda $54 ; ist Word1 positiv? 1c1c 2a0a bpl $1c28 ; falls ja, springe 1c1e 4f clra ; 1c1f b055 sub $55 ; 1c21 b755 sta $55 ; falls nein, invertiere 1c23 4f clra ; Word1 1c24 b254 sbc $54 ; 1c26 b754 sta $54 ; 1c28 : b654 lda $54 ; hier muss "lda $56" stehen 1c2a 2a0a bpl $1c36 ; 1c2c 4f clra ; 1c2d b056 sub $56 ; hier muss "sub $57" stehen 1c2f b756 sta $56 ; hier muss "sta $57" stehen 1c31 4f clra ; 1c32 b255 sbc $55 ; hier muss "sbc $56" stehen 1c34 b755 sta $55 ; hier muss "sta $56" stehen 1c36 : 81 rts ; return from subroutine Viele Grüße Dietmar Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |