]> git.sur5r.net Git - cc65/blobdiff - libsrc/runtime/lmod.s
Fixed key definitions (were removed from apple2.h)
[cc65] / libsrc / runtime / lmod.s
index 8c62d27c05b93684ba2218938ef5a6e8b32ffa95..ab3d8c0b79d26b3fbdb2ebbab6f8f79c5884fbc6 100644 (file)
@@ -8,19 +8,32 @@
 ; values if $8000, in which case the negate will fail.
 
                .export         tosmodeax
-       .import         poplsargs, udiv32, adjlsres
-       .importzp       sreg, ptr1, ptr2, tmp3, tmp4
+       .import         poplsargs, udiv32, negeax
+       .importzp       sreg, ptr1, ptr2, tmp1, tmp3, tmp4
 
 tosmodeax:
                jsr     poplsargs       ; Get arguments from stack, adjust sign
-       jsr     udiv32          ; Do the division
-       lda     ptr1            ; Remainder is in (ptr2:tmp3:tmp4)
-       lda     ptr2
-       ldx     ptr2+1
-       ldy     tmp3
-       sty     sreg
-       ldy     tmp4
-       sty     sreg+1
-       jmp     adjlsres        ; Adjust the sign of the result if needed
+       jsr     udiv32          ; Do the division, remainder is in (ptr2:tmp3:tmp4)
 
+; Load the result
+
+        lda     ptr2
+       ldx     ptr2+1
+       ldy     tmp3
+       sty     sreg
+       ldy     tmp4
+       sty     sreg+1
+
+; Check the sign of the result. It is the sign of the left operand.
+
+        bit     tmp1            ; Check sign of left operand
+        bpl     Pos             ; Jump if result is positive
+
+; Result is negative
+
+        jmp     negeax          ; Negate result
+
+; Result is positive
+
+Pos:    rts                     ; Done