X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fruntime%2Flmod.s;h=ab3d8c0b79d26b3fbdb2ebbab6f8f79c5884fbc6;hb=175cba57014842fa589658612e040933a3c5064a;hp=8c62d27c05b93684ba2218938ef5a6e8b32ffa95;hpb=53dd513176425872128ef26031d00952ef7a0628;p=cc65 diff --git a/libsrc/runtime/lmod.s b/libsrc/runtime/lmod.s index 8c62d27c0..ab3d8c0b7 100644 --- a/libsrc/runtime/lmod.s +++ b/libsrc/runtime/lmod.s @@ -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