49 lines
472 B
ArmAsm
49 lines
472 B
ArmAsm
.define .dvu2
|
|
.sect .text
|
|
.sect .rom
|
|
.sect .data
|
|
.sect .bss
|
|
.sect .text
|
|
|
|
! 16-bit divide
|
|
! parameters:
|
|
! bc: divisor
|
|
! de: dividend
|
|
! de: quotient (out)
|
|
! hl: remainder (out)
|
|
! no overflow detection
|
|
|
|
|
|
|
|
.dvu2:
|
|
or a
|
|
ld h,d
|
|
ld l,e
|
|
sbc hl,bc
|
|
jp m,3f
|
|
jp c,3f ! bc > de?
|
|
ld hl,0
|
|
ld a,16
|
|
0:
|
|
add hl,hl
|
|
ex de,hl
|
|
add hl,hl
|
|
ex de,hl
|
|
jr nc,1f
|
|
inc hl
|
|
or a
|
|
1:
|
|
sbc hl,bc
|
|
inc de
|
|
jp p,2f
|
|
add hl,bc
|
|
dec de
|
|
2:
|
|
dec a
|
|
jr nz,0b
|
|
ret
|
|
3:
|
|
ld hl,0
|
|
ex de,hl
|
|
ret
|