jsr poplsargs ; Get arguments from stack, adjust sign
jsr udiv32 ; Do the division, remainder is in (ptr2:tmp3:tmp4)
-; Load the result with the exception of the low byte
+; Load the result
+ lda ptr2
ldx ptr2+1
ldy tmp3
sty sreg
; Check the sign of the result. It is the sign of the left operand.
- lda tmp1 ; Check sign of left operand
+ bit tmp1 ; Check sign of left operand
bpl Pos ; Jump if result is positive
; Result is negative
- lda ptr2 ; Load byte 0 of result
jmp negeax ; Negate result
; Result is positive
-Pos: lda ptr2 ; Load byte 0 of result
- rts ; Done
+Pos: rts ; Done
tosmodax:
jsr popsargs ; Get arguments from stack, adjust sign
jsr udiv16 ; Do the division
+ lda ptr1 ; Load low byte of result
ldx ptr1+1 ; Load high byte of result
; Adjust the sign of the result. tmp1 contains the high byte of the left
; the result of the modulo operation is the same as that of the left
; operand
- lda tmp1
+ bit tmp1
bpl Pos ; Jump if sign of result positive
; Result is negative
- lda ptr1 ; Load low byte of result
jmp negax ; Adjust the sign
; Result is positive
-Pos: lda ptr1
- rts
+Pos: rts