]> git.sur5r.net Git - cc65/blobdiff - libsrc/runtime/ldiv.s
no TGI_ERR_NO_MEM or TGI_ERR_NO_IOCB anymore: replaced by TGI_ERR_NO_RES
[cc65] / libsrc / runtime / ldiv.s
index f08354d24347d368d8accf23a38ddd7eacfbb3e4..3d8dda0d5bd4a0ee60cc869f702d35006b290e42 100644 (file)
@@ -7,14 +7,34 @@
 ; When negating values, we will ignore the possibility here, that one of the
 ; values if $80000000, in which case the negate will fail.
 
-               .export         tosdiveax
-       .import         poplsargs, udiv32, adjlsres
-       .importzp       ptr1
+               .export         tosdiv0ax, tosdiveax
+       .import         poplsargs, udiv32, negeax
+       .importzp       sreg, ptr1, tmp1, tmp2
+
+tosdiv0ax:
+        ldy     #$00
+        sty     sreg
+        sty     sreg+1
 
 tosdiveax:
                jsr     poplsargs       ; Get arguments from stack, adjust sign
-               jsr     udiv32          ; Do the division
-       lda     ptr1            ; Result is in (ptr1:sreg)
-       ldx     ptr1+1
-       jmp     adjlsres        ; Adjust the sign of the result if needed
+               jsr     udiv32          ; Do the division, result is in (ptr1:sreg)
+        ldx     ptr1+1          ; Load byte 1 of result
+
+; Adjust the sign of the result
+
+        lda     tmp1            ; Get sign of left operand
+        eor     tmp2            ; Calculate sign of result
+        bpl     Pos             ; Jump if result positive
+
+; Result is negative
+
+       lda     ptr1            ; Load byte 0
+       jmp     negeax          ; Negate value
+
+; Result is positive
+
+Pos:    lda     ptr1
+        rts
+