Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Zahlenbereich Darstellung Kategorie: Verschiedenes (von Dietmar, Homepage - 27.10.2006 15:52)
 Als Antwort auf Re: Zahlenbereich Darstellung von Achim - 26.10.2006 16:27
Dietmar nutzt:  CC1-M-Unit V1.1, Advanced CC1-Unit, Open-Micro, Open-Mini, Open-Mini M-Unit, Open-Mini Station, B-Control, sonstige
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

Bisherige Antworten: