;************************************************************************/ ;* */ ;* Scalable Mathematics: Division */ ;* */ ;* Author: Peter Dannegger */ ;* danni@specs.de */ ;* */ ;************************************************************************/ $nosb a_size equ 7 ;divident: 7 bytes b_size equ 3 ;divisor: 3 bytes ra0 equ 30h ;divident ra1 equ 31h ra2 equ 32h ra3 equ 33h ra4 equ 34h ra5 equ 35h ra6 equ 36h rb0 equ r0 ;divisor rb1 equ r1 rb2 equ r2 rr0 equ r3 ;remainder rr1 equ r4 rr2 equ r5 ri0 equ r6 ;loop counter $sa noli _mset macro a0, a1, a2 a0 set a1&a2 endm $rs ;------------------------------------------------------------------------- scaldiv: clr a $sa noli _count set 0 rept b_size _mset _regr, rr, %_count _count set _count + 1 $rs mov _regr, a ;clear remainder $sa noli endm $rs mov ri0, #a_size * 8 _scd1: clr c $sa noli _count set 0 rept a_size _mset _rega, ra, %_count _count set _count + 1 $rs mov a, _rega rlc a ;shift divident mov _rega, a $sa noli endm _count set 0 rept b_size _mset _regr, rr, %_count _count set _count + 1 $rs mov a, _regr rlc a ;shift remainder mov _regr, a $sa noli endm if a_size <> b_size $rs jbc cy, _scd2 $sa noli endif _count set 0 rept b_size _mset _regr, rr, %_count _mset _regb, rb, %_count _count set _count + 1 $rs mov a, _regr subb a, _regb ;test subtraction $sa noli endm $rs jc _scd3 _scd2: $sa noli _count set 0 rept b_size _mset _regr, rr, %_count _mset _regb, rb, %_count _count set _count + 1 $rs mov a, _regr subb a, _regb ;subtract mov _regr, a $sa noli endm $rs inc ra0 ;set result bit _scd3: djnz ri0, _scd1 ret ;------------------------------------------------------------------------- end