;;; Signed divide ;;; 080A3468 (T) cmp r1,0h ;\ 080A346A (T) beq 80A34F0h ;} If r1 == 0: return 0 080A346C (T) push r4 080A346E (T) mov r4,r0 ;\ 080A3470 (T) eor r4,r1 ;} r12 contains sign of result 080A3472 (T) mov r12,r4 ;/ 080A3474 (T) mov r3,1h ; r3 = 1 080A3476 (T) mov r2,0h ; r2 = result = 0 080A3478 (T) cmp r1,0h ;\ 080A347A (T) bpl 80A347Eh ;} r1 = |r1|: 080A347C (T) neg r1,r1 ;/ 080A347E (T) cmp r0,0h ;\ 080A3480 (T) bpl 80A3484h ;} r0 = |r0| 080A3482 (T) neg r0,r0 ;/ 080A3484 (T) cmp r0,r1 ;\ 080A3486 (T) bcc 80A34E2h ;} If r0 < r1: return result 080A3488 (T) mov r4,1h ;\ 080A348A (T) lsl r4,r4,1Ch ;| ;| 080A348C (T) cmp r1,r4 ;| 080A348E (T) bcs 80A349Ah ;} r3 = minimum 16^n >= r0/r1 080A3490 (T) cmp r1,r0 ;} r1 *= r3 080A3492 (T) bcs 80A349Ah ;| 080A3494 (T) lsl r1,r1,4h ;| 080A3496 (T) lsl r3,r3,4h ;| 080A3498 (T) b 80A348Ch ;/ 080A349A (T) lsl r4,r4,3h ;\ ;| 080A349C (T) cmp r1,r4 ;| 080A349E (T) bcs 80A34AAh ;| 080A34A0 (T) cmp r1,r0 ;} r3 *= minimum 2^n >= r0/r1 080A34A2 (T) bcs 80A34AAh ;} r1 *= r3 080A34A4 (T) lsl r1,r1,1h ;| 080A34A6 (T) lsl r3,r3,1h ;| 080A34A8 (T) b 80A349Ch ;/ ; Loop begin 080A34AA (T) cmp r0,r1 ;\ 080A34AC (T) bcc 80A34B2h ;} If r0 >= r1: 080A34AE (T) sub r0,r0,r1 ; r0 -= r1 080A34B0 (T) orr r2,r3 ; r2 |= r3 080A34B2 (T) lsr r4,r1,1h ;\ 080A34B4 (T) cmp r0,r4 ;} If r0 >= r1/2: 080A34B6 (T) bcc 80A34BEh ;/ 080A34B8 (T) sub r0,r0,r4 ; r0 -= r1/2 080A34BA (T) lsr r4,r3,1h ;\ 080A34BC (T) orr r2,r4 ;} r2 |= r3/2 080A34BE (T) lsr r4,r1,2h ;\ 080A34C0 (T) cmp r0,r4 ;} If r0 >= r1/4: 080A34C2 (T) bcc 80A34CAh ;/ 080A34C4 (T) sub r0,r0,r4 ; r0 -= r1/4 080A34C6 (T) lsr r4,r3,2h ;\ 080A34C8 (T) orr r2,r4 ;} r2 |= r3/4 080A34CA (T) lsr r4,r1,3h ;\ 080A34CC (T) cmp r0,r4 ;} If r0 >= r1/8: 080A34CE (T) bcc 80A34D6h ;/ 080A34D0 (T) sub r0,r0,r4 ; r0 -= r1/8 080A34D2 (T) lsr r4,r3,3h ;\ 080A34D4 (T) orr r2,r4 ;} r2 |= r3/8 080A34D6 (T) cmp r0,0h ;\ 080A34D8 (T) beq 80A34E2h ;} If r0 == 0: return result 080A34DA (T) lsr r3,r3,4h ; r3 /= 16 080A34DC (T) beq 80A34E2h ; If r3 == 0: return result 080A34DE (T) lsr r1,r1,4h ; r1 /= 16 080A34E0 (T) b 80A34AAh ; Loop 080A34E2 (T) mov r0,r2 ;\ 080A34E4 (T) mov r4,r12 ;| 080A34E6 (T) cmp r4,0h ;} Return result with sign correction 080A34E8 (T) bpl 80A34ECh ;| 080A34EA (T) neg r0,r0 ;/ 080A34EC (T) pop r4 080A34EE (T) mov r15,r14 080A34F0 (T) push r14 080A34F2 (T) bl Nothing 080A34F6 (T) mov r0,0h 080A34F8 (T) pop r15 080A34FA dw 00000h ;;; Nothing ;;; 080A34FC (T) mov r15,r14 ;;; Signed remainder ;;; 080A3544 (T) mov r3,1h ; r3 = 1 080A3546 (T) cmp r1,0h ;\ 080A3548 (T) beq 80A3608h ;} If r1 == 0: return 0 080A354A (T) bpl 80A354Eh ;\ 080A354C (T) neg r1,r1 ;} r1 = |r1| 080A354E (T) push r4 080A3550 (T) push r0 ; Save r0 080A3552 (T) cmp r0,0h ;\ 080A3554 (T) bpl 80A3558h ;} r0 = |r0| 080A3556 (T) neg r0,r0 ;/ 080A3558 (T) cmp r0,r1 ;\ 080A355A (T) bcc 80A35FCh ;} If r0 < r1: return result 080A355C (T) mov r4,1h ;\ 080A355E (T) lsl r4,r4,1Ch ;| ;| 080A3560 (T) cmp r1,r4 ;| 080A3562 (T) bcs 80A356Eh ;} r3 = minimum 16^n >= r0/r1 080A3564 (T) cmp r1,r0 ;} r1 *= r3 080A3566 (T) bcs 80A356Eh ;| 080A3568 (T) lsl r1,r1,4h ;| 080A356A (T) lsl r3,r3,4h ;| 080A356C (T) b 80A3560h ;/ 080A356E (T) lsl r4,r4,3h ;\ ;| 080A3570 (T) cmp r1,r4 ;| 080A3572 (T) bcs 80A357Eh ;| 080A3574 (T) cmp r1,r0 ;} r3 *= minimum 2^n >= r0/r1 080A3576 (T) bcs 80A357Eh ;} r1 *= r3 080A3578 (T) lsl r1,r1,1h ;| 080A357A (T) lsl r3,r3,1h ;| 080A357C (T) b 80A3570h ;/ ; Loop start 080A357E (T) mov r2,0h ; r2 = 0 080A3580 (T) cmp r0,r1 ;\ 080A3582 (T) bcc 80A3586h ;} If r0 >= r1 080A3584 (T) sub r0,r0,r1 ; r0 -= r1 080A3586 (T) lsr r4,r1,1h ;\ 080A3588 (T) cmp r0,r4 ;} If r0 >= r1/2: 080A358A (T) bcc 80A3598h ;/ 080A358C (T) sub r0,r0,r4 ; r0 -= r1/2 080A358E (T) mov r12,r3 ;\ 080A3590 (T) mov r4,1h ;| 080A3592 (T) ror r3,r4 ;} r2 |= r3 ror 1 080A3594 (T) orr r2,r3 ;| 080A3596 (T) mov r3,r12 ;/ 080A3598 (T) lsr r4,r1,2h ;\ 080A359A (T) cmp r0,r4 ;} If r0 >= r1/4: 080A359C (T) bcc 80A35AAh ;/ 080A359E (T) sub r0,r0,r4 ; r0 -= r1/4 080A35A0 (T) mov r12,r3 ;\ 080A35A2 (T) mov r4,2h ;| 080A35A4 (T) ror r3,r4 ;} r2 |= r3 ror 2 080A35A6 (T) orr r2,r3 ;| 080A35A8 (T) mov r3,r12 ;/ 080A35AA (T) lsr r4,r1,3h ;\ 080A35AC (T) cmp r0,r4 ;} If r0 >= r1/8: 080A35AE (T) bcc 80A35BCh ;/ 080A35B0 (T) sub r0,r0,r4 ; r0 -= r1/8 080A35B2 (T) mov r12,r3 ;\ 080A35B4 (T) mov r4,3h ;| 080A35B6 (T) ror r3,r4 ;} r2 |= r3 ror 3 080A35B8 (T) orr r2,r3 ;| 080A35BA (T) mov r3,r12 ;/ 080A35BC (T) mov r12,r3 ; Save r3 080A35BE (T) cmp r0,0h ;\ 080A35C0 (T) beq 80A35CAh ;} If r0 == 0: return result 080A35C2 (T) lsr r3,r3,4h ; r3 /= 16 080A35C4 (T) beq 80A35CAh ; If r3 == 0: return result 080A35C6 (T) lsr r1,r1,4h ; r1 /= 16 080A35C8 (T) b 80A357Eh ; Loop 080A35CA (T) mov r4,0Eh ;\ 080A35CC (T) lsl r4,r4,1Ch ;| 080A35CE (T) and r2,r4 ;} If r2 & 0xE0000000 == 0: return result 080A35D0 (T) beq 80A35FCh ;/ 080A35D2 (T) mov r3,r12 ;\ 080A35D4 (T) mov r4,3h ;| 080A35D6 (T) ror r3,r4 ;} If saved r3 ror 3 & r2: 080A35D8 (T) tst r2,r3 ;| 080A35DA (T) beq 80A35E0h ;/ 080A35DC (T) lsr r4,r1,3h ;\ 080A35DE (T) add r0,r0,r4 ;} r0 += r1/8 080A35E0 (T) mov r3,r12 ;\ 080A35E2 (T) mov r4,2h ;| 080A35E4 (T) ror r3,r4 ;} If saved r3 ror 2 & r2: 080A35E6 (T) tst r2,r3 ;| 080A35E8 (T) beq 80A35EEh ;/ 080A35EA (T) lsr r4,r1,2h ;\ 080A35EC (T) add r0,r0,r4 ;} r0 += r1/4 080A35EE (T) mov r3,r12 ;\ 080A35F0 (T) mov r4,1h ;| 080A35F2 (T) ror r3,r4 ;} If saved r3 ror 1 & r2: 080A35F4 (T) tst r2,r3 ;| 080A35F6 (T) beq 80A35FCh ;/ 080A35F8 (T) lsr r4,r1,1h ;\ 080A35FA (T) add r0,r0,r4 ;} r0 += r1/2 080A35FC (T) pop r4 ;\ 080A35FE (T) cmp r4,0h ;| 080A3600 (T) bpl 80A3604h ;} Return result with sign correction 080A3602 (T) neg r0,r0 ;/ 080A3604 (T) pop r4 080A3606 (T) mov r15,r14 080A3608 (T) push r14 080A360A (T) bl Nothing 080A360E (T) mov r0,0h 080A3610 (T) pop r15 ;;; Unsigned divide ;;; 080A3614 (T) cmp r1,0h ;\ 080A3616 (T) beq 80A3682h ;} If r1 == 0: return 0 080A3618 (T) mov r3,1h ; r3 = 1 080A361A (T) mov r2,0h ; r2 = result = 0 080A361C (T) push r4 080A361E (T) cmp r0,r1 ;\ 080A3620 (T) bcc 80A367Ch ;} If r0 < r1: return result 080A3622 (T) mov r4,1h ;\ 080A3624 (T) lsl r4,r4,1Ch ;| ;| 080A3626 (T) cmp r1,r4 ;| 080A3628 (T) bcs 80A3634h ;} r3 = minimum 16^n >= r0/r1 080A362A (T) cmp r1,r0 ;} r1 *= r3 080A362C (T) bcs 80A3634h ;| 080A362E (T) lsl r1,r1,4h ;| 080A3630 (T) lsl r3,r3,4h ;| 080A3632 (T) b 80A3626h ;/ 080A3634 (T) lsl r4,r4,3h ;\ ;| 080A3636 (T) cmp r1,r4 ;| 080A3638 (T) bcs 80A3644h ;| 080A363A (T) cmp r1,r0 ;} r3 *= minimum 2^n >= r0/r1 080A363C (T) bcs 80A3644h ;} r1 *= r3 080A363E (T) lsl r1,r1,1h ;| 080A3640 (T) lsl r3,r3,1h ;| 080A3642 (T) b 80A3636h ;/ ; Loop begin 080A3644 (T) cmp r0,r1 ;\ 080A3646 (T) bcc 80A364Ch ;} If r0 >= r1: 080A3648 (T) sub r0,r0,r1 ; r0 -= r1 080A364A (T) orr r2,r3 ; r2 |= r3 080A364C (T) lsr r4,r1,1h ;\ 080A364E (T) cmp r0,r4 ;} If r0 >= r1/2: 080A3650 (T) bcc 80A3658h ;/ 080A3652 (T) sub r0,r0,r4 ; r0 -= r1/2 080A3654 (T) lsr r4,r3,1h ;\ 080A3656 (T) orr r2,r4 ;} r2 |= r3/2 080A3658 (T) lsr r4,r1,2h ;\ 080A365A (T) cmp r0,r4 ;} If r0 >= r1/4: 080A365C (T) bcc 80A3664h ;/ 080A365E (T) sub r0,r0,r4 ; r0 -= r1/4 080A3660 (T) lsr r4,r3,2h ;\ 080A3662 (T) orr r2,r4 ;} r2 |= r3/4 080A3664 (T) lsr r4,r1,3h ;\ 080A3666 (T) cmp r0,r4 ;} If r0 >= r1/8: 080A3668 (T) bcc 80A3670h ;/ 080A366A (T) sub r0,r0,r4 ; r0 -= r1/8 080A366C (T) lsr r4,r3,3h ;\ 080A366E (T) orr r2,r4 ;} r2 |= r3/8 080A3670 (T) cmp r0,0h ;\ 080A3672 (T) beq 80A367Ch ;} If r0 == 0: return result 080A3674 (T) lsr r3,r3,4h ; r3 /= 16 080A3676 (T) beq 80A367Ch ; If r3 == 0: return result 080A3678 (T) lsr r1,r1,4h ; r1 /= 16 080A367A (T) b 80A3644h ; Loop 080A367C (T) mov r0,r2 ; Return result 080A367E (T) pop r4 080A3680 (T) mov r15,r14 080A3682 (T) push r14 080A3684 (T) bl Nothing 080A3688 (T) mov r0,0h 080A368A (T) pop r15 ;;; Unsigned remainder ;;; 080A368C (T) cmp r1,0h ;\ 080A368E (T) beq 80A3742h ;} If r1 == 0: return 0 080A3690 (T) mov r3,1h ; r3 = 1 080A3692 (T) cmp r0,r1 ;\ 080A3694 (T) bcs 80A3698h ;} If r0 < r1: 080A3696 (T) mov r15,r14 ; Return r0 080A3698 (T) push r4 080A369A (T) mov r4,1h ;\ 080A369C (T) lsl r4,r4,1Ch ;| ;| 080A369E (T) cmp r1,r4 ;| 080A36A0 (T) bcs 80A36ACh ;} r3 = minimum 16^n >= r0/r1 080A36A2 (T) cmp r1,r0 ;} r1 *= r3 080A36A4 (T) bcs 80A36ACh ;| 080A36A6 (T) lsl r1,r1,4h ;| 080A36A8 (T) lsl r3,r3,4h ;| 080A36AA (T) b 80A369Eh ;/ 080A36AC (T) lsl r4,r4,3h ;\ ;| 080A36AE (T) cmp r1,r4 ;| 080A36B0 (T) bcs 80A36BCh ;| 080A36B2 (T) cmp r1,r0 ;} r3 *= minimum 2^n >= r0/r1 080A36B4 (T) bcs 80A36BCh ;} r1 *= r3 080A36B6 (T) lsl r1,r1,1h ;| 080A36B8 (T) lsl r3,r3,1h ;| 080A36BA (T) b 80A36AEh ;/ ; Loop start 080A36BC (T) mov r2,0h ; r2 = 0 080A36BE (T) cmp r0,r1 ;\ 080A36C0 (T) bcc 80A36C4h ;} If r0 >= r1 080A36C2 (T) sub r0,r0,r1 ; r0 -= r1 080A36C4 (T) lsr r4,r1,1h ;\ 080A36C6 (T) cmp r0,r4 ;} If r0 >= r1/2: 080A36C8 (T) bcc 80A36D6h ;/ 080A36CA (T) sub r0,r0,r4 ; r0 -= r1/2 080A36CC (T) mov r12,r3 ;\ 080A36CE (T) mov r4,1h ;| 080A36D0 (T) ror r3,r4 ;} r2 |= r3 ror 1 080A36D2 (T) orr r2,r3 ;| 080A36D4 (T) mov r3,r12 ;/ 080A36D6 (T) lsr r4,r1,2h ;\ 080A36D8 (T) cmp r0,r4 ;} If r0 >= r1/4: 080A36DA (T) bcc 80A36E8h ;/ 080A36DC (T) sub r0,r0,r4 ; r0 -= r1/4 080A36DE (T) mov r12,r3 ;\ 080A36E0 (T) mov r4,2h ;| 080A36E2 (T) ror r3,r4 ;} r2 |= r3 ror 2 080A36E4 (T) orr r2,r3 ;| 080A36E6 (T) mov r3,r12 ;/ 080A36E8 (T) lsr r4,r1,3h ;\ 080A36EA (T) cmp r0,r4 ;} If r0 >= r1/8: 080A36EC (T) bcc 80A36FAh ;/ 080A36EE (T) sub r0,r0,r4 ; r0 -= r1/8 080A36F0 (T) mov r12,r3 ;\ 080A36F2 (T) mov r4,3h ;| 080A36F4 (T) ror r3,r4 ;} r2 |= r3 ror 3 080A36F6 (T) orr r2,r3 ;| 080A36F8 (T) mov r3,r12 ;/ 080A36FA (T) mov r12,r3 ; Save r3 080A36FC (T) cmp r0,0h ;\ 080A36FE (T) beq 80A3708h ;} If r0 == 0: return result 080A3700 (T) lsr r3,r3,4h ; r3 /= 16 080A3702 (T) beq 80A3708h ; If r3 == 0: return result 080A3704 (T) lsr r1,r1,4h ; r1 /= 16 080A3706 (T) b 80A36BCh ; Loop 080A3708 (T) mov r4,0Eh ;\ 080A370A (T) lsl r4,r4,1Ch ;| 080A370C (T) and r2,r4 ;} If r2 & 0xE0000000 == 0: 080A370E (T) bne 80A3714h ;/ 080A3710 (T) pop r4 ;\ 080A3712 (T) mov r15,r14 ;} Return r0 080A3714 (T) mov r3,r12 ;\ 080A3716 (T) mov r4,3h ;| 080A3718 (T) ror r3,r4 ;} If saved r3 ror 3 & r2: 080A371A (T) tst r2,r3 ;| 080A371C (T) beq 80A3722h ;/ 080A371E (T) lsr r4,r1,3h ;\ 080A3720 (T) add r0,r0,r4 ;} r0 += r1/8 080A3722 (T) mov r3,r12 ;\ 080A3724 (T) mov r4,2h ;| 080A3726 (T) ror r3,r4 ;} If saved r3 ror 2 & r2: 080A3728 (T) tst r2,r3 ;| 080A372A (T) beq 80A3730h ;/ 080A372C (T) lsr r4,r1,2h ;\ 080A372E (T) add r0,r0,r4 ;} r0 += r1/4 080A3730 (T) mov r3,r12 ;\ 080A3732 (T) mov r4,1h ;| 080A3734 (T) ror r3,r4 ;} If saved r3 ror 1 & r2: 080A3736 (T) tst r2,r3 ;| 080A3738 (T) beq 80A373Eh ;/ 080A373A (T) lsr r4,r1,1h ;\ 080A373C (T) add r0,r0,r4 ;} r0 += r1/2 080A373E (T) pop r4 ;\ 080A3740 (T) mov r15,r14 ;} Return result 080A3742 (T) push r14 080A3744 (T) bl Nothing 080A3748 (T) mov r0,0h 080A374A (T) pop r15